diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml deleted file mode 100644 index f88752ba96..0000000000 --- a/.github/workflows/jekyll.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Deploy Jekyll site to Pages - -on: - # Runs on pushes targeting the default branch - push: - branches: ["master"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - # Build job - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Setup Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.2 # Not needed with a .ruby-version file - bundler-cache: true # runs 'bundle install' and caches installed gems automatically - cache-version: 0 # Increment this number if you need to re-download cached gems - - name: Setup Pages - id: pages - uses: actions/configure-pages@v3 - - name: Build with Jekyll - # Outputs to the './_site' directory by default - run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" - env: - JEKYLL_ENV: production - - name: Upload artifact - # Automatically uploads an artifact from the './_site' directory by default - uses: actions/upload-pages-artifact@v2 - - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v2 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000000..bd09951e4b --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,62 @@ +name: Astro Deploy + +on: + workflow_dispatch: + push: + branches: [master] + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +env: + BUILD_PATH: "." + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup pnpm + uses: pnpm/action-setup@v2 + with: + version: latest + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: "*" + check-latest: true + cache: "pnpm" + + - name: Setup pages + id: pages + uses: actions/configure-pages@v3 + + - run: | + pnpm install --frozen-lockfile + pnpm build + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: ${{ env.BUILD_PATH }}/dist + + deploy: + name: Deploy + runs-on: ubuntu-latest + needs: build + environment: + name: github-pages + url: ${{ steps.deployment.outputs.pages_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/surge-xt-manual-pdf.yml b/.github/workflows/surge-xt-manual-pdf.yml index 70efd2fffb..90a97e25bc 100644 --- a/.github/workflows/surge-xt-manual-pdf.yml +++ b/.github/workflows/surge-xt-manual-pdf.yml @@ -1,9 +1,9 @@ name: Surge XT Manual PDF on: - push: - paths: - - 'manual_xt/**' + # push: + # paths: + # - "src/content/pages/manual-xt.mdx" workflow_dispatch: permissions: @@ -24,8 +24,7 @@ jobs: sudo apt install ./pandoc-3.1.1-1-amd64.deb; wget -q https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb; sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb; - cd manual_xt; - pandoc -f gfm -t html Surge-XT.md -o Surge-XT-Manual.pdf + pandoc -f gfm -t html src/content/pages/manual-xt.mdx -o Surge-XT-Manual.pdf --css ./pdf.css -V title:"" --pdf-engine-opt="--footer-font-name" --pdf-engine-opt="Lato" --pdf-engine-opt="--footer-font-size" --pdf-engine-opt="12" diff --git a/.gitignore b/.gitignore index 329a267e7e..6240da8b10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,21 @@ -_site -.sass-cache -.jekyll-cache -.jekyll-metadata +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files .DS_Store -.Gemfile.swp -.bundle/ -vendor/ -Gemfile.lock diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..6c59086d86 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +enable-pre-post-scripts=true diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 0000000000..c6d60db5c8 --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,12 @@ +tabWidth: 4 +bracketSameLine: true +overrides: + - files: ["*.yml", "*.yaml"] + options: + tabWidth: 2 + - files: ["*.astro"] + options: + parser: "astro" +plugins: + - "prettier-plugin-astro" + - "prettier-plugin-tailwindcss" diff --git a/404.html b/404.html deleted file mode 100644 index c472b4ea0a..0000000000 --- a/404.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: default ---- - - - -
-

404

- -

Page not found :(

-

The requested page could not be found.

-
diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 041d994f8f..0000000000 --- a/Gemfile +++ /dev/null @@ -1,16 +0,0 @@ -source "https://rubygems.org" - -gem "jekyll", "~> 4.3" -gem "minima", "~> 2.5" -gem "jekyll-remote-theme", "~> 0.4" -gem "wdm", "~> 0.1", :platforms => [:mingw, :x64_mingw, :mswin] -gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby] - -group :jekyll_plugins do - gem "jekyll-feed", "~> 0.17" -end - -platforms :mingw, :x64_mingw, :mswin, :jruby do - gem "tzinfo", "~> 2.0" - gem "tzinfo-data" -end diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..f288702d2f --- /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 index a40dd04655..0047b40e7a 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,95 @@ -# surge-synthesizer.github.io +# surge-synth-team.org -## Working with the website +### The website is built with [Astro](https://astro.build/) & [Tailwind CSS](https://tailwindcss.com/). -For this site we are using a **Jekyll theme** named **Swiss**, which can be found [here.](https://github.com/broccolini/swiss) You can download **Jekyll** from [here.](https://jekyllrb.com/) +### [Astro Editor Setup](https://docs.astro.build/en/editor-setup/) & [Tailwind Editor Setup](https://tailwindcss.com/docs/editor-setup) -In order to make changes to the site you will need to follow standard operating procedures for working with GitHub pages and Jekyll sites that use themes. You will have to override styles with more specific CSS. You can also add more pages as HTML or `.md`, use front matter, etc. +--- -Jekyll has a specific folder structure to generate sites from. It uses `.scss` files, layouts, etc. There is a bunch of stuff about using Jekyll and GitHub pages online. Since this was all entirely new to me, I won't attempt an in depth tutorial on all the moving pieces. +#### **Install these VS Code Extensions** -At a high level, what I did to make changes was create my own `_surge.scss` file, include that in the theme that we are using, and make changes to the `home.html` file. If you would like to make changes to styles, I would recommend making them in the `_surge.scss` file only. +- [Astro](https://marketplace.visualstudio.com/items?itemName=astro-build.astro-vscode) +- [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +- [MDX](https://marketplace.visualstudio.com/items?itemName=unifiedjs.vscode-mdx) +- [Tailwind CSS IntelliSense](https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss) -# Use GitHub as CMS +Optional: -You can follow a couple of different paths to make updates to the website. The easiest and most direct way is to use GitHub as a CMS. +- [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) -To make changes this way, all you need to do is fork the project, create a branch, make changes locally, and then open a PR. [This "How to Git"](https://github.com/surge-synthesizer/surge/blob/main/doc/How%20to%20Git.md) document from the [Surge-Synthesizer](https://github.com/surge-synthesizer/surge) project outlines a suggested way of creating PRs. +In your VS Code `settings.json` file: -Another option, using your new branch, is to click the edit button at the "pencil" button at the upper right corner of the GitHub editor, which should be available on all text documents, including HTML and CSS files. +#### Set Prettier as your default formatter -## Using the command line and Jekyll, Bundler, and optionally Docker to get a more modern front end development experience. +```json +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[astro]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[yaml]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "prettier.documentSelectors": ["**/*.astro"] +} +``` -Being comfortable using a command line and understanding how to get everything installed with the correct file permissions will be key. On a Mac, this meant I installed an updated version of Ruby in a different location that was in `$PATH`, and had correct read/write permissions. To accomplish this goal, I used `rbenv` and `bundler` to get Ruby, and `bundler` to install Jekyll. +#### Format on paste, save & type -Following this Mac specific tutorial is a pretty good way to set up Ruby and to get gems installed without beating your head against a wall; caveat emptor applies though: [Moncef Belyamani - Fastest and Easiest Way To Install Ruby on a Mac](https://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/?utm_source=stackoverflow&utm_campaign=51126403#step-2-install-chruby-and-the-latest-ruby-with-ruby-install) +```json +{ + "editor.formatOnPaste": true, + "editor.formatOnSave": true, + "editor.formatOnType": true +} +``` -By the time you have Ruby installed on macOS successfully, you can run the commands below: +#### Associate CSS files with tailwind +```json +{ + "files.associations": { + "*.css": "tailwindcss" + } +} ``` -$ gem install jekyll -$ gem install bundle -$ git clone https://github.com/surge-synthesizer/surge-synthesizer.github.io.git -$ cd surge-synthesizer.github.io -$ bundle install -$ bundle exec jekyll server -``` -After you successfully get through the above, the live version of the site will be running at `localhost`. From this point, you can open a text editor and make changes to files. Upon saving the files and refreshing the browser, you will see the changes appear. +# Working on the site + +- Install [node.js](https://nodejs.org/en) + - (Optional) Install [pnpm](https://pnpm.io/) +- Run `npm install` or `pnpm install` depending on your choice of package manager +- Run `npm run dev` or `pnpm dev` to run the development server @ http://localhost:3000/ +- Run `npm run build` or `pnpm build` to build the site to the `dist` directory +- Run `npm run preview` or `pnpm preview` to preview the built site + +Static assets (images, fonts, etc.) live in the `public` directory. + +You can use tailwind inline or edit the main file in the `src/css` directory. + +# Adding and editing pages + +To make changes, all you need to is fork the project. Once you have done that you can create a branch on your fork make changes and then open a PR. [This](https://github.com/surge-synthesizer/surge/blob/main/doc/How%20to%20Git.md) git document for the OSS Surge-Synthesizer project outlines a suggested way of doing work and then creating PRs. -## Docker +Once you have created a branch in your fork you can then just click the edit button (upper right corner) to edit a post in the `src/content/pages` folder. Because the posts are markdown documents you can just edit stuff in place in the GitHub editor. -You can use Docker to help with all of this stuff. That requires for you to have a Docker account. It will also provide a live version of your site at `localhost`. Super useful if you are changing files often. +To add a page, open the `src/content/pages` folder in your fork and click the create new file button. -If you have Docker installed, you should be able to run the project by switching to the root dir and running: +A post has a frontmatter section and a body section. The frontmatter section is metadata about the post, such as which image to use and what categories it belongs to. A new post would have frontmatter that looks something like: ``` -$ rm Gemfile.lock ; docker run --rm -it -v "$(pwd)":/usr/src/app -p 4000:4000 starefossen/github-pages ; git checkout Gemfile.lock +--- +slug: surge-xt +title: Surge XT +summary: Surge XT is an open source hybrid synthesizer, and the synth which started the Surge Synth Team project! +order: 1 +thumbnail: /screenshots/surge-xt.png +categories: [Synth] +url: https://surge-synthesizer.github.io +issue_tracker: https://github.com/surge-synthesizer/surge/issues +--- ``` -# The Skin Library +The title is the display name for the post, the summary is the text in the card on the main page, the thumbnail is an image for the project, and the categories are a comma-separated list of any appropriate categories (look at the other projects for categories that already exist). The order determines which position a post appears in on the main page. -The Skin library is part of this repository, but its assets now live in the [surge-extra-content](https://github.com/surge-synthesizer/surge-extra-content) repository. Correct procedure for additions is to upload the assets to that location, and link them into the Skin Library from there. Compare to the markdown of previous entries for reference. +The body section of a post is where you can write a description of the project in markdown. It is everything after the frontmatter section. diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 174fdac924..0000000000 --- a/_config.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Welcome to Jekyll! -# -# This config file is meant for settings that affect your whole blog, values -# which you are expected to set up once and rarely edit after that. If you find -# yourself editing this file very often, consider using Jekyll's data files -# feature for the data you need to update frequently. -# -# For technical reasons, this file is *NOT* reloaded automatically when you use -# 'bundle exec jekyll serve'. If you change this file, please restart the server process. -# -# If you need help with YAML syntax, here are some quick references for you: -# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml -# https://learnxinyminutes.com/docs/yaml/ -# -# Site settings -# These are used to personalize your new site. If you look in the HTML files, -# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. -# You can create any custom variable you would like, and they will be accessible -# in the templates via {{ site.myvariable }}. - -title: Surge -description: >- # this means to ignore newlines until "baseurl:" - Surge is an open source digital synthesizer. -baseurl: "" # the subpath of your site, e.g. /blog -url: "https://surge-synthesizer.github.io" # the base hostname & protocol for your site, e.g. http://example.com - -github_username: "surge-synthesizer" -github_repo: "surge" - -# Build settings -markdown: kramdown -theme: minima -plugins: - - jekyll-feed - - jekyll-remote-theme - -remote_theme: broccolini/swiss - -# Exclude from processing. -# The following items will not be processed, by default. -# Any item listed under the `exclude:` key here will be automatically added to -# the internal "default list". -# -# Excluded items can be processed by explicitly listing the directories or -# their entries' file path in the `include:` list. -# -# exclude: -# - .sass-cache/ -# - .jekyll-cache/ -# - gemfiles/ -# - Gemfile -# - Gemfile.lock -# - node_modules/ -# - vendor/bundle/ -# - vendor/cache/ -# - vendor/gems/ -# - vendor/ruby/ - -webrick: - headers: - Access-Control-Allow-Origin: "*" diff --git a/_data/surge_navItems.yaml b/_data/surge_navItems.yaml deleted file mode 100644 index 92af3b9f10..0000000000 --- a/_data/surge_navItems.yaml +++ /dev/null @@ -1,35 +0,0 @@ -docs_list_title: Pages -docs: - -- title: Home - url: / - -- title: Changelog - url: /changelog - -- title: Manual - url: /manual-xt - -- title: Tuning Guide - url: /tuning-guide - -- title: Feedback - url: /feedback - -- title: Skin Library - url: /skin-library - -- title: Accessibility Notes - url: /accessibility - -- title: Virus Warnings on Windows - url: /viruses - -- title: Wiki - url: https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki - -- title: About Surge XT - url: /about - -- title: Surge XT for VCV Rack - url: https://surge-synth-team.org/surge-rack/ diff --git a/_includes/README.md b/_includes/README.md deleted file mode 100644 index 0d5fd0486f..0000000000 --- a/_includes/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# [Click here for the Surge synthesizer binaries](https://github.com/surge-synthesizer/releases/releases) - diff --git a/_includes/brew.html b/_includes/brew.html deleted file mode 100644 index 0ebf50bcb5..0000000000 --- a/_includes/brew.html +++ /dev/null @@ -1,4 +0,0 @@ -
-brew update
-brew cask install surge-synthesizer
-
diff --git a/_includes/community.html b/_includes/community.html deleted file mode 100644 index 996b454e32..0000000000 --- a/_includes/community.html +++ /dev/null @@ -1,16 +0,0 @@ -
-
-
-

Community

-

- We love Surge XT. We also  love people.

Community is a - big thing to us  on this project. We want an inclusive, positive, and happy - community with contributions from a large set of differing viewpoints and backgrounds.

Let's - be kind to each other and treat each other with respect. It takes all of us working together to make the - community great.

We are looking forward to your insights and contributions. -

Let's make something amazing!

~ Surge Synth Team -

- Get Involved Here -
-
-
diff --git a/_includes/content-creators.html b/_includes/content-creators.html deleted file mode 100644 index b72d577482..0000000000 --- a/_includes/content-creators.html +++ /dev/null @@ -1,17 +0,0 @@ -
-
-
-
-

Content Creators

-

- If you love to use Surge XT and make amazing presets or music, we want to hear from you!

In - fact, we would love to have you pitch in and help out with the project!

We are looking for - people that have content which showcases Surge XT in all of its glory.

If you make patches, - write entire songs using only Surge XT or anything in between, we would love for you to be involved!
-

- Join Surge Synth Team Discord Server -
-
-
diff --git a/_includes/contributors.html b/_includes/contributors.html deleted file mode 100644 index 25f43fddf3..0000000000 --- a/_includes/contributors.html +++ /dev/null @@ -1,14 +0,0 @@ -
-
-
-

Contributors Welcome!

-

- Surge XT is supported by a community of volunteer open source developers, designers, testers, musicians, - synthesizer enthusiasts, and content creators.

Without them, none of would have been possible. If - you're interested in seeing what's going on with the project, the best thing to do is:
-

- View the Surge XT Repository -
-
-
diff --git a/_includes/designers.html b/_includes/designers.html deleted file mode 100644 index ee0c79ecfe..0000000000 --- a/_includes/designers.html +++ /dev/null @@ -1,16 +0,0 @@ -
-
-
-
-

Designers

-

- If you would like to pitch in and have interests in UX, UI, visual design or any other design related - topics, there are plenty of open issues.

The #surge-design channel on Surge Synth Team Discord - server can help you find something to get started with.
-

- Join Surge Synth Team Discord Server -
-
-
diff --git a/_includes/developers.html b/_includes/developers.html deleted file mode 100644 index ddf449a351..0000000000 --- a/_includes/developers.html +++ /dev/null @@ -1,24 +0,0 @@ -
-
-
-
-

Developers

-

- If you are interested in contributing, we welcome developers who know or want to learn C++, git, - graphics and Web design.

There’s plenty of open issues and our Discord server can help you - find a good first one if you want.

Hop over to the Issues page on GitHub to see what we need - help with.
-

- View Surge XT Issue Tracker -

- You can also join the conversation in #surge-development channel at the Surge Synth Team Discord - server. We'll help get you started!
-

- Join Surge Synth Team Discord Server -
-
-
diff --git a/_includes/digital.html b/_includes/digital.html deleted file mode 100644 index 58411dc8e9..0000000000 --- a/_includes/digital.html +++ /dev/null @@ -1,13 +0,0 @@ -
-
-
-
-

Digital Beauty

-

Surge XT is a digital synth and makes no bones about it.

-

- If you have used it in the past, it will be like welcoming an old friend back into your life. If you are - new to Surge XT, welcome to the party. Come on in, the water is fine. -

-
-
-
diff --git a/_includes/effects.html b/_includes/effects.html deleted file mode 100644 index dad40306d8..0000000000 --- a/_includes/effects.html +++ /dev/null @@ -1,50 +0,0 @@ -
-
-
-
-

Effects

-

16 effect units arranged as 4 inserts per scene, 4 sends and 4 master effects.

- -

27 effect algorithms:

- -

FILTERING:
- 3-band fully parametric EQ
- 11-band graphic EQ
- Exciter
- Resonator

- -

DISTORTION:
- CHOW
- Distortion
- Neuron
- Tape (based on ChowTapeModel!)
- Waveshaper

- -

MANGLING:
- Combulator
- Frequency Shifter
- Nimbus
- Ring Modulator
- Treemonster
- Vocoder

- -

MODULATION:
- Chorus
- Ensemble
- Flanger
- Phaser
- Rotary Speaker

- -

TIME & SPACE:
- Delay
- Reverb 1
- Reverb 2
- Spring Reverb

- -

MULTIEFFECTS:
- Airwindows (itself containing 56 effects!)
- Conditioner
- Mid-Side Tool

-
-
-
diff --git a/_includes/filter-block.html b/_includes/filter-block.html deleted file mode 100644 index e5e35ec77f..0000000000 --- a/_includes/filter-block.html +++ /dev/null @@ -1,26 +0,0 @@ -
-
-
-
-

Filter Block

-

Two filter units in 8 different configurations, - with feedback loop available in 7 of them.

-

- Available filter algorithms: Lowpass (12 and 24 dB/oct, each with 3 variations), Legacy Ladder Lowpass - (6-24 dB/oct), Vintage Ladder Lowpass (2 variations, each with and without gain compensation), Highpass - (12 and 24 dB/oct, each with 3 variations), Bandpass (12 and 24 dB/oct, each with 3 variations), Notch - (12 and 24 dB/oct, each with 2 variations), Allpass (3 variations), Comb (positive and negative), - S&H. -

-

- Open-source additions to our filter algorithms include: K35 and Diode Ladder filter types from Odin 2 - synthesizer, 12 and 24 dB/oct multimode filters from OB-Xd, and weird but fascinating Cutoff Warp, - Resonance Warp and Tri-Pole filters by Jatin Chowdhury! -

-

- Filters can self-oscillate (with excitation) and respond amazingly fast to cutoff frequency changes. -

-

Waveshaper (43 shapes).

-
-
-
diff --git a/_includes/footer.html b/_includes/footer.html deleted file mode 100644 index fd14b48c84..0000000000 --- a/_includes/footer.html +++ /dev/null @@ -1,14 +0,0 @@ -
-
-

- This project is maintained by the community at the - surge-synthesizer open source - project on GitHub. -

- -
-
diff --git a/_includes/general-specs.html b/_includes/general-specs.html deleted file mode 100644 index 0e296ab689..0000000000 --- a/_includes/general-specs.html +++ /dev/null @@ -1,19 +0,0 @@ -
-
-
-
-

Synth Specifications

-

General

-

Synthesis method: Subtractive hybrid

-

- Each patch contains two scenes which are separate instances of the entire synthesis engine (except - effects) that can be used to create layered or split patches. -

-

Quick category-based patch browser with textual search and favorites

-

Runs on a variety of operating systems, plugin formats, and architectures

-

Factory Sounds

-

Over 2800 patches

-

Over 700 wavetables

-
-
-
diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index b3ab6b6a89..0000000000 --- a/_includes/head.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - {% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %} - diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index 3ec490c50d..0000000000 --- a/_includes/header.html +++ /dev/null @@ -1,102 +0,0 @@ - - -
- - - -
- - - Manual - - {% if page.title == "Surge XT User Manual" or page.title == "Surge XT in VCV Rack" or page.title == "Tuning Guide" or page.title == "Surge 1.9 User Manual" or page.title == "Handbuch" %} - - {% endif %} -
-
diff --git a/_includes/hero.html b/_includes/hero.html deleted file mode 100644 index dd45a1bb17..0000000000 --- a/_includes/hero.html +++ /dev/null @@ -1,27 +0,0 @@ -
-
-
-
- Surge XT Logo -

A sound designer's dream.
A friendly, open community.

-

Featuring many synthesis techniques, a great selection of filters, a flexible modulation engine, a smorgasbord of effects, and modern features like MPE and microtuning.

-

Surge XT is a wonderful tool. We love it. We think you will, too!

- - -
-
-
-
-
diff --git a/_includes/modulation.html b/_includes/modulation.html deleted file mode 100644 index c201007746..0000000000 --- a/_includes/modulation.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
-
-
-

Modulation

-

- 12 LFO units available, 6 are per voice and 6 are global for the whole scene. -

-

DAHDSR envelope generators on every LFO.

-

- LFO shapes consist of 7 deformable LFO waveforms, step sequencer, a fully-fledged multi-segment - envelope generator (MSEG) with various curves and up to 128 nodes, and last but not the least - - a formula modulator which utilizes Lua scripting language to provide completely custom modulator output. -

-

Voice LFOs allow envelope retriggering in step sequencer mode.

-

- Extremely fast and flexible modulation routing. Almost every continuous parameter can be modulated! -

-
-
-
diff --git a/_includes/osc-specs.html b/_includes/osc-specs.html deleted file mode 100644 index eb02056bbb..0000000000 --- a/_includes/osc-specs.html +++ /dev/null @@ -1,42 +0,0 @@ -
-
-
-
-

Oscillators

-

3 oscillators per scene, with 12 versatile oscillator algorithms: - Classic, Modern, Wavetable, Window, Sine, FM2, FM3, String, Twist, Alias, S&H Noise and Audio Input. -

-

- Classic oscillator is a morphable pulse/saw/dual saw oscillator with a sub-oscillator and hard sync. -

-

- Modern oscillator is a mixable saw/pulse/triangle oscillator with an optional sub-oscillator mode for - triangle (which can also change to sine or square) and hard sync. -

-

- FM2/FM3 oscillators consist of a carrier and 2 or 3 modulators and various options. -

-

- String oscillator uses two filtered waveguides to emulate plucked or bowed string sounds. -

-

- Twist oscillator is based on a very famous Eurorack macro oscillator, and it offers a myriad of - synthesis options in a very simple and quick way. -

-

- Most algorithms (except FM2, FM3, Twist and Audio Input) offer up to 16-voice unison at the oscillator - level. -

-

- Oscillator FM in 3 different configurations and ring modulation between oscillators 1-2 and 2-3. -

-

- Most oscillator algorithms (except FM2, FM3, Sine and Alias) are strictly band-limited, yet still cover - the entire audible spectrum, delivering a clear, punchy and clean sound. -

-

- Noise generator with variable spectrum (available directly in the oscillator mixer). -

-
-
-
diff --git a/_includes/osc.html b/_includes/osc.html deleted file mode 100644 index fc433d903c..0000000000 --- a/_includes/osc.html +++ /dev/null @@ -1,62 +0,0 @@ -
-
- -
- - -
- -
- - -
- -
- - -
-
- -
-

One Synth Challenge,
❤️❤️❤️
Thank YOU!

- -

- We think it's pretty cool that you picked Surge for the One Synth Challenge. And then did it again a few more times! -

- -

- Surge was in the spotlight of OSC #122, #138 and most recently, #159. - A talented group of musicians created all these tracks using Surge as the only sound generating device. - Or - in some exceptional cases - only Surge Effects plugin was used, much to our awe and amazement! -

- -

- Do give these tracks a listen, as we think they are a brilliant showcase of flexibility and amazing range of sounds that Surge offers! -

- -

- SoundCloud Cookie Policy -

-
-
diff --git a/_includes/sounds.html b/_includes/sounds.html deleted file mode 100644 index ec841ca1eb..0000000000 --- a/_includes/sounds.html +++ /dev/null @@ -1,15 +0,0 @@ -
-
-
Sounds
-
- -
-
-
diff --git a/_includes/system-requirements.html b/_includes/system-requirements.html deleted file mode 100644 index 5c0ecd840e..0000000000 --- a/_includes/system-requirements.html +++ /dev/null @@ -1,87 +0,0 @@ -
-
-
-
-

System
Requirements

- -

Windows

-
    -
  • - Minimum: Windows 7 and Intel or AMD processor featuring SSE2 instructions -
  • -
  • - Recommended: 64-bit Windows 7 or newer, 3 GHz quad-core processor featuring SSE2 instructions or better -
  • -
  • Minimum of 4 GB of RAM
  • -
  • VST3 or CLAP compatible host application
  • -
  • - x64-compatible CPU, OS and host is required to use the 64-bit version -
  • -
-
- -
-

macOS

-
    -
  • - Surge XT is an Intel/Apple Silicon universal binary. Intel Mac requires macOS 10.11 or later, Apple - Silicon Mac will run Surge XT with any Apple Silicon version of macOS -
  • -
  • Minimum of 4 GB of RAM
  • -
  • VST3, AU or CLAP compatible host application
  • -
-
- -
-

Linux

-
    -
  • PC or ARM system running a Linux distribution
  • -
  • - x64-compatible CPU, OS and host is required to use the 64-bit version; for ARM processors you - can build Surge XT for ARM on Raspberry Pi and similar (tested with RPi4/arm64) -
  • -
  • Minimum of 4 GB of RAM
  • -
  • VST3, CLAP or LV2 compatible host application
  • -
-
-
-
- -
-
-

Download
Surge XT

- -

Release Version {% include stable_xt_version %}

- - - -

Nightly Builds

- - - - - -
( Updated on {% include latest_build_time %})
-
-
-
diff --git a/_includes/testers.html b/_includes/testers.html deleted file mode 100644 index f29cc9de40..0000000000 --- a/_includes/testers.html +++ /dev/null @@ -1,17 +0,0 @@ -
-
-
-
-

Testers

-

- Know any testers? Umm, asking for a friend.

Testing is a way that everyone can help - contribute. All you would need to do is install a copy of Surge XT and use it in your own workflow.

- There are so many combinations of operating systems and DAWs that it is really difficult to make sure - everything gets tested under all contexts.

If you would like to get involved, jump in over here:
-

- View Surge XT Issue Tracker -
-
-
diff --git a/_includes/thanks.html b/_includes/thanks.html deleted file mode 100644 index df4ff5b58b..0000000000 --- a/_includes/thanks.html +++ /dev/null @@ -1,16 +0,0 @@ -
-
-
- Surge is back, XTended and open source! -
-
- Thanks to the generosity of - @Kurasu (owner of Vember Audio), - Surge has been open sourced and lives on GitHub. This page you're reading right now. Yup! This one right - here. It's a part of the surge-synthesizer GitHub project. -
-
-
diff --git a/_includes/toc.html b/_includes/toc.html deleted file mode 100644 index 3cff42f116..0000000000 --- a/_includes/toc.html +++ /dev/null @@ -1,182 +0,0 @@ -{% capture tocWorkspace %} - {% comment %} - Copyright (c) 2017 Vladimir "allejo" Jimenez - - 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. - {% endcomment %} - {% comment %} - Version 1.2.0 - https://github.com/allejo/jekyll-toc - - "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe - - Usage: - {% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %} - - Parameters: - * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll - - Optional Parameters: - * sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC - * class (string) : '' - a CSS class assigned to the TOC - * id (string) : '' - an ID to assigned to the TOC - * h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored - * h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored - * ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list - * item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level - * submenu_class (string) : '' - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level - * base_url (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content - * anchor_class (string) : '' - add custom class(es) for each anchor element - * skip_no_ids (bool) : false - skip headers that do not have an `id` attribute - - Output: - An ordered or unordered list representing the table of contents of a markdown block. This snippet will only - generate the table of contents and will NOT output the markdown given to it - {% endcomment %} - - {% capture newline %} - {% endcapture %} - {% assign newline = newline | rstrip %} - - {% capture deprecation_warnings %}{% endcapture %} - - {% if include.baseurl %} - {% capture deprecation_warnings %}{{ deprecation_warnings }}{{ newline }}{% endcapture %} - {% endif %} - - {% if include.skipNoIDs %} - {% capture deprecation_warnings %}{{ deprecation_warnings }}{{ newline }}{% endcapture %} - {% endif %} - - {% capture jekyll_toc %}{% endcapture %} - {% assign orderedList = include.ordered | default: false %} - {% assign baseURL = include.base_url | default: include.baseurl | default: '' %} - {% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %} - {% assign minHeader = include.h_min | default: 1 %} - {% assign maxHeader = include.h_max | default: 6 %} - {% assign nodes = include.html | strip | split: ' maxHeader %} - {% continue %} - {% endif %} - - {% assign _workspace = node | split: '' | first }}>{% endcapture %} - {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} - - {% if include.item_class and include.item_class != blank %} - {% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %} - {% endif %} - - {% if include.submenu_class and include.submenu_class != blank %} - {% assign subMenuLevel = currLevel | minus: 1 %} - {% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %} - {% endif %} - - {% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %} - - {% if htmlID %} - {% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %} - - {% if include.anchor_class %} - {% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %} - {% endif %} - - {% capture listItem %}{{ anchorBody }}{% endcapture %} - {% elsif skipNoIDs == true %} - {% continue %} - {% else %} - {% capture listItem %}{{ anchorBody }}{% endcapture %} - {% endif %} - - {% if currLevel > lastLevel %} - {% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %} - {% elsif currLevel < lastLevel %} - {% assign repeatCount = lastLevel | minus: currLevel %} - - {% for i in (1..repeatCount) %} - {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %} - {% endfor %} - - {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %} - {% else %} - {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %} - {% endif %} - - {% capture jekyll_toc %}{{ jekyll_toc }}{{ listItem }}{% endcapture %} - - {% assign lastLevel = currLevel %} - {% assign firstHeader = false %} - {% endfor %} - - {% assign repeatCount = minHeader | minus: 1 %} - {% assign repeatCount = lastLevel | minus: repeatCount %} - {% for i in (1..repeatCount) %} - {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %} - {% endfor %} - - {% if jekyll_toc != '' %} - {% assign rootAttributes = '' %} - {% if include.class and include.class != blank %} - {% capture rootAttributes %} class="{{ include.class | split: '.' | join: ' ' }}"{% endcapture %} - {% endif %} - - {% if include.id and include.id != blank %} - {% capture rootAttributes %}{{ rootAttributes }} id="{{ include.id }}"{% endcapture %} - {% endif %} - - {% if rootAttributes %} - {% assign nodes = jekyll_toc | split: '>' %} - {% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %} - {% endif %} - {% endif %} -{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc -}} diff --git a/_includes/video.html b/_includes/video.html deleted file mode 100644 index 0d34d74e70..0000000000 --- a/_includes/video.html +++ /dev/null @@ -1,24 +0,0 @@ -
-
-
-
- -
-

Roger Linn demonstrates Surge on his Linnstrument.

-
-
-
-

Surge XT Videos

-

We have a collection of great demos on our YouTube channel.

- Explore the videos! -
-
diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 4176004cfd..0000000000 --- a/_layouts/default.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - {% include head.html %} - - - - {% include header.html %} - -
- {{ content }} -
- - {% include footer.html %} - - - - diff --git a/_layouts/home.html b/_layouts/home.html deleted file mode 100644 index 3919f53738..0000000000 --- a/_layouts/home.html +++ /dev/null @@ -1,27 +0,0 @@ - - - -{% include head.html %} - - - - {% include header.html %} - {% include hero.html %} - {% include video.html %} - {% include osc.html %} - {% include digital.html %} - {% include thanks.html %} - {% include general-specs.html %} - {% include osc-specs.html %} - {% include filter-block.html %} - {% include modulation.html %} - {% include effects.html %} - {% include contributors.html %} - {% include developers.html %} - {% include designers.html %} - {% include testers.html%} - {% include content-creators.html %} - {% include community.html %} - {% include system-requirements.html %} - {% include footer.html %} - diff --git a/_layouts/manual.html b/_layouts/manual.html deleted file mode 100644 index 7227e8a032..0000000000 --- a/_layouts/manual.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: default ---- - -
-
- {% include toc.html html=content item_class='%level%' h_min=1 h_max=3 %} -
- -
-
-
-

{{ page.title }}

-
-
-
-
- {{ content }} -
-
-
-
diff --git a/_layouts/page.html b/_layouts/page.html deleted file mode 100644 index a4882103bc..0000000000 --- a/_layouts/page.html +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: default ---- -
-
-

{{ page.title }}

-
-
-
-
- {{ content }} -
-
diff --git a/_sass/_components.scss b/_sass/_components.scss deleted file mode 100644 index bac726b534..0000000000 --- a/_sass/_components.scss +++ /dev/null @@ -1,137 +0,0 @@ -// Styling markdown output - -// Code formatting -pre { - border-left: $spacer-1 solid $color-border; - margin: $spacer-3 0; - padding-left: 16px; - width: calc(9 / 12 * 100%); // matches col-9 - overflow-x: auto; -} - -code { - color: $color-code; - font-size: $body-font-size; - padding: 1px 0px; -} - -.prose { - a { - text-decoration: underline dotted; - - &:hover { - text-decoration: underline; - } - } - - p, - ol, - ul { - font-size: $prose-font-size; - margin-bottom: 1em; - width: 100%; - - @media (min-width: $breakpoint-lg) { - width: calc(10 / 12 * 100%); // matches col-10 - } - } - - ul, - ol { - padding-left: 40px; - } - - li { - margin-bottom: 0.5em; - - ul li, - ol li { - margin-bottom: 0; - } - } - - img { - max-width: 100%; - - @media (min-width: $breakpoint-lg) { - max-width: calc( - 12 / 10 * 100% - ); // make image fill width of container on desktop - } - } - - blockquote { - line-height: 1.375; - padding-left: 20px; - margin: 40px 0 40px -16px; - border-left: $spacer-1 solid $color-border; - font-style: italic; - - p { - font-size: 24px; - } - - @media (min-width: $breakpoint-lg) { - padding-left: $spacer-3; - margin: $spacer-4 0 $spacer-4 -40px; - max-width: calc(11 / 10 * 100%); - - p { - font-size: 32px; - } - } - } - - hr { - color: $color-body-text; - border-style: solid; - border-width: thin; - margin-top: 0.5em; - margin-bottom: 0.5em; - } - - dt { - font-weight: bold; - font-style: italic; - line-height: 1.25; - } - - dd { - font-style: italic; - margin-bottom: 0.5em; - } - - // Markdown tables - table { - border-collapse: collapse; - display: block; - width: 100%; - margin-bottom: 1.5em; - overflow: auto; - // For Firefox to horizontally scroll wider tables. - word-break: normal; - word-break: keep-all; - - th { - font-weight: bold; - text-align: left; - } - - th, - td { - padding: $spacer-2 $spacer-3 $spacer-2 2px; - border-top: 1px solid $color-body-text; - border-bottom: 1px solid $color-body-text; - } - - tr { - background-color: #fff; - border-top: 1px solid $color-body-text; - } - - tr th { - border-top: 2px solid $color-body-text; - border-bottom: 2px solid $color-body-text; - } - } -} diff --git a/_sass/_surge.scss b/_sass/_surge.scss deleted file mode 100644 index 051bf7fd89..0000000000 --- a/_sass/_surge.scss +++ /dev/null @@ -1,2449 +0,0 @@ -@font-face { - font-family: "LatoWeb"; - src: url("fonts/Lato-Regular.woff") format("woff"); - font-style: normal; - font-weight: normal; - text-rendering: optimizeLegibility; -} -@font-face { - font-family: "LatoWeb"; - src: url("fonts/Lato-Italic.woff") format("woff"); - font-style: italic; - font-weight: normal; - text-rendering: optimizeLegibility; -} - -*, -*:before, -*:after { - box-sizing: border-box; -} - -a { - color: inherit; - text-decoration: underline; -} -html { - font-size: 16px; - scroll-behavior: smooth; - scroll-padding-top: 4.375rem; -} - -body { - background-color: #fff; - font-family: "LatoWeb", sans-serif; - font-weight: 400; - // line-height: 1.45; - color: #333; - font-size: 16px; - line-height: 24px; - width: 100%; -} - -p { - margin-bottom: 1rem; -} - -h1, -h2, -h3, -h4, -h5 { - margin: 2.75rem 0 1rem; - font-family: "LatoWeb", sans-serif; - line-height: 1.15; -} - -// Type scale -$h0-mobile: 30px; -$h0-desktop: 90px; - -$h1-size: 11.089rem !default; -$h2-size: 6.854rem !default; -$h3-size: 4.236rem !default; -$h4-size: 2.618rem !default; -$h5-size: 1.618rem !default; -$h6-size: 0.618rem !default; - -/* Type utilities */ -.h0 { - font-size: $h0-mobile; - line-height: 1.0125; - margin-top: 0.25em; - word-wrap: break-word; - - @media (min-width: $breakpoint-lg) { - font-size: $h0-desktop; - } -} - -sup { - vertical-align: top; - font-size: 0.6em; -} - -.header-background { - // background-image: linear-gradient(-180deg, #000000 0%, #232323 100%); - // overflow: hidden; - // height: 100vh;} - padding: $spacer-1; - padding-left: 2rem; - padding-right: 2rem; - // overflow: hidden; - background-color: black; - // float: right; - // width: 100vw; - // position: relative; - display: flex; - justify-content: flex-end; -} - -// Hero Flexbox -.split-container { - display: flex; - width: 100%; - height: 100%; - justify-content: center; - /* center items vertically, in this case */ - align-items: center; - /* center items horizontally, in this case */ - // padding: 32px; - flex-wrap: wrap; - flex-direction: row; - - .left-container { - flex: 0 0 50%; - height: 100%; - width: 100%; - justify-content: center; - /* center items vertically, in this case */ - align-items: center; - /* center items horizontally, in this case */ - } - - .right-container { - position: relative; - flex: 0 0 50%; - height: 600px; - width: auto; - justify-content: center; - /* center items vertically, in this case */ - align-items: center; - - /* center items horizontally, in this case */ - /* &.wrapper{ - width: 100%; - height: 100%; - position: relative; - }*/ - & ::before { - overflow: hidden; - } - } -} - -.hero-image { - position: absolute; - width: 952px; - height: 600px; - background-image: url(../assets/images/Hero.png); - background-position: left center; - background-repeat: no-repeat; - background-size: contain; - // height: 100%; - box-sizing: border-box; - //max-width: 100%; - //max-height: 100%; - //width: 100%; -} - -.download-button { - background-image: linear-gradient(-180deg, #005cb6, #00488f); - border-radius: 8px; - height: 48px; - text-align: center; - color: white; - font-weight: 400; - letter-spacing: 1px; - cursor: pointer; - // background: #005CB6; - border: none; - font-size: 0.85rem; - text-decoration: none; -} - -.ghost-button-thick-border { - display: inline-block; - // width: 304px; - font-weight: bold; - padding: 1rem; - color: #fff; - border: 4px solid #fff; - border-radius: 0.5rem; - text-align: center; - outline: none; - text-decoration: none; - background-color: clear; - transition: background-color 0.2s ease-out, color 0.2s ease-out; -} - -.ghost-button-thick-border:hover, -.ghost-button-thick-border:active { - background-color: #ffffff; - color: #000; - text-decoration: none; - transition: background-color 0.3s ease-in, color 0.3s ease-in; -} - -.ghost-button-thick-border-black-text { - display: inline-block; - // width: 304px; - font-weight: bold; - padding: 1rem; - color: #000; - border: 4px solid #000; - border-radius: 0.5rem; - text-align: center; - outline: none; - text-decoration: none; - transition: background-color 0.2s ease-out, color 0.2s ease-out; -} - -.ghost-button-thick-border-black-text:hover, -.ghost-button-thick-border-black-text:active { - background-color: #000; - color: #ff8f02; - text-decoration: none; - transition: background-color 0.3s ease-in, color 0.3s ease-in; -} - -.ghost-button-thick-border-blue { - display: inline-block; - // width: 304px; - font-weight: bold; - padding: 1rem; - color: #005db6; - border: 4px solid #005db6; - border-radius: 0.5rem; - text-align: center; - outline: none; - text-decoration: none; - transition: background-color 0.2s ease-out, color 0.2s ease-out; -} - -.ghost-button-thick-border-blue:hover, -.ghost-button-thick-border-blue:active { - background-color: #005db6; - color: #ffffff; - text-decoration: none; - transition: background-color 0.3s ease-in, color 0.3s ease-in; -} - -.hollow-button { - border-color: white; - background-color: white; - border-width: 4px; - border-radius: 8px; - width: 304px; - height: 48px; - text-align: center; - color: white; - font-weight: 900; - letter-spacing: 1px; - cursor: pointer; - text-decoration: none; - // border-color: clear; -} - -.dark-text { - color: #005db6; -} - -.stack-container { - display: flex; - flex-direction: column; - flex-wrap: wrap; - justify-content: center; - align-items: flex-start; - align-content: center; - // display: none; - // Remove Display none - - .stack-item { - flex: 0 1 100%; - display: flex; - flex-wrap: wrap; - align-items: center; - } - - .stack-item-margin-negative { - flex: 0 1 100%; - display: flex; - flex-wrap: wrap; - align-items: center; - margin: -4px; - padding: 0px; - } -} - -.section { - height: 600px; - background: #005cb6; -} - -.section-image { - background-image: url(../assets/images/Mockup.png); - height: 475px; - max-height: 475px; - width: auto; -} - -.blue { - color: blue; - background-color: blue; -} - -.red { - color: red; - background-color: red; -} - -@media (max-width: $breakpoint-lg) { -} - -.pt-0 { - padding-top: 0; -} - -.pt-1 { - padding-top: $spacer-1; -} - -.pt-2 { - padding-top: $spacer-2; -} - -.pt-3 { - padding-top: $spacer-3; -} - -.pt-4 { - padding-top: $spacer-4; -} - -.pb-0 { - padding-bottom: 0; -} - -.pb-1 { - padding-bottom: $spacer-1; -} - -.pb-2 { - padding-bottom: $spacer-2; -} - -.pb-3 { - padding-bottom: $spacer-3; -} - -.pb-4 { - padding-bottom: $spacer-4; -} - -.pl-0 { - padding-left: 0; -} - -.pl-1 { - padding-left: $spacer-1; -} - -.pl-2 { - padding-left: $spacer-2; -} - -.pl-3 { - padding-left: $spacer-3; -} - -.pl-4 { - padding-left: $spacer-4; -} - -.pr-0 { - padding-right: 0; -} - -.pr-1 { - padding-right: $spacer-1; -} - -.pr-2 { - padding-right: $spacer-2; -} - -.pr-3 { - padding-right: $spacer-3; -} - -.pr-4 { - padding-right: $spacer-4; -} - -$spacer-5: calc($spacer / 2) !default; //4 px - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 1em; - margin-bottom: 0.25em; -} - -.fixed-content { - width: 960px; - flex-direction: row; - align-content: stretch; - justify-content: center; -} - -.logo { - width: 135px; - height: 39px; - background-image: url(../assets/images/SurgeXTLogo.svg); -} - -.sounds-section { - width: 100%; - padding: 4rem; - text-align: center; - margin-left: auto; - margin-right: auto; -} - -.soundcloud-palyer { - height: 600px; - margin-left: auto; - margin-right: auto; - background-color: darkgrey; -} - -.youtube-player { - height: 100%; - width: 100%; - max-height: 315px; - max-width: 560px; - margin-left: auto; - margin-right: auto; -} - -.requirements-heading { - text-align: left; -} - -.downloads-heading { - text-align: left; -} - -.download-links { - padding-top: 1rem; -} - -.nightly-heading { - padding-top: 1rem; -} - -.updated-on { - color: white; - padding-top: 1rem; -} - -//Paste new stuff below here - -.white-text { - color: #ffffff; -} - -.black-text { - color: #000; -} - -.specs-section { - display: flex; - min-height: 600px; - flex-direction: row; - flex-wrap: wrap; - align-content: stretch; - background-color: #005cb6; -} - -.specs-section.filters { - background-color: #ff8f02; -} - -.specs-section.effects-section { - background-color: #fff; -} - -.right { - // padding: 4rem; - flex: 0 0 50%; - float: right; -} - -.right.filterblock { - display: flex; - justify-content: center; - align-items: center; - padding: 4rem; -} - -.right.modulation { - display: flex; - justify-content: center; - align-items: center; - padding: 4rem; -} - -.right.effects { - display: flex; - justify-content: center; - align-items: center; - padding: 4rem; -} - -.right.general { - display: flex; - justify-content: center; - align-items: center; - padding: 4rem; -} - -.right.oscillators { - display: flex; - justify-content: center; - align-items: center; - padding: 2rem; -} - -.left-1 { - margin: 0rem; - padding: 4rem; - flex: 0 0 50%; - background-image: url("../assets/images/Patches.jpg"); - background-position: 100% 0px; - background-size: cover; - background-repeat: no-repeat; -} - -.left-1.opposite { - background-image: url("../assets/images/Oscillator.jpg"); - background-position: 0px 50%; - background-size: cover; - background-repeat: no-repeat; -} - -.left-1.filterblock { - background-image: url("../assets/images/Filter.jpg"); - background-position: 100% 50%; - background-size: cover; - background-repeat: no-repeat; -} - -.left-1.modulation { - background-image: url("../assets/images/Modulation.jpg"); - background-position: 0px 0px; - background-size: cover; - background-repeat: no-repeat; -} - -.left-1.effects { - background-image: url("../assets/images/FX.jpg"); - background-position: 100% 0px; - background-size: cover; - background-repeat: no-repeat; -} - -.heading { - font-family: LatoWeb, sans-serif; - color: #fff; - font-weight: 400; - text-align: center; - text-transform: uppercase; -} - -.spec-heading { - background-color: transparent; - font-family: LatoWeb, sans-serif; - color: #fff; - font-weight: 400; - text-align: left; - text-transform: uppercase; - margin-top: 1rem; -} - -.spec-heading.dark-text { - color: #005db6; -} - -.spec-heading.black-text { - color: #000; -} - -.specs-section-opposite { - display: flex; - min-height: 600px; - flex-direction: row-reverse; - flex-wrap: wrap; - background-color: #fff; -} - -.specs-section-opposite.dark-bg { - background-color: #005db6; -} - -.text-wrapper { - width: 23rem; -} - -.text-notransform { - text-transform: none !important; -} - -.specs-text-wrapper { - color: #fff; - text-align: left; -} - -.specs-text-wrapper.dark-text { - color: #005db6; -} - -.specs-text-wrapper.black-text { - color: #000; -} - -.section-requirements { - display: flex; - min-height: 600px; - background-color: #005db6; - padding-top: 4rem; -} - -.div-block { - padding: 4rem; - flex: 1; -} - -.heading-2 { - color: #fff; - text-align: center; -} - -.div-block-2 { - display: flex; - flex-direction: column; - justify-content: center; - align-items: flex-end; -} - -.div-block-3 { - display: flex; - width: 23rem; - flex-direction: column; - padding-bottom: 4rem; -} - -.heading-3 { - color: #fff; -} - -.button { - display: flex; - width: 100%; - height: 3rem; - margin-top: 0.5rem; - margin-bottom: 0.5rem; - justify-content: center; - align-items: center; - border-radius: 0.5rem; - background-image: linear-gradient(180deg, #004c94, #002f5c); - box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.25); - text-align: center; - color: white; - text-decoration: none; -} - -.button:hover { - text-decoration: none; -} - -.heading-4 { - text-transform: uppercase; -} - -.heading-4.caution-text { - color: #fff; - font-size: 15px; - letter-spacing: 1px; - line-height: 1.5rem; - padding-bottom: 1rem; -} - -.link { - margin-top: 0.5rem; - margin-bottom: 0.5rem; - color: #fff; -} - -.hero-section { - display: flex; - // min-height: 53rem; - background-image: linear-gradient(180deg, #000, #232323); - width: 100%; - padding-top: 2rem; - padding-bottom: 2rem; - // padding: 4rem; - // height: calc(100vh - 60px); -} - -.hero-right { - // margin: 2rem; - margin: 0.5rem; - flex: 50%; - background-image: url("../assets/images/Hero.png"); - background-position: 0px 50%; - background-size: cover; - background-repeat: no-repeat; -} - -.hero-left { - display: flex; - justify-content: center; - flex: 50%; - align-items: center; - flex-direction: column; - padding: 0 2rem; -} - -.hero-left-text-wrapper { - display: flex; - padding-right: 4rem; - padding-left: 4rem; - justify-content: center; - align-items: flex-start; - color: #fff; - // margin-top: 4rem; - max-width: 37rem; - margin-left: auto; - margin-right: auto; -} - -.hero-heading { - margin-top: 1rem; - margin-bottom: 0px; - font-size: 90px; - line-height: 82px; - font-weight: 400; - letter-spacing: 3px; -} - -.heading-5-copy { - margin-top: 1rem; - margin-bottom: 0px; - color: #fff; - // font-size: 24px; - // line-height: 24px; - font-weight: 400; -} - -.image { - margin-top: 1rem; -} - -.logo-image { - max-width: 35rem; - margin-bottom: 1.2rem; - margin-top: 1rem; - width: 95%; -} - -.download-list { - display: flex; - flex-direction: row; - margin-top: 1rem; - margin-bottom: 1rem; - - .download-platform { - display: flex; - flex-direction: column; - width: 100%; - - + .download-platform { - border-left: 0.1rem solid #fff; - margin-left: 1rem; - padding-left: 1rem; - } - - h2 { - font-size: 1.25rem; - } - - a { - margin-top: 0.2rem; - margin-bottom: 0.75rem; - // line-height: 1.5rem; - // white-space: nowrap; - } - } -} - -.download-list-nightlies { - width: 100%; - text-align: left; - - > * { - margin: 0; - } -} - -.hero-button { - display: inline-block; - // line-height: 2.75rem; - margin-top: 1.5rem; - justify-content: center; - align-items: center; - border-radius: 0.25rem; - // background-image: linear-gradient(180deg, #ff8a00, #b54c00); - // background-color: #ff9000; - font-size: 18px; - font-weight: 700; - letter-spacing: 0.75px; - cursor: pointer; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - text-align: center; - text-decoration: none; - color: #ff9000; - border-color: #ff9000; - border-width: 0.25rem; - border-style: solid; - // display: none; - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - &:hover { - color: #000000; - border-color: #ffffff; - border-width: 0.25rem; - border-style: solid; - background-color: #fff; - cursor: pointer; - text-decoration: none; - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - transform: scale(1.1); - } -} - -.hero-link { - margin-top: 1.5rem; - color: #fff; - font-size: 16px; - line-height: 24px; - letter-spacing: 1px; - text-decoration: underline; - white-space: pre-wrap; -} - -.digital-section { - display: flex; - min-height: 550px; - background-color: #005db6; - flex-direction: row-reverse; -} - -.digital-right { - display: flex; - justify-content: flex-end; - align-items: center; - flex: 1; -} - -.digital-left { - flex: 1; - justify-content: flex-start; - background-image: url("../assets/images/Mockup.png"); - background-position: left center; - background-size: auto 80%; - background-repeat: no-repeat; -} - -.heading-6 { - color: #fff; - font-size: 70px; - line-height: 70px; - font-weight: 400; - text-align: left; - margin-left: -5px; -} - -.paragraph { - margin-top: 1rem; - color: #fff; -} - -.paragraph-black { - margin-top: 1rem; - color: #000; -} - -.digital-text-wrapper { - width: 24rem; -} - -ul { - list-style-position: outside; - padding: 18px; - line-height: 1.75rem; -} - -.not-active { - pointer-events: none; - cursor: none; - text-decoration: none; - color: black; -} - -.border-top-thin.clearfix.mt-2.mt-lg-4 { - margin-top: 0; -} - -.nightly-text { - padding-top: 1rem; -} - -#downloads { - padding-bottom: 0px; -} - -.sounds-wrapper { - background-image: linear-gradient(-35deg, #005cb6 0%, #ff8a00 100%); - text-align: center; -} - -// MANUAL TABLE OF CONTENTS - -thead { - display: none; -} -.wrapper { - display: flex; -} -.toggle { - display: none; -} -.toc { - top: 60px; - left: 0; - position: sticky; - background-color: #313131; - color: #dedede; - height: calc(100vh - 60px); - overflow-y: scroll; - overflow-x: auto; - flex-shrink: 0; - width: fit-content; - margin: 0; - padding: 10px 10px 0 10px; -} -.toc ul, -.toc li { - list-style-type: none; - list-style-position: inside; - padding: 0; - margin: 0; - word-wrap: break-word; - max-width: 30ch; -} -.toc a { - text-decoration: none; -} -.toc a:hover { - text-decoration: underline solid; -} -[class="1"] { - font-weight: bold; - list-style-type: none !important; - padding: 0 0 10px 0 !important; -} -[class="2"] { - font-weight: initial; - list-style-type: disc !important; - padding: 0 0 0 10px !important; -} -[class="3"] { - font-weight: initial; - list-style-type: circle !important; - padding: 0 0 0 25px !important; -} -.content { - width: 100%; -} -.content img { - max-width: 100%; -} - -@media screen and (max-width: 800px) { - .toc { - display: none; - position: fixed; - right: 0; - left: unset; - border: 5px solid #00000000; - border-radius: 5px; - padding: 5px 5px 0px 5px; - } - .toggle { - display: initial; - background-color: #ff9000; - border: 0; - cursor: pointer; - user-select: none; - } -} - -// SKIN LIBRARY - -.skin-container { - max-width: 50em; - color: #ffffff; -} -.skin-zoom { - background-color: #000000; - width: 100%; - padding: 1rem; - text-align: right; - border-width: 3px; - border-image: linear-gradient(to top, #000000, #ff9000) 1; - border-style: solid; - margin-top: 3rem; -} -.skin-image img { - display: block; - width: 100%; - height: auto; - image-rendering: -webkit-optimize-contrast; - background-color: #000000; - padding: 0 1rem; -} -.skin-text { - background-color: #000000; - padding: 1rem; - border-width: 3px; - border-image: linear-gradient(#000000, #ff9000) 1; - border-style: solid; -} -.skin-author { - line-height: 300%; - font-style: oblique; - font-size: 1.25rem; -} -.skin-container a { - color: #ff9000; - text-decoration: none; -} -.skin-container a:hover { - color: #ffffff; - text-decoration: none; -} -.skin-zoom a { - font-size: 1.25rem; - padding-bottom: 0.25rem; -} -a.skin-title { - font-size: 2rem; - border-bottom: 3px solid #ff9000; -} -a:hover.skin-title { - border-bottom: 3px solid #ffffff; -} - -// Animation - -.grow { - transition: all 0.2s ease-in-out; -} - -.grow:hover { - transform: scale(1.05); -} - -//CONTRIBUTER SECTION ADDITIONS - -.contributer-section { - display: flex; - flex-direction: row-reverse; - justify-content: center; - flex-wrap: wrap; - align-items: stretch; - background-color: #103364; -} - -.developer-text { - padding: 4rem; - flex-direction: row; - justify-content: center; - align-items: center; - flex: 50%; - display: flex; -} - -.developer-heading { - text-align: left; -} - -.developer-hero { - padding: 5rem; - flex: 50%; - background-image: url("../assets/images/Dev Workflow.jpg"); - background-position: 0px 50%; - background-size: cover; - background-repeat: no-repeat; - flex-grow: 1; - flex-shrink: 1; -} - -.text-container { - width: 450px; - text-align: left; -} - -.heading { - position: relative; - left: -2px; -} - -.button { - display: flex; - margin-top: 2rem; - justify-content: center; - align-items: center; - border: 4px solid #0096ff; - border-radius: 8px; - background-color: transparent; - color: #3798eb; -} - -.button-2 { - display: flex; - justify-content: center; - align-items: center; - border: 4px solid #ffa600; - border-radius: 8px; - background-color: transparent; - color: #ff9c00; -} - -.developer-section-copy { - display: flex; - flex-direction: row; - flex-wrap: wrap; - align-items: stretch; - background-color: #005db6; -} - -.tester-section { - display: flex; - flex-direction: row; - flex-wrap: wrap; - align-items: stretch; - background-color: #fff; - background-color: #005db6; -} - -.thanks-section { - background-color: white; - display: flex; -} - -.content-creator-section { - display: flex; - flex-direction: row-reverse; - flex-wrap: wrap; - align-items: stretch; - // background-color: #fff; - background-color: #ff8f02; -} - -.content-creators-hero { - padding: 5rem; - flex: 50%; - background-image: url("../assets/images/DAW Project.jpg"); - background-position: 0px 0px; - background-size: cover; - background-repeat: no-repeat; -} - -.tester-hero { - padding: 5rem; - flex: 50%; - background-image: url("../assets/images/Modlist.jpg"); - background-position: 50% 0px; - background-size: cover; - background-repeat: no-repeat; -} - -.contributer-text { - display: flex; - padding: 4rem; - flex-direction: row; - justify-content: center; - align-items: center; - flex: 50%; -} - -.tester-text { - display: flex; - padding: 4rem; - flex-direction: row; - justify-content: center; - align-items: center; - flex: 50%; -} - -.paragraph { - padding-top: 1rem; -} - -.content-creator-text { - display: flex; - padding: 4rem; - justify-content: center; - align-items: center; - flex: 50%; -} - -.community-section { - display: flex; - padding: 4rem; - flex-direction: row-reverse; - justify-content: center; - flex-wrap: wrap; - align-items: stretch; - background-color: #fff; -} - -.designer-section { - display: flex; - flex-direction: row-reverse; - flex-wrap: wrap; - background-color: #ff8f02; -} - -.designer-hero { - padding: 6rem; - flex-basis: 50%; - background-image: url("../assets/images/Figma Skin Editing.jpg"); - background-position: 0px 0px; - background-size: cover; - background-repeat: no-repeat; - flex-grow: 1; - flex-shrink: 1; -} - -.designer-text { - display: flex; - padding: 4rem; - justify-content: center; - align-items: center; - flex-basis: 50%; - flex-grow: 1; - flex-shrink: 1; -} - -.community-header { - color: #133562; - text-align: left; -} - -.contributor-heading { - text-align: left; - margin-left: -0.25rem; -} - -.oscsection { - display: flex; - margin-right: auto; - margin-left: auto; - padding: 2rem; - flex-wrap: nowrap; - background-image: linear-gradient(320deg, transparent, #202020), - linear-gradient(180deg, #103364, #103364 82%, #103364); - color: #fff; -} - -.osccontainer { - padding: 1rem 2rem 2rem; - background-image: none; - width: 960px; - margin-right: auto; - margin-left: auto; - text-align: left; -} - -.playerside { - flex: 0 70%; -} - -.copyside { - padding: 2rem; - -webkit-align-self: center; - -ms-flex-item-align: center; - -ms-grid-row-align: center; - align-self: center; - -webkit-box-flex: 0; - -webkit-flex: 0 30%; - -ms-flex: 0 30%; - flex: 0 30%; -} - -.oscheading { - margin-top: auto; - margin-bottom: auto; - padding-bottom: 1rem; - color: #ff9000; - font-weight: 400; -} - -.oscheading-2 { - width: 37rem; - margin-top: 0px; - margin-bottom: 0px; - padding-bottom: 2rem; - line-height: 1.5; - font-weight: 400; -} - -pre { - background-color: #fff; - width: 100%; - margin: 0rem auto; - padding: 0.5rem; - border-radius: 0.25rem; - box-shadow: 0.1rem 0.1rem 0.5rem rgba(0, 0, 0, 0.45); - counter-reset: line; - border-left: 0.5rem solid #ff8a00; - - span { - line-height: 1.5rem; - color: #043367; - - &:before { - counter-increment: line; - content: counter(line); - padding: 0 0.5rem; - margin-right: 0.5rem; - color: #043367; - } - } -} - -//Videos section - -.videosheading { - margin-top: auto; - margin-bottom: auto; - padding-bottom: 1rem; - color: #fff; - text-align: left; - font-weight: 400; -} - -.videoplayerside { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - padding-top: 2rem; - padding-bottom: 2rem; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: end; - -webkit-align-items: flex-end; - -ms-flex-align: end; - align-items: flex-end; - -webkit-box-flex: 0; - -webkit-flex: 0 50%; - -ms-flex: 0 50%; - flex: 0 50%; - text-align: right; -} - -.videosection { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - margin-right: auto; - margin-left: auto; - padding: 2rem; - -webkit-flex-wrap: nowrap; - -ms-flex-wrap: nowrap; - flex-wrap: nowrap; - background-image: linear-gradient(336deg, #005cb6, #ff8a00); - color: #fff; -} - -.videoslink { - color: #fff; - text-decoration: underline; -} - -.videoheading { - width: 100%; - margin-top: 0px; - margin-bottom: 0px; - padding-bottom: 1rem; - text-align: left; - font-weight: 400; -} - -.videocaptionheading { - text-align: center; -} - -.videocopyside { - padding: 2rem; - -webkit-align-self: center; - -ms-flex-item-align: center; - -ms-grid-row-align: center; - align-self: center; - -webkit-box-flex: 0; - -webkit-flex: 0 50%; - -ms-flex: 0 50%; - flex: 0 50%; -} - -.videohtmlembed { - width: 560px; - height: 315px; -} - -select { - outline: none; - padding: 0 0.55rem; - border-radius: 0.25rem; - color: #ffffff; - padding-right: 1.75rem; - font-family: LatoWeb, sans-serif; - font-weight: 700; - font-size: 1rem; - position: relative; - -moz-appearance: none; - -webkit-appearance: none; - appearance: none; - border: none; - background: #313131 - url("data:image/svg+xml;utf8,") - no-repeat; - background-position: right 0.5rem top 50%; - // margin-right: 1rem; - margin-right: 1rem; -} - -.header-layout { - display: flex; - flex-flow: nowrap; - justify-content: flex-end; - padding: 1rem 0; - align-items: center; - width: 50%; - padding-right: 1rem; -} - -.left-nav { - display: flex; - flex-flow: row wrap; - justify-content: flex-start; - padding: 1rem 1.5rem; - align-items: center; - width: 50%; -} - -.navbar { - display: flex; - flex-flow: row wrap; -} - -.header { - background-color: #ff9000; - color: black; - z-index: 5; - width: 100%; - height: 60px; - position: sticky; - top: 0; - display: flex; - flex-direction: row; - justify-content: space-between; - padding-left: 1rem; - box-shadow: 0px 4px 4px 0px rgba(210, 126, 0, 0.45); - -webkit-box-shadow: 0px 4px 4px 0px rgba(210, 126, 0, 0.45); - -moz-box-shadow: 0px 4px 4px 0px rgba(210, 126, 0, 0.45); -} - -#manualLinks { - margin-right: 1rem; -} - -#markdown-toc { - margin-bottom: 0; - ul { - padding-bottom: 0; - padding-top: 0; - margin-bottom: 0; - line-height: unset; - } - li { - padding-bottom: 0; - margin-bottom: 0; - } -} - -#changelog ul { - list-style-position: inside; - width: 90%; -} -#changelog ul, -#changelog li { - margin: 0; - padding: 0; -} -#changelog ul li { - margin: 0; - padding: 0 0 25px 0; - font-weight: bold; -} -#changelog ul li ul li { - font-weight: normal; - margin: 0; - padding: 0 0 0 25px; -} - -/////////////////// -// Animation CSS -/////////////////// - -.fade-in { - opacity: 1; - animation-name: fade-in; - animation-iteration-count: 1; - animation-timing-function: ease-in-out; - animation-duration: 2s; -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -/* Firefox < 16 */ -@-moz-keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -/* Safari, Chrome and Opera > 12.1 */ -@-webkit-keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -/* Internet Explorer */ -@-ms-keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -.grow { - transition: all 0.2s ease-in-out; - // transform-origin: center; -} -.grow:hover { - transform: scale(1.1); - // transform-origin: 100% -75%; -} - -.scale { - animation: scale-load 1.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation-delay: 500ms; -} - -@keyframes scale-load { - 0% { - transform: scale(0.75); - } - 100% { - transform: scale(1); - } -} - -.slide-top { - -moz-animation: slide-top 0.75s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - -webkit-animation: slide-top 0.75s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - animation: slide-top 0.75s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; - -moz-animation-timing-function: ease-in-out; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; -} - -/** - * ---------------------------------------- - * animation slide-top - * ---------------------------------------- - */ -@-webkit-keyframes slide-top { - 0% { - -moz-transform: translateY(50px); - -webkit-transform: translateY(50px); - transform: translateY(50px); - } - 100% { - -moz-transform: translateY(0); - -webkit-transform: translateY(0); - transform: translateY(0); - } -} -@keyframes slide-top { - 0% { - -moz-transform: translateY(50px); - -webkit-transform: translateY(50px); - transform: translateY(50px); - } - 100% { - -moz-transform: translateY(0); - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -.latest-release { - color: #ffffff; - // font-size: 24px; - // line-height: 24px; - font-weight: 400; -} - -// .move-up { -// transform: translate(0, 1.5rem, 0); -// } - -/* CORE STYLES */ -:root { - --primary-color: #ff9000; - --overlay-color: rgba(24, 39, 51, 0.85); - --menu-speed: 0.25s; -} - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -/* MENU STYLES */ -.menu-wrap { - // position: relative; - // top: 0; - // left: 0; - z-index: 1; - // margin: 0 1rem; - width: 50%; -} - -.menu-wrap .toggler { - position: absolute; - // top: 0; - // left: 0; - z-index: 2; - cursor: pointer; - // width: 100vw; - // height: 50px; - opacity: 0; - height: 100%; - width: 60px; -} - -.menu-wrap .hamburger { - position: absolute; - // top: 0; - // right: 0; - z-index: 1; - // width: 100%; - height: 60px; - // padding: 1rem; - background: var(--primary-color); - display: flex; - align-items: center; - // justify-content: center; -} - -/* Hamburger Line */ -.menu-wrap .hamburger > div { - position: relative; - flex: none; - width: 48px; - height: 4px; - background: #202020; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.4s ease; - margin-right: 0.5rem; -} - -/* Hamburger Lines - Top & Bottom */ -.menu-wrap .hamburger > div::before, -.menu-wrap .hamburger > div::after { - content: ""; - position: absolute; - z-index: 1; - top: -10px; - width: 100%; - height: 4px; - background: inherit; -} - -/* Moves Line Down */ -.menu-wrap .hamburger > div::after { - top: 10px; -} - -// .menu-wrap .toggler:checked + .hamburger { -// width: 60px; -// padding: .5rem; -// } - -/* Toggler Animation */ -.menu-wrap .toggler:checked + .hamburger > div { - transform: rotate(135deg); -} - -/* Turns Lines Into X */ -.menu-wrap .toggler:checked + .hamburger > div:before, -.menu-wrap .toggler:checked + .hamburger > div:after { - top: 0; - transform: rotate(90deg); -} - -/* Rotate On Hover When Checked */ -.menu-wrap .toggler:checked:hover + .hamburger > div { - transform: rotate(225deg); -} - -/* Show Menu */ -.menu-wrap .toggler:checked + .hamburger { - width: 60px; - padding: 1rem; -} -.menu-wrap .toggler:checked ~ .menu { - visibility: visible; -} - -// body + .header .menu-wrap .toggler:checked { -// overflow: hidden; -// position: fixed; -// top: 0; -// right: 0; -// bottom: 0; -// left: 0; -// } - -// .menu-wrap .toggler:checked + body { -// overflow: hidden; -// position: fixed; -// position: fixed; -// top: 0; -// left: 0; -// right: 0; -// bottom: 0; -// } - -.menu-wrap .toggler:checked ~ .menu > div { - transform: scale(1.25); - transition-duration: var(--menu-speed); -} - -.menu-wrap .toggler:checked ~ .menu > div > div { - opacity: 1; - // transition: opacity 0.4s ease 0.4s; -} - -.menu-wrap .menu { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - visibility: hidden; - overflow-x: hidden; - overflow-y: hidden; - display: flex; - align-items: center; - justify-content: center; -} - -.menu-wrap .menu > div { - background: var(--overlay-color); - // border-radius: 50%; - width: 100%; - height: 100%; - display: flex; - flex: none; - align-items: center; - justify-content: center; - transform: scale(0); - transition: all 60ms ease-in-out; -} - -.menu-wrap .menu > div > div { - text-align: center; - max-width: 90vw; - max-height: 100vh; - opacity: 0; - // transition: opacity 0.4s ease; -} - -.menu-wrap .menu > div > div > ul > li { - list-style: none; - color: #fff; - font-size: 1.5rem; - padding: 0.35rem; -} - -.menu-wrap .menu > div > div > ul > li > a { - color: inherit; - text-decoration: underline; - // transition: color 0.4s ease; -} - -.menu-wrap .toggler:checked + .hamburger { - width: 60px; - padding: 0.45rem; -} - -////////////////////////// -// Responsive Stuff -// Large Break Point -///////////////////////// - -@media (max-width: 991px) { - .fixed-content { - width: 100%; - } - - .specs-section { - flex-direction: column; - } - - .left-1 { - padding-top: 11rem; - } - - .left-1.opposite { - padding-top: 15rem; - } - - .left-1.filterblock { - padding-top: 18rem; - } - - .left-1.effects { - padding-top: 17rem; - } - - .specs-section-opposite { - flex-direction: column; - } - - .section-requirements { - flex-direction: column; - align-items: center; - } - - .div-block { - padding: 2rem; - } - - .hero-section { - display: block; - height: auto; - padding-bottom: 2rem; - flex-direction: column; - } - - .hero-right { - margin-top: auto; - margin-bottom: auto; - padding-top: 28rem; - align-self: stretch; - flex: 1; - background-position: 50% 0px; - background-size: contain; - } - - .hero-left { - display: block; - justify-content: center; - align-self: center; - flex: 1; - } - - .hero-left-text-wrapper { - padding-right: 0rem; - padding-left: 0rem; - padding-bottom: 2rem; - align-items: center; - // margin-top: 4rem; - } - - .hero-heading { - text-align: center; - } - - .digital-section { - display: block; - flex-direction: column; - padding: 2rem; - } - - .digital-right { - padding-top: 2rem; - padding-bottom: 2rem; - justify-content: center; - } - - .digital-left { - height: 195px; - padding-top: 36rem; - background-position: center center; - } - - .contributer-section { - flex-direction: column-reverse; - } - - .developer-section-copy { - flex-direction: column; - } - - .tester-section { - flex-direction: column; - } - - .content-creator-section { - flex-direction: column; - color: #ff8f02; - } - - .community-section { - flex-direction: column-reverse; - align-items: center; - } - - .designer-section { - flex-direction: column; - } - - .oscsection { - justify-content: center; - flex-wrap: wrap-reverse; - } - .html-embed { - width: 100%; - } - - pre { - max-width: 75%; - } - - .videosheading { - text-align: center; - } - .videoplayerside { - padding-bottom: 4rem; - } - .videosection { - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-flex-wrap: wrap-reverse; - -ms-flex-wrap: wrap-reverse; - flex-wrap: wrap-reverse; - } - .videoslink { - text-align: center; - } - .videoheading { - text-align: left; - } - .videocopyside { - text-align: center; - } - .videohtmlembed { - width: 560px; - } - - .download-list-nightlies { - text-align: center; - } - - * { - -webkit-animation: none !important; - -moz-animation: none !important; - -ms-animation: none !important; - animation: none !important; - } -} - -///////////////////////// -// Tablet BreakPoint -//////////////////////// - -@media (max-width: 767px) { - .hero-right { - height: auto; - padding-top: 22rem; - } - - .hero-heading { - font-size: 82px; - line-height: 70px; - } - - .download-list { - display: flex; - flex-direction: column; - margin-top: 1rem; - margin-bottom: 1rem; - align-items: center; - - .download-platform { - display: flex; - flex-direction: column; - - + .download-platform { - border-left: 0rem solid; - margin-left: 0rem; - padding-left: 0rem; - } - h2 { - text-align: center; - } - } - } - - .developer-hero { - max-width: 100%; - } - - .designer-hero { - max-width: 100%; - } - - .tester-hero { - max-width: 100%; - } - - .content-creators-hero { - max-width: 100%; - } - - .text-container { - width: auto; - } - - .digital-left { - padding-top: 31rem; - } - - .oscheading { - width: 100%; - } - .oscheading-2 { - width: 100%; - } - pre { - max-width: 75%; - } - - .videosheading { - width: 100%; - } - .videoheading { - width: 100%; - } - .videocopyside { - -webkit-flex-basis: 75%; - -ms-flex-preferred-size: 75%; - flex-basis: 75%; - } - .videohtmlembed { - width: 390px; - height: 222px; - } - - .left-1 { - max-width: 100%; - } - .text-wrapper { - width: auto; - } - - * { - -webkit-animation: none !important; - -moz-animation: none !important; - -ms-animation: none !important; - animation: none !important; - } -} - -//////////////////////// -// Phone Break Point -//////////////////////// - -@media (max-width: 479px) { - // .specs-section { - // // display: block; - // } - - .left-1.filterblock { - background-position: 50% 50%; - } - - .heading { - font-size: 16px; - text-align: left; - } - - .spec-heading { - font-size: 22px; - text-align: left; - } - - // .specs-section-opposite { - // // display: block; - // } - - .text-wrapper { - width: auto; - } - - .specs-text-wrapper { - font-size: 14px; - text-align: left; - } - - .section-requirements { - display: block; - } - - .div-block { - padding-top: 0rem; - } - - .heading-2 { - font-size: 24px; - } - - .div-block-3 { - width: auto; - align-items: center; - } - - .heading-3 { - font-size: 18px; - line-height: 19px; - } - - .button { - width: 224px; - font-size: 16px; - } - - .heading-4.caution-text { - text-align: center; - } - - .hero-right { - display: none; - width: 95%; - height: 210px; - margin-right: auto; - margin-left: auto; - background-size: contain; - } - - .hero-left-text-wrapper { - padding-right: 0; - padding-left: 0; - } - - .hero-heading { - font-size: 40px; - line-height: 40px; - } - - .heading-5-copy { - font-size: 16px; - text-align: left; - } - - .hero-button { - width: 100%; - font-size: 16px; - } - - .hero-link { - font-size: 14px; - } - - .digital-left { - padding-top: 13rem; - } - - .heading-6 { - font-size: 60px; - } - - .div-block-2 { - align-items: stretch; - } - - .caution-text { - font-size: 14px; - } - - .contributer-section { - display: block; - } - - .developer-text { - padding: 2rem; - } - - .text-container { - width: auto; - } - - .heading { - font-size: 22px; - line-height: 24px; - } - - .developer-section-copy { - display: block; - } - - .tester-section { - display: block; - } - - .content-creator-section { - display: block; - } - - .heading-2 { - font-size: 20px; - line-height: 24px; - } - - .contributer-text { - padding: 2rem; - } - - .tester-text { - padding: 2rem; - } - - .content-creator-text { - padding: 2rem; - } - - .community-section { - display: block; - padding: 2rem; - } - - .designer-text { - padding: 4rem; - } - - h4 { - font-size: 1rem; - } - - p { - font-size: 14px; - } - - pre { - max-width: 100%; - font-size: 9px; - } - - .videosection { - padding: 1rem; - } - .videocopyside { - padding: 1rem; - } - .videohtmlembed { - width: 210px; - height: 117px; - } - - .left-1 { - max-width: 100%; - } - - .mobile-hide { - display: none; - } - - select { - margin-right: 0.5rem; - } - - #manualLinks { - margin-right: 0.5rem; - } - - .oscheading { - font-size: 1.75; - } - - .heading { - /* font-size: 22px; */ - /* line-height: 24px; */ - font-size: 16px; - line-height: 20px; - } - .spec-heading { - /* font-size: 22px; */ - font-size: 14px; - } - .designer-text { - /* padding: 4rem; */ - padding: 2rem; - } - - .right.general { - /* padding: 4rem; */ - padding: 2rem; - } - - .right.effects { - /* padding: 4rem; */ - padding: 2rem; - } - - .h4 { - /* line-height: 2.0rem; */ - line-height: 1.5rem; - font-size: 1rem; - } - - .px-4 { - /* padding-left: 64px; */ - /* padding-right: 64px; */ - padding-left: 2rem; - padding-right: 2rem; - } - - .right.oscillators { - /* padding: 4rem; */ - padding: 2rem; - } - - .right.filterblock { - /* padding: 4rem; */ - padding: 2rem; - } - - .right.modulation { - /* padding: 4rem; */ - padding: 2rem; - } - - .videocaptionheading { - /* text-align: center; */ - text-align: left; - margin-top: 2rem; - } - - // .h4 { - // // line-height: 1.5rem; - // } - - .oscsection { - padding: 0; - flex-direction: column; - flex-wrap: wrap-reverse; - } - - .playerside { - flex: 1 50%; - padding: 2rem 1.5rem; - } - - .copyside { - padding: 2rem 1.5rem; - flex: 1 30%; - } - - .videoheading { - text-align: left; - } - .pb-4 { - line-height: 1.5rem; - padding-bottom: 0; - } - - .menu-wrap .menu > div > div > ul > li { - padding: 0.35rem; - } - - * { - -webkit-animation: none !important; - -moz-animation: none !important; - -ms-animation: none !important; - animation: none !important; - } -} diff --git a/_sass/_theme-black.scss b/_sass/_theme-black.scss deleted file mode 100644 index fa8910f3cc..0000000000 --- a/_sass/_theme-black.scss +++ /dev/null @@ -1,28 +0,0 @@ -// Default black theme - -// Color variables -$black: #181818; -$red: #ff5e00; -$red-small: #dc3918; -$white: #fff; -$surge-orange: #ff9000; -$surge-blue: #005cb6; - -// Config -$color-background: $black !default; -$color-dot-accent: $white !default; -$color-foreground: $white !default; -$color-title: $white !default; -$color-body-text: $black !default; -$color-text-accent: $black !default; -$color-code: $red-small !default; -$color-nav-link: $white !default; -$color-primary-link: $white !default; - -.font-smoothing { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -// Import sass partials (used in all themes) -@import "variables", "base", "components", "utilities", "surge"; diff --git a/_sass/_utilities.scss b/_sass/_utilities.scss deleted file mode 100644 index 89e86a8944..0000000000 --- a/_sass/_utilities.scss +++ /dev/null @@ -1,182 +0,0 @@ -/* Type utilities */ -.h0 { - font-size: $h0-mobile; - line-height: 1.0125; - margin-top: 0.85em; - word-wrap: break-word; - - @media (min-width: $breakpoint-lg) { - font-size: $h0-desktop; - } -} - -.text-right { text-align: right; } - -.no-underline { - text-decoration: none !important; - - &:hover { - text-decoration: none !important; - } -} - -.bold { font-weight: bold; } -.uppercase { text-transform: uppercase; } - -.lh-condensed { line-height: 1.25; } - -.list-reset { - list-style: none; - padding-left: 0; -} - -/* Border utilities */ -.border-bottom-thick { border-bottom: 2px solid; border-color: currentColor; } -.border-bottom-thin { border-bottom: 1px solid; border-color: currentColor; } -.border-top-thick { border-top: 2px solid; border-color: currentColor; } -.border-top-thin { border-top: 1px solid; border-color: currentColor; } -.border-0 { border: 0; } - - -/* Theme color utilities */ -.header-background { background-color: $color-background; } -.header-border { border-color: $color-foreground; } -.header-title { color: $color-title; } -.header-text { color: $color-foreground; } -.header-social { fill: $color-foreground; } -.header-social-accent { fill: $color-dot-accent; } -.header-link:hover { color: $color-nav-link !important; } // used for navigation links on homepage -.text-accent { color: $color-text-accent; } // used for date in post list and home link - -/* Layout utilities */ -.container { max-width: $container-width; } - -.col-1 { width: calc(1 / 12 * 100%); } -.col-2 { width: calc(2 / 12 * 100%); } -.col-3 { width: calc(3 / 12 * 100%); } -.col-4 { width: calc(4 / 12 * 100%); } -.col-5 { width: calc(5 / 12 * 100%); } -.col-6 { width: calc(6 / 12 * 100%); } -.col-7 { width: calc(7 / 12 * 100%); } -.col-8 { width: calc(8 / 12 * 100%); } -.col-9 { width: calc(9 / 12 * 100%); } -.col-10 { width: calc(10 / 12 * 100%); } -.col-11 { width: calc(11 / 12 * 100%); } -.col-12 { width: 100%; } - -@media (max-width: $breakpoint-lg) { - .sm-width-full { width: 100% !important; } -} - -.block { display: block !important; } -.inline-block { display: inline-block !important; } - -.table { display: table !important; } - -.left { float: left; } -.right { float: right; } - -.clearfix:before, -.clearfix:after { - content: " "; - display: table -} -.clearfix:after { clear: both } - -.align-middle { vertical-align: middle; } - -/* Padding */ -.px-0 { padding-left: 0; padding-right: 0 } -.py-0 { padding-top: 0; padding-bottom: 0 } - -.px-1 { padding-left: $spacer-1; padding-right: $spacer-1 } -.py-1 { padding-top: $spacer-1; padding-bottom: $spacer-1 } - -.px-2 { padding-left: $spacer-2; padding-right: $spacer-2; } -.py-2 { padding-top: $spacer-2; padding-bottom: $spacer-2; } - -.px-3 { padding-left: $spacer-3; padding-right: $spacer-3; } -.py-3 { padding-top: $spacer-3; padding-bottom: $spacer-3; } - -.px-4 { padding-left: $spacer-4; padding-right: $spacer-4; } -.py-4 { padding-top: $spacer-4; padding-bottom: $spacer-4; } - -/* Margin */ -.mx-auto { margin-left: auto; margin-right: auto; } - -.mt-0 { margin-top: 0; } -.mr-0 { margin-right: 0; } -.mb-0 { margin-bottom: 0; } -.ml-0 { margin-left: 0; } - -.mt-1 { margin-top: $spacer-1; } -.mr-1 { margin-right: $spacer-1; } -.mb-1 { margin-bottom: $spacer-1; } -.ml-1 { margin-left: $spacer-1; } - -.mt-2 { margin-top: $spacer-2; } -.mr-2 { margin-right: $spacer-2; } -.mb-2 { margin-bottom: $spacer-2; } -.ml-2 { margin-left: $spacer-2; } - -.mt-3 { margin-top: $spacer-3; } -.mr-3 { margin-right: $spacer-3; } -.mb-3 { margin-bottom: $spacer-3; } -.ml-3 { margin-left: $spacer-3; } - -.mt-4 { margin-top: $spacer-4; } -.mr-4 { margin-right: $spacer-4; } -.mb-4 { margin-bottom: $spacer-4; } -.ml-4 { margin-left: $spacer-4; } - -// Responsive margin -@media (min-width: 52em) { - .mx-lg-auto { margin-left: auto; margin-right: auto; } - - .mt-lg-0 { margin-top: 0; } - .mr-lg-0 { margin-right: 0; } - .mb-lg-0 { margin-bottom: 0; } - .ml-lg-0 { margin-left: 0; } - - .mt-lg-1 { margin-top: $spacer-1; } - .mr-lg-1 { margin-right: $spacer-1; } - .mb-lg-1 { margin-bottom: $spacer-1; } - .ml-lg-1 { margin-left: $spacer-1; } - - .mt-lg-2 { margin-top: $spacer-2; } - .mr-lg-2 { margin-right: $spacer-2; } - .mb-lg-2 { margin-bottom: $spacer-2; } - .ml-lg-2 { margin-left: $spacer-2; } - - .mt-lg-3 { margin-top: $spacer-3; } - .mr-lg-3 { margin-right: $spacer-3; } - .mb-lg-3 { margin-bottom: $spacer-3; } - .ml-lg-3 { margin-left: $spacer-3; } - - .mt-lg-4 { margin-top: $spacer-4; } - .mr-lg-4 { margin-right: $spacer-4; } - .mb-lg-4 { margin-bottom: $spacer-4; } - .ml-lg-4 { margin-left: $spacer-4; } -} - -// Link styles for social icons -.link-social { - text-decoration: none; - font-weight: bold; - line-height: 1; - - &:hover { - text-decoration: none !important; - } -} - -// Link styles for navigation -.link-primary { - font-weight: bold; - text-decoration: none !important; - - &:hover { - color: $color-primary-link; - text-decoration: none !important; - } -} diff --git a/assets/images/Filter.jpg b/assets/images/Filter.jpg deleted file mode 100644 index 91cc5e1422..0000000000 Binary files a/assets/images/Filter.jpg and /dev/null differ diff --git a/assets/images/Hero.png b/assets/images/Hero.png deleted file mode 100644 index 987c20f4ed..0000000000 Binary files a/assets/images/Hero.png and /dev/null differ diff --git a/assets/images/Logo.svg b/assets/images/Logo.svg deleted file mode 100644 index ebd28ce457..0000000000 --- a/assets/images/Logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Logo - - - - \ No newline at end of file diff --git a/assets/images/apple-touch-icon.png b/assets/images/apple-touch-icon.png deleted file mode 100644 index 069f4aca28..0000000000 Binary files a/assets/images/apple-touch-icon.png and /dev/null differ diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico deleted file mode 100644 index 71b5608807..0000000000 Binary files a/assets/images/favicon.ico and /dev/null differ diff --git a/assets/images/favicon_old.ico b/assets/images/favicon_old.ico deleted file mode 100644 index a85d9a6d5f..0000000000 Binary files a/assets/images/favicon_old.ico and /dev/null differ diff --git a/astro.config.ts b/astro.config.ts new file mode 100644 index 0000000000..8239c8b13f --- /dev/null +++ b/astro.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from "astro/config"; +import mdx from "@astrojs/mdx"; +import react from "@astrojs/react"; +import tailwind from "@astrojs/tailwind"; + +// https://astro.build/config +export default defineConfig({ + markdown: { + shikiConfig: { + theme: "css-variables", + wrap: true, + }, + }, + integrations: [mdx(), react(), tailwind()], +}); diff --git a/changelog-old.md b/changelog-old.md deleted file mode 100644 index 1823108b1f..0000000000 --- a/changelog-old.md +++ /dev/null @@ -1,1119 +0,0 @@ ---- -layout: page -title: Old Changelogs -permalink: /old-changelogs/ ---- - -This page contains changelogs for all release versions of Surge, prior to Surge XT. - -Changelogs for Surge XT can be found here. - - - -
- -

Changes in Surge 1.9.0

- -
- -Surge 1.9 is a major feature expansion over January's Surge 1.8 release, including 4 new oscillator types, 15 new effects, a large number of microtuning -enhancements (including support for [ODDSound MTS-ESP](https://oddsound.com/)), substantial new content including a set of patches tailor-made -for our new oscillators by Jacky Ligon, and much, much more. In more detail: - - -* New Oscillators - * Modern, a low aliasing, clean waveshape oscillator based on extensive research into low aliasing waveform generation methods ([DPW](https://www.researchgate.net/publication/224557976_Alias-Suppressed_Oscillators_Based_on_Differentiated_Polynomial_Waveforms) in this case) - * Alias, a very, very digital oscillator based on ignoring extensive research into low aliasing waveform generation methods, which as a result gives lots of 8-bit joy - * String, a waveguide-based feedback oscillator, perfect for creating all sorts of stringy, plucky, and plonky sounds - * Twist, an oscillator based on a [rather famous Eurorack multi-oscillator module](https://mutable-instruments.net/modules/plaits/) - -* New Effects - * Neuron, a distortion effect based on [Gated Reccurent Unit](https://ccrma.stanford.edu/~jatin/ComplexNonlinearities/gru.html), done by Jatin Chowdhury - * CHOW, a [truculent distortion effect](https://github.com/Chowdhury-DSP/CHOW), done by Jatin Chowdhury - * Exciter, an effect based on a [rather famous aural exciter](https://github.com/jatinchowdhury18/Aphex_Exciter) unit, done by Jatin Chowdhury - * Tape, a compact implementation of [Chow Tape Model](https://github.com/jatinchowdhury18/AnalogTapeModel), done by Jatin Chowdhury - * 11-band graphical EQ - * Resonator, inspired by a resonator unit from a very well-known vintage hybrid polyphonic synthesizer that rhymes with "vogue". Contains a few Surge-inspired additions like optionally allowing self-oscillation of resonators through modulation! - * Combulator, a novel bank of 3 comb filters with feedback, additional noise exciter, separate output volumes for each comb, and individual panning for two out of three combs - * Ensemble effect with several BBD modes and a clean delay mode, uses a very famous tri-phase dual LFO modulation setup - * Nimbus, a live input granular processor with built-in reverb, based on [another rather famous Eurorack module](https://mutable-instruments.net/modules/clouds/) - * Treemonster, a really wild pitch-tracking ring modulator from Shortcircuit 2, proper Vember Audio classic! - * Five new Airwindows effects - Galactic, Infinity, Verbity, MatrixVerb and TripleSpread - * All these effects are also added to SurgeEffectsBank - -* Other DSP changes - * A large number of C++ and SSE improvements in the Sine oscillator, substantially improving performance - * Oscillator drift now works properly for all oscillator types - * Oscillator drift now starts at small non-zero random value for each unison voice, rather than starting from 0 (there is also an option to use the old behavior, right-click Osc Drift slider) - * Character filter will work on new oscillator types (so it's not just for Classic oscillator type anymore - but it is still a global parameter for both scenes!) - * Retrigger now works properly on all oscillator types - * Surge now supports single-cycle wavetables (previously, a minimum of two frames were required for the wavetable to load correctly) - * Wide is the default filter configuration for all templates and Surge's startup state - * The Asymmetric and Digital waveshapers in the Distortion effect now work properly - * You can now deactivate Delay R time to allow linking left and right delay times - * Ring Modulator frequency is now displayed in Hz; also added Absolute mode - * Reverb 2 now has the same minimum predelay value as Reverb 1 - * Phaser and Neuron can now both deactivate Rate of their internal LFO, in which case modulating Rate will scrub the LFO's phase for manual phasing/combing effects - * Added 4 new waveshapes in the Sine oscillator - * More effect types now properly respond to All Notes Off message - * Hard clip can be configured and set per scene or globally, with new settings at 0 and +18 dBFS (which is the default setting as it were before). You can set this by right-clicking the scene or global volume sliders, or additionally by right-clicking the A/B boxes in the FX grid - * Sine, FM2 and FM3 oscillator types now have extended range for Feedback parameter by default - * Maximum polyphony parameter is now actually read from the patches on load (Surge always did store the chosen max polyphony value into the patch, it was just never loaded!) - * Global Volume doesn't apply to individual scene outputs anymore - * Added deactivation toggles to low/high cut filters across all effects that didn't have them so far - -* Alternate Tuning / Microtonal Interface - * Provide two tuning application modes: Tuning applied at MIDI input, or after modulation. This is described in detail in the manual. By default, it is set to apply at MIDI input for new patches - * Filter cutoff can now be tuning-aware - * Currently loaded SCL/KBM files are now displayed in Tuning menu - * Far clearer internal and user state management on tuning (= scale + mapping), scale, and mapping management - * KBM name is now stored in patch and DAW state - * Tuning is now interpolated in log2 space rather than linear space for more accurate inter-note tuning - * And finally, thrilled to be one of the first synths to integrate [ODDSound MTS-ESP](https://oddsound.com) as a tuning source - -* User Interface - * Reposition Author/Category fields in the factory skins, not to overlap with longer patch names - * Hover effect is now available on more assets, for example oscillator type menu and FX grid - * Retrigger and Keytrack button have a right-click option to set their value for all oscillators in a scene - * Phase/Shuffle parameter now changes its label based on LFO type (will show Shuffle only when Step Seq is selected) - * Patch browser left-click menu now has multiple columns (Windows only!) - * Control/Command-drag on sliders to snap to units now works for modulation amounts - * Control/Command-click on patch or category previous/next buttons will load a random patch! - * Expanded use of menu for integer sliders in some cases - * Groups of sliders can now be deactivated collectively, for example in EQ and Tape effects, Twist oscillator... - * Added an option to always show maximum amplitude LFO as a dotted line (User Settings > Value Displays > Show ghosted LFO waveform reference) - * Option to drag bottom right corner to resize (VST3 only) is not displayed anymore for skins that have defined fixed zoom levels (i.e. Royal Surge) - * Added a UI refresh when changing filter type via host automation - * "Add Modulation From..." option now has its entries organized in submenus per modulator type - * Removed a check if factory patches are installed. Now it's possible to completely remove all factory/3rd party patches if one wants to, and only focus on making one's own patches with a clean slate! - * Envelope LFO presets are now saved to Envelope subfolder (previously they went to LFO subfolder) - -* Plugin Wrappers - * AU advertises MPE support now - * Label all AU parameters as high resolution - * Disable VST3 parameter name resets which was coded incorrectly in Surge, causing problems in Bitwig - * VST3 implements `getParamNormalizedByString`, allowing DAW-side value typeins to be consistent with Surge - * VST3 bug with `getParameterString` fixed, correcting incorrect string display in some cases in Bitwig - -* Skin Engine Changes - * Far clearer skin component model - * Add a developer mode option (right click Menu button) to overlay a grid on top of Surge's GUI at runtime as a helper tool when designing, with support for arbitrary grid size - * Fixed some bugs pertaining to user-specified parameter groups - * Introduced skin version 2 for all the below mentioned new skin engine features: - * Skin labels can show values from parameter names (useful for i.e. oscillator and FX parameters, which dynamically change their name based on oscillator/FX type) - * Skin labels can now have an image assigned - * Oscillator type and FX grid assets now only contain the backgrounds, any text on them is now generated through code - * Slider class now has font size and text offset properties - * Added skin properties for positioning the patch browser - * Added a skin color for showing the current value of a macro more prominently - * Added skin colors for About page text, column text, link and hovered link - -* New Content - * Patches and FX presets from Vospi - * FX presets from Arty - * New patches from Databroth - * Updated Jacky Ligon patches to set default tuning mode and adjust maximum polyphony - * Expanded tuning library from Jacky Ligon - -* Smaller Changes - * Show the plugin file location on About screen - * Show the full modulator name in inter-LFO modulations - * Show tne entire MSEG curve in Rate deactivated mode - * When copying an oscillator, remember current position in the wavetable list index - * About page shows your actual CPU model, not some build-time guess - * The default value for scene Highpass cutoff parameter is minimum now (6.88 Hz) - * Increase mouse hitzone on macro sliders slightly - * Frequencies below C0 now have a proper negative-interval note name - * Updated a few factory library patches that were using Latch mode by setting them to Mono mode, in order to avoid random noises when browsing through patches - * Voice LFO Step Sequencer envelope triggers now run properly even without assigned modulation - * Added a graphical asset for MIDI Learn, so it's now clearer to see when we're in MIDI learn mode and for which parameter - * Handled a tuning regression when SCL files had a blank title in the first line - * Next/Prev can span or constrain to category in patch navigation - * All frequency-based parameters (except LFO rate) can now be set by typing in a note name (using 12-TET to convert to frequency) - * Zoom level is no longer additionally saved in the DAW state - only the default value stored in user configurationi is used across DAW projects and all Surge instances - * Wavetable export feature now correctly names the wavetable - * Existing oscillator modulations are now cleared when changing oscillator type - * When drag&dropping a patch onto Surge's UI, it is first checked if it exists among the current factory/3rd party/user patches, then that position is used as an anchor for previous/next patch buttons - * Fixed a bug where loading a patch loaded wavetables twice, causing audio dropouts - * Fixed a graphics memory leak on Linux, caused by difference in VSTGUI reference count between Linux and Windows/Mac - * Fixed a bug when changing patches with previous/next patch buttons could skip multiple patches sporadically - * Default MIDI learn settings are not stored to configuration.xml in factory data folder anymore, but in the always-writeable user data folder - * When loading patches that contain invalid modulations (for example, Shape parameter in Sine oscillator has some modulation that was made possible in 1.8 and before through certain steps), make sure those modulations are removed to not create any trouble down the road - -* Code cleanup - * Reformatted the codebase with a new, far more sane, clang-format (no more 3 space tabs, and so on!) - * Replaced our hand-rolled filesystem implementation with [gulak](https://github.com/gulrak/filesystem) - * GUI overlay API (used for MSEG editor, Store Patch dialog, etc.) is now far more rational, so we can have more than one overlay showing at once - * Rework `char` and `string` functions to avoid potential overflows in several cases - * Common oscillator functions (drift, character filter, etc..) are now all found in a single place (OscillatorBase.h) - * Slider bipolarity and deactivation is now handled in a [single API point](https://github.com/surge-synthesizer/surge/blob/main/doc/DynamicNameActivationBipolar.md) - * Consistently named oscillator and FX related C++ files and classes - * A non-global RNG used through most of the code where `rand()` was used before - * Some memory leaks were plugged up! - -* Infrastructure - * More work done on UTF-8 file names and paths on Windows - * Linux consistently uses `CMAKE_INSTALL_PREFIX` as a search path for assets - * Surge on Windows can now be built with `mingw` or `clang` (but productoin builds are still using MSVC) - * Linux reads config.xml from the filesystem - * In Ardour on Linux, work around the `LD_LIBRARY_PATH / GTK2` issue which stopped Zenity from launching - * Activate warnings-are-errors on Linux gcc - * Windows implicit `precompiled.h` removed - * Integrated [libsamplerate](https://github.com/libsndfile/libsamplerate) in the codebase, required for Eurorack-based modules which operate at a fixed sample rate of 48k - * CMake will now run even if `git` is not found - -* Surge XT - * Lots of commits for Surge XT which will hopefully be released sometime this summer! - -
- -

Changes in Surge 1.8.1

- - - -

Changes in Surge 1.8.0

- - - -

Changes in Surge 1.7.1

- - - -

Changes in Surge 1.7.0

- - - -

Changes in Surge 1.6.6

- - - -

Changes in Surge 1.6.5

- - - -

Changes in Surge 1.6.4.1

- - - -

Changes in Surge 1.6.3

- - - -

Changes in Surge 1.6.2.1

- - - -

Changes in Surge 1.6.2

- - - -

Changes in Surge 1.6.1.1

- - - -

Changes in Surge 1.6.0

- - - -

Changes in Surge 1.6.0-beta-9

- - - -

Changes in Surge 1.6.0-beta-8

- - - -

Changes in Surge 1.6.0-beta-7

- - - -

Changes in Surge 1.6.0-beta-6

- - - -

Changes in Surge 1.6.0-beta-5

- - - -
diff --git a/changelog.md b/changelog.md deleted file mode 100644 index a4031339a6..0000000000 --- a/changelog.md +++ /dev/null @@ -1,766 +0,0 @@ ---- -layout: page -title: Changelog -permalink: /changelog/ ---- - -This page contains changelogs for all release versions of Surge. For the latest developments, we are keeping -a separate nightlies changelog, which will be merged to this page upon release. - -Changelogs for versions prior to Surge XT 1.0 release can be found here. - - - -
- -

Changes in Surge XT 1.2.1, 1.2.2, and 1.2.3

- -
- -We released Surge XT 1.2.1 on April 30, 2023, and 1.2.2 fixing a small error on May 1, - and 1.2.3 fixing a single menu item crash on May 4. -It fixes a few small irritations from the previous version -and adds a couple of features which we had ready for the next release. - -* Headline Changes - * In 1.2.0 we have corrected a problem with audio input for irregular block sizes, but we warned about this - situation too loudly and way too often - the warning is now moved to the audio input oscillator - screen (in 1.2.2; in 1.2.1 it is on every oscillator screen), but the feature is kep - * Renaming a patch could cause a race condition in our patch database - especially on Linux systems - - causing a simple rename to show a large number of database lock errors - this is now fixed - -* Tuning - * Pitch slider set to 0 in Absolute mode now tunes correctly with Scala tuning files loaded - -* Modulation - * Fixed pitch bend becoming stuck when toggling MPE mode during held bent note - * Made sure Portamento set to 0 is strictly 0 in all modes - -* UI/UX - * Clearing FX slot or chains will now disable bypass if a slot or slots were bypassed - * Dragging a node in MSEG shows a value tooltip - * Fixed font difference after typein for VKB Tempo field - * Fixed a problem where Oscilloscope improperly grabbed keyboard focus - * Allowed envelope retrigger options for Latch play mode - * Fixed a problem whereby the Tempo field in standalone didn't work in some cases - -* Content - * Added CC0 license to the Init Square template patch - -* Infrastructure - * 1.2.3 contains our last binary distribution of the LV2 format. Going forward - users needing an LV2 will need to self build. (1.2.1 is missing an LV2). - - -
- -

Changes in Surge XT 1.2.0

- - - -

Changes in Surge XT 1.1.2

- - - -

Changes in Surge XT 1.1.1

- - - -

Changes in Surge XT 1.1

- - - -

Changes in Surge XT 1.0.1

- - - -

Changes in Surge XT 1.0

- - - -
diff --git a/clap.md b/clap.md deleted file mode 100644 index 46ea438202..0000000000 --- a/clap.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -layout: page -title: CLAP -permalink: /clap/ ---- - - -

A New Open Standard for Plugins and Hosts

- -CLAP is a new open standard for plugins and hosts. You can read more about this fully open source, -industry supported, collaboratively developed standard at -the June 15 announcement. - -We are thrilled to be part of the cross-industry team which actively engaged in developing CLAP, and -are grateful to all the folks in the open and closed source community who worked with us -as collaborators. We also welcome an innovative, industry-supported, fully open standard, -and are proud that the Surge family of products supports it on launch day! - - - -The Surge Synth Team has been actively engaged in CLAP for more than a year, and Surge XT -is one of the first synths to take full advantage of some of the newer features, such -as polyphonic modulation. - -We have a collection of plugins and tools you can use today to try CLAP. - -

Plugins

- - - -We will get to Stochas soon! And Shortcircuit works as well as a CLAP as it does anything else, but thats -still not very well! (In our defense, we've been working on CLAP!) - -

For Developers

- -We have several CLAP-related assets useful for developers - - - - diff --git a/downloads.md b/downloads.md deleted file mode 100644 index d82eb02dba..0000000000 --- a/downloads.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: page -title: Downloads -noheader: true -permalink: downloads ---- - -This page has direct links to our production downloads, as well as instructions on how to get older -versions, betas and nightlies. - -# Stable version: Surge XT {% include stable_xt_version %} - -The stable version of Surge XT is the one we recommend for music making in a normal production environment. -It is tested, widely used, and available for the following platforms: - -

Windows 64-bit (Standalone, CLAP, VST3)

-

Windows 32-bit (Standalone, VST3)

-

macOS Intel/ARM Universal (Standalone, AU, CLAP, VST3)

-

Linux 64-bit (Standalone, CLAP, LV2, VST3 - .deb built on Ubuntu 18.04, LV2 with JUCE 6 community branch)

- -

Want an RPM for Linux? Want a ZIP file? Need the source code bundle? Check our other available formats!

- - -# Other versions - -

All old Surge XT release builds

-

Surge XT nightly builds

-

Surge 1.9 and older versions

diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index 881be9d623..0000000000 Binary files a/favicon.ico and /dev/null differ diff --git a/index.md b/index.md deleted file mode 100644 index 0671507841..0000000000 --- a/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -# Feel free to add content and custom Front Matter to this file. -# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults - -layout: home ---- diff --git a/manual/conversion.txt b/manual/conversion.txt deleted file mode 100644 index e6042c98b3..0000000000 --- a/manual/conversion.txt +++ /dev/null @@ -1,31 +0,0 @@ - pandoc --extract-media ./images ../../../surge/doc/Surge\ manual.odt --to=gfm -o Surge.md - -Then I ran - -open( SF, "< Surge.md" ); -while( ) -{ - s/^[ -]+#/#/; - print; -} - -that gets us here. The svm file conversion is trickier. - -On linux I ran - -find . -name "*.svm" -print -exec unoconv --format=png {} \; - -and got PNGs then I ran - -open( SF, "< Surge.md" ); -while( ) -{ - s/\.svm/\.png/; - print; -} - -them trim the - -find . -name "2*png" -exec convert -trim {} trim.png \; -exec mv trim.png {} \; - -and then we get this. diff --git a/manual/fixmd.pl b/manual/fixmd.pl deleted file mode 100644 index 3f48f7fe79..0000000000 --- a/manual/fixmd.pl +++ /dev/null @@ -1,6 +0,0 @@ -open( SF, "< Surge.md" ); -while( ) -{ - s/\.svm/\.png/; - print; -} diff --git a/manual_xt/Surge-XT.md b/manual_xt/Surge-XT.md deleted file mode 100644 index 514ed53d93..0000000000 --- a/manual_xt/Surge-XT.md +++ /dev/null @@ -1,3370 +0,0 @@ ---- -layout: manual -title: Surge XT User Manual -permalink: /manual-xt/ -margin-top: 2cm -margin-bottom: 2cm -margin-left: 2cm -margin-right: 2cm ---- - -
- -![Surge XT Logo](../manual_xt/images/Pictures/surge_xt_logo.png) - -
- - -![Surge XT Screenshot](../manual_xt/images/Pictures/surge.png) - -
- -
- - -# Getting Started - -Thank you for using **Surge XT**\! - -Surge XT is a virtual synthesizer originally released as "Surge" into -open source by creator Claes Johanson in September 2018. Since then, it is maintained by a group of volunteers. - -This first section is intended to give you a brief overview of some concepts -that are specific to this synthesizer and an introduction on how to navigate, -manipulate, and use Surge XT to its full potential. - -For detailed information regarding the synthesis engine and other advanced technical -specifications and options of this synthesizer, there is a second section dedicated to -[Technical Reference](#technical-reference). - -Note that most of the images and descriptions in this manual are made with the Classic skin in mind, as it's the -default skin used when first loading Surge XT. - -Finally, for more tips and tricks, tutorials, and to download additional content, you can also take a look at -[Surge's wiki](https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki). - -
- -## Installing or Building Surge XT - -*Audio Units, AU is a trademark of Apple Computer, Inc -VST is a trademark of Steinberg Media Technologies GmbH* - -Surge XT's installer is available at [https://surge-synthesizer.github.io](https://surge-synthesizer.github.io). - -### Windows - -On the Windows platform, Surge XT is delivered as both a 32 or 64-bit VST3 and CLAP plug-in instrument. - -The file name for the VST3 is `Surge XT.vst3`. For CLAP, it is `Surge XT.clap` - -System Requirements: - - - Windows 7 or newer - - A reasonably fast CPU (Pentium 4/Athlon 64 or above) - - At least 4GB of RAM - - VST-compatible host application - -In addition, to use the 64-bit version on Windows you need the following: - - - A CPU supporting the x64 (AMD64/EM64T) instruction set - - A **64-bit** version of Windows - - An application capable of hosting 64-bit VST plug-ins - -Both the VST3 and CLAP versions of the plug-in should be automatically installed in their default plug-in location and -should be found by your host application, as long as it supports VST3 or CLAP. However, the Windows version also comes -with a **portable mode**: - -- Portable Mode allows you to store assets in the same directory as the Surge XT VST3 or CLAP. -- If Surge XT is installed in a folder and in that same folder there is a directory called `SurgeXTData`, Surge XT will use that for factory data rather than `%PROGRAMDATA%\Surge XT`. -- If in that same folder there is a directory called `SurgeXTUserData`, Surge XT will use that for user data rather than `%DOCUMENTS%\Surge XT`. -- Either none, one, or both of those folders can be there. Surge XT will fall back to the defaults if they are not present. -You can always see your data paths in the [About screen](#about-surge-xt). - -### macOS - -On Mac, Surge XT is delivered as a 64-bit Plug-in Instrument for the Audio -Unit (AU), VST3, and CLAP plug-in interfaces. - -System Requirements: - - - Mac OS X 10.11 or newer - - A 64-bit x86 Intel or ARM Apple Silicon CPU - - At least 4GB of RAM - - 64-bit AU or VST-compatible host application - -To install, run the packaged installer. You will be given the option of automatically installing the -AU `Surge XT.component` and the VST3 or CLAP to their correct locations. -The factory patches and wavetables will also be automatically installed. - -Running the packaged installer will install Surge for all of the users of your -Mac. - -### Linux - -On Linux, Surge is available as a 64-bit VST3 and CLAP in the form of a **deb** and **RPM** package. - -The system requirements can be hard to determine, as there are a lot of distributions out there and other factors. -However, the following information might be good to know: - - - The installation package on **Surge XT's website** is in the form of a Debian package - - The distribution package is built on Ubuntu 18.04 - - The packages required are listed in the source and in the deb file - -**Note:** Some actions in Surge XT are done by doing Alt + Drag or scroll wheel. On certain Linux distributions, -those shortcuts and gestures may cause conflicts between Surge and the desktop environment. We decided we couldn't -give up alt-drag for all platforms because one window manager in one distribution used it by default. Therefore, -it's often possible to disable that global gesture in desktop environments, and would be the easiest way to solve -that possible issue. - -### Building from Source - -If you would like to build Surge XT from source, see the instructions on -[our Github repository](https://github.com/surge-synthesizer/surge). - -
- -## Installing Alongside Older Versions - -Although Surge XT represents an evolution of Surge, Surge XT is an entirely new plugin. This means that you can -effortlessly install it alongside Surge 1.9 or earlier, and you will need to keep Surge 1.9 installed in order -to open existing projects containing older versions of Surge. - -## Locations - -### Windows - -The patch library and wavetables are at `C:ProgramData\Surge XT`. -The user patches are at `C:\Users\your username\My Documents\Surge XT`. - -### macOS - -The patch library and wavetables are at `/Library/Application Support/Surge XT`. -The user patches are at `~/Documents/Surge XT`. - -### Linux - -The patch library and wavetables are at `/usr/share/surge-xt` with a standard install. -The user patches are at `~/Documents/Surge XT`. This directory will be created once you store a patch -or change the user default settings for the first time. - -Note: These locations can be changed in Surge's menu (see [Data Folders](#data-folders)). - -If you put user content in the factory folder or otherwise change it, future installers will erase it. -Surge XT's installers never touch anything in the user area. - -So, if you want to install a custom skin, set of patches, or otherwise add things to Surge, -put them in your user data folder instead of here, or risk losing them when you upgrade. - -
- -## Playing Your First Note - -Surge XT is most comfortably used with a [DAW](https://en.wikipedia.org/wiki/Digital_audio_workstation), or a physical device such as a keyboard. To get started however, you can make -use of the virtual keyboard (see [Workflow](#workflow)), which can be opened from `menu -> workflow -> virtual keyboard`, or `alt+k`. - -Each note you play will be simulated based on the current Patch, so it's the perfect way to experiment before tackling a more complex setup. - -# User Interface Basics - -The user-interface of Surge XT is divided into four main sections: - - Header - - Scene controls - - Modulation/Routing - - Effects - -Keeping this structure in mind will make it easier to understand the layout. - -![Illustration 1: The four sections the user-interface that Surge XT is divided into.](../manual_xt/images/Pictures/sections.png) - -*The four sections of the user-interface that Surge is divided into.* - -
- -## The Scene Concept - -Every patch in Surge XT contains two scenes (A & B) and an effect-section. -Both scenes and all effect settings are stored in every patch. A scene is similar to a -traditional synthesizer patch as it stores all the information used to synthesize a voice. -Since there are two scenes in each patch, it's possible to have layered or split sounds stored within a single patch. -(see [Scene Select and Scene Mode](#scene-select-and-scene-mode)). - -![Illustration 2: Both scenes and all effect settings are stored in every patch.](../manual_xt/images/Pictures/illu2.png) - -
- -## Audio Outputs - -When loaded into a DAW, each instance of Surge XT has **3 audio outputs**: - -- Stereo Out -- Scene A Out -- Scene B Out - -Depending on the host, those outputs can be used and routed to be processed separately. - -
- -## Sliders and Controls - -The most common user-interface control in Surge XT is the slider. They come -in both horizontal and vertical orientations but their functionality is -otherwise identical. - -Sliders are always dragged, there is no jump if you click on the slider -tray instead of the slider head, it enters dragging mode nonetheless. - -Slider interactions: - - **Left-click drag** - Drag slider - - **Shift + Left-click drag** - Drag slider (fine) - - **Ctrl/Cmd + Left-click drag** - Drag slider (quantized steps) - - **Alt + Left-click drag** - Drag slider in elastic mode (snaps back to initial position upon release) - - **Scroll Wheel** - Move Slider - - **Shift + Scroll Wheel** - Move slider (fine) - - **Double left-click** - Reset parameter to default value - - **Right-click** - Context menu - - **Hover** - See the slider's current value without clicking on it - -Other than sliders, some of Surge XT's parameters are also displayed as number and value fields, buttons and button rows. - -
- -## Undo and Redo - -Below the [Patch Browser](#patch-browser), you will find curved arrow buttons just to the left of the **Save** button. -Clicking on these will allow you to undo and redo the latest changes. You can also use keyboard shortcuts (by default, -Ctrl+Z and Ctrl+Y) to undo and redo respectively. - -### Parameter Context Menu - -Any parameter's context menu can be brought up with a right-click. This menu has numerous useful functions: - -![Illustration 3: Slider context menu](../manual_xt/images/Pictures/slider_context_menu.png) - -#### Name and Contextual Help - -Clicking on this first option will open this user manual to the correct section explaining the parameter in question. -Alternatively, you can simply hover over the control in question and press F1. - -#### Edit Value - -This option allows you to type in the desired value of a parameter. Once the value popup appears, its text will -already be highlighted, and you can start typing the value right away. When you are done, simply press Enter to -confirm the change. To cancel and close this popup, simply press the Escape key or move any other parameter. - -Note that for any value type-in windows in Surge XT, there is no need to type in the unit of the entered value. - -![Illustration 4: Type-in window](../manual_xt/images/Pictures/typein_window.png) - -For discrete parameters (Unison Voices, or a button row for instance), instead of a type-in field, all the possible -values will be displayed right in the menu so they can be accessed directly. - -![Illustration 5: Discrete parameters](../manual_xt/images/Pictures/discrete_values.png) - -#### Extend Range - -Some parameters can have their range extended. The option **Extend range** will appear in the context menu -if they do. **Pitch**, for instance, is one of those parameters. - -#### Tempo Sync - -Some parameters can be synchronized to the host tempo. The option **Tempo sync** will appear in the -context menu if they do. - -Once tempo-synced, when using the Surge XT Classic skin, the slider will show a "TS" symbol on their handles to indicate that state, like so: - -![Illustration 6: Tempo sync slider](../manual_xt/images/Pictures/ts_slider.png) - -This indication can vary depending on the skin used. - -#### Enabled - -Some parameters can be enabled or disabled. If a slider appears transparent or is missing its handle, -in some cases, it can be because the parameter is disabled. To toggle it, simply click on that option. - -#### Modulations - -This section of the menu will appear if the right-clicked slider is being modulated by some modulation source(s) (if it has a blue tint). -See [Routing](#routing) for more information. - -- **Red X icon** - Clicking on this icon to the left of a modulation source will clear that modulation routing. -- **Speaker icon** - Clicking on this will allow you to mute (bypass) a modulation source in the list. Simply click -that icon again to unmute that source. -- **Pencil icon** - This will bring up the modulation amount type-in window. -Simply type-in the desired amount of modulation you want to apply to that parameter. See -[Edit Value](#edit-value) for more information. - -#### Add Modulation From - -As its name suggests, this menu entry allows you to directly link a modulator to the right-clicked control. -All the available modulation sources are sorted in different categories so you can find the desired one easier. -Once a modulation source is chosen, a type-in window will appear, allowing you to enter the modulation amount you -want to apply. - -#### Assign Parameter To - -This option allows to assign the right-clicked parameter to any MIDI CC. - -#### MIDI Learn - -This is where you assign a MIDI controller to the desired slider. To abort MIDI learning on that parameter, -simply right-click again and the option will now become **Abort Parameter MIDI Learn**. - -#### Clear learned MIDI - -This option will be available if the selected parameter has already been MIDI learned. It allows you to clear that link (the -existing link MIDI CC number will be shown in parentheses). - -#### VST3 Options - -Finally, the VST3 version of Surge XT supports VST3 context menu items. Depending on the host, -there may be more or less options regarding automation, MIDI, or parameter values. - -
- -# Header - -![Illustration 7: Header section](../manual_xt/images/Pictures/header.png) - -## Scene Select and Scene Mode - -![Illustration 8: Scene select and scene mode](../manual_xt/images/Pictures/scene_select.png) - -There are two setups of all controls within the Scene section of the user interface. -The **Scene Select** buttons **[A|B]** determine which one is selected for editing. -Right-clicking on these buttons brings up a context menu that allows you to copy/paste scene content. - -Depending on the **Scene Mode**, these two buttons could also be used to choose which scene will be *played*. -Indeed, whether a scene will generate a voice when a key is pressed is determined by the **Scene Mode** setting: - - - **Single** – Notes will be played only by the selected scene. - - **Key Split** – Notes below the **split key** will be played by scene A, - notes above and including the **split key** will be played by scene - B. - - **Channel Split** Notes from MIDI channels below the **split MIDI channel** will be played by scene A, - notes from MIDI channels above and including the **split MIDI channel** will be played by scene B. - - **Dual** – Both scenes will play all the notes. - -In both **Key Split** and **Dual** mode, if MPE is disabled, the system also supports MIDI channel routing where Channel 2 plays only -Scene A and channel 3 plays only Scene B. MIDI channel 1 and all other channels higher than 3 play the Split/Dual mode. - -**Poly** shows the number of voices currently playing and allows you to -set an upper limit to the number of voices allowed to play at the same -time by dragging horizontally on the value. The voice-limiter will kill off excess voices gently to avoid -audible artifacts, thus it's not uncommon for the voice count to exceed -the limit. - -
- -## Patch Browser - -![Illustration 9: Patch browser](../manual_xt/images/Pictures/patchbrowser.png) - -### Navigation - -Cycling through sounds in Surge XT is easy: just press the arrow buttons -until you find something you like. If you left-click the patch-name -field (anywhere in the white area), a menu will list all available -patches arranged into categories. A right-click will bring up a menu with just the -patches of the current category. If you middle-click on these buttons, a random patch -will be loaded. - -These categories are also grouped into three sections depending on who created them: - - - Factory Patches - Patches created in-house by the Surge XT authors. - - - 3rd party patches - Patches created by users and 3rd parties. - Categorized by creators. - - - User Patches - Your own patches will be stored here. How you categorize them - is entirely up to you. At the top of this section is where your favorites patches will show up. - -At the bottom, there is an option to -[download additional content](https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki/Additional-Content). - -By default, to help prevent you loosing an unsaved patch by switching patches, a confirmation dialog will open, asking -you if you still want to proceed. You can turn off this warning by checking the *Don't ask me again* box, or by -disabling the appropriate option in the [Workflow](#workflow) category found in the [main menu](#main-menu). -A modified or unsaved patch name will show an asterisk in the patch name area. - -You can also directly load patches (.fxp) by dragging and dropping them anywhere over the Surge XT interface. - -There is also an option in the patch menu to set the current patch as the default one to be loaded when -opening a new instance of Surge XT. - -Finally, the patch menu allows you to rename or delete a patch. Those options will only appear if you have a -non-factory patch loaded in the synth. - -
- -### Searching Patches - -To search patches by name, simply click on the magnifier glass icon to the left of the patch name area. -You may see Surge XT first update the patch database before being able to type in your search query. - -You can also search for patches by **author** or **category** by typing "AUTHOR=" or "CATEGORY=", followed by -your search query. - -If the **Retain patch search results after loading** option is enabled in the [Workflow](#workflow) category found in -the main menu, holding Ctrl while selecting your desired search result with your mouse or while pressing enter will -close the search results. - -
- -### The Save Dialog - -![Illustration 10: Save dialog](../manual_xt/images/Pictures/store_dialog.png) - -Clicking the **Save** button of the patch browser opens the save dialog. -This is where you name your new patch and choose which category it -should belong in. You can also create a new category manually here as -well. The patches you save will end up in the user section at the bottom -of the patch menu. The save dialog also provides text fields for the name of the patch creator, -license, and comments. - -Note: You can display the comments of a particular patch by hovering over the patch name area with your mouse. - -Holding down the **Shift** key when saving a patch will automatically overwrite an existing patch, which -bypasses the dialog asking you for an overwrite confirmation. - -
- -### Favoriting Patches - -Adding a patch to your favorites list is as easy as pressing the heart icon to the right of the patch name area. -Right-clicking on that same icon will allow you to access the favorite patches list. - -
- -## Status Area - -![Illustration 11: Status area](../manual_xt/images/Pictures/status.png) - -This area is meant to be a quick access to some of Surge XT's features that are also present in the Menu. -(see [Main Menu](#main-menu)) - -The **MPE** and **Tune** buttons are for quickly enabling/disabling those features in the current Surge XT instance. -Right-clicking on one of these buttons will reveal more options which are also present in sub-menus under the Menu button as well. -Left-clicking the Tune button while Surge XT is in its default tuning will also simply open the menu. See [Microtuning](#microtuning) for more information. - -
- -## FX Bypass, Character, Global Volume - -![Illustration 12: FX bypass, character and global volume](../manual_xt/images/Pictures/fx_bypass.png) - -**FX Bypass** lets you quickly hear what a patch sounds like without the effect-units. (see [Effects](#effects)) - - - **Off** – Bypass is disabled, all effects are active. - - **Send** – The send effects are bypassed. - - **Send + Global** - The send and global effects are bypassed. - - **All** – All effects are bypassed. - -**Character** controls the amount of high-frequency content present in -most of Surge XT's oscillator algorithms. Available choices are Warm, Neutral -and Bright. - -**Global Volume** controls the last gain stage before the output. - You can choose to hard clip the global output either at **+18 dBFS** (default) or **0 dBFS** - by right-clicking on it. - -### Level Meter - -The level meter above the global volume shows the output level, and will become red if it goes -above 0 dBFS. If you right-click on the level meter, you will find options to open the [oscilloscope](#oscilloscope), -and also to display CPU usage. - -
- -# Scene Controls - -The UI of the scene section can also be further divided into two parts: - - - Sound generation - - Sound shaping - -The sound is generated and mixed in the sound generation section. After that, it -goes through the sound shaping section. - -![Illustration 13: Scene controls](../manual_xt/images/Pictures/scene_sections.png) - -
- -## Sound Generation - -This is where the sound is born. The oscillators generate waveforms -according to the notes played. They are then summed up in the mixer. - -![Illustration 14: Sound generation](../manual_xt/images/Pictures/sound_generation.png) - -
- -### Oscillators - -**1/2/3-buttons** – Chooses the active oscillator for editing. You can right-click on one of them -and a context menu with the name, **Copy** and **Copy (with modulation)** options will show up. - -**Display** – Shows the active waveform. When the **Wavetable** or **Window** oscillator -is used, it will also work as wavetable selector by clicking on the orange bar or on the straight arrow buttons -to cycle through them. When the selected oscillator in the display is muted, the waveform will be semi-transparent. - -**Type** – Oscillator type. Chooses which algorithm is used for the -oscillator. Available options are: -- Classic -- Modern -- Wavetable -- Window -- Sine -- FM2 -- FM3 -- String -- Twist -- Alias -- S&H Noise -- Audio Input. - -See [Oscillators](#oscillator-algorithms) in the Technical Reference section for more information. - -**Pitch & Octave** – Controls the pitch for this particular oscillator. -Its context menu can be used to extend its range, or to set the pitch to **Absolute** mode, which makes the pitch shift -in absolute frequency as opposed to relative to the note that is being played. - -**Keytrack** – When disabled, the oscillator will play the same pitch -regardless of the key pressed. This button can be right-clicked to toggle its state across all -oscillators in the scene. - -**Retrigger** – If active, the oscillator and all its unison voices will always start immediately -at the same phase position. This is useful for snappy sounds where you want the -attack to sound exactly the same each note. This button can be right-clicked to set its state across all -oscillators in the scene. - -**Other** - The rest of the sliders from the oscillator editor are specific to each -oscillator type. See [Oscillators](#oscillator-algorithms) in the -Technical Reference section for more information. - -
- -### Mixer - -#### Mixer Channels - -Excluding the **Pre-filter Gain** (slider on the right), the Mixer has 6 channels (sources) from left to right: - - - **Oscillators 1, 2, 3** - - - **Ring Modulation of 1x2, 2x3** – The source of these two channels is **digital ring modulation** from the oscillators. - This type of RM is a bit different from the traditional carrier-modulator style ring modulation. - Digital ring modulation is simply the result of multiplying the output of oscillators 1 and 2, - or 2 and 3. - - **Noise Oscillator** - -#### Channel Parameters - -Each channel has the following controls: - - - **M** – Mute. You can of course have multiple channels muted at the same time, but you can also keep only the channel - you mute muted by holding down **Ctrl / Cmd** and clicking on the desired mute switch. - - - **S** – Solo (only play channels that have solo active). You can have multiple channels in solo at the same time, or - only one at a time by holding down **Ctrl / Cmd** and clicking on the desired solo switch. - - - **Triple Orange Box** (Filter routing) – Chooses which filter the channel is routed to. - The left position routes the channel output to filter 1, the right position - routes it to filter 2, while the middle position, which is selected - by default, routes it to both. - However, this setting will only route the channel output to filter - 1 if a **serial** filter block configuration is used, since the - audio will then go through the second one in the filter block anyways. - If any other configuration than serial is used, the audio will then - be routed to both filters, as expected. - - - **Slider** – Gain control for each input. - -### Other Sound Generation Parameters - -**Pitch & Octave** – Controls the pitch for the entire scene. Affects -the filter key-tracking and the keytrack modulation source as well. The -range of the slider can be extended using the context menu. - -**Portamento** – Portamento is when a new note will slide in -pitch from the pitch of the last played note. This setting determines how -long the slide will be. A setting of 0 disables Portamento. This parameter can be -tempo-synced. - -Portamento has some interesting options accessible in its context menu: -- **Constant rate** - If this option is enabled, the time to cover **one octave** is -defined by the Portamento slider value. From there on, gliding between 2 octaves -for instance will take twice as long, and so on. -By default, this option is disabled, so the **glide rate** -is proportional to the distance between the two keys, making it so that it -always takes the same time to glide between **any two keys**. -- **Glissando** - If this option is enabled, the pitch slide will be quantized -to the scale degrees. -- **Retrigger at scale degrees** - If this option is enabled, the FEG and AEG -(see [Envelope Generators](#envelope-generators)) will be triggered each time the portamento -slide crosses a scale degree. -- **Curve options** - You can choose between a **Logarithmic**, **Linear** or **Exponential** -portamento curve. By default, the portamento slide follows a linear curve. - -**Osc Drift** – Applies a small amount of instability to the pitch of -all oscillators, making them subtly detuned. Although the parameter is -shared, the randomness of the instability effect is independent for all -oscillators and all the unison voices of each oscillator. By right-clicking -on this control, you can choose to also randomize the pitch at the very start of -the note by enabling the **Randomize initial drift phase** option. - -**Noise Color** – Affects the frequency spectrum of the noise -generator. The middle position results in white noise. Moving the slider -to the left emphasizes low frequencies while moving it to the right emphasizes high frequencies. - -**Bend Depth** – Pitch Bend Depth Up/Down. Controls the range of the -pitch bend wheel, in semitones. - -This control can be extended with the dedicated option in its context menu. It enables -type-ins of fractions and cents for configuring microtonal pitch-bends of arbitrary size within the range -of 24 semitones. - -**Play Mode** – Chooses how multiple notes are handled. Poly will allow -multiple notes to be played simultaneously, while Mono will only let the last note -play. Latch will continuously play the last played note (mono). - -Mono has two possible modifiers: - - - **Single Trigger EG (ST)** means that the two envelope generators are - not restarted when sliding between two notes (two notes that overlap - in time) - - **Fingered Portamento (FP)** means that portamento is only applied when - sliding between notes and not when there is time between the played - notes. - -When **Play Mode** is set to one of the Poly modes, the context menu of that button list will display -additional options related to the voice allocation for a key: -- **Stack Multiple** - Selected by default. Surge XT will play the replayed note on a new voice, in a cyclic manner -known as round-robin. -- **Reuse Single** - Selecting this option will make Surge XT allocate the replayed note to the same voice with which -that note was previously played. - -
- -When **Play Mode** is set to one of the Mono modes, the context menu of that button list will display -additional options related to mono notes: - -- **Note Priority** - - **Last note priority** - Will play the latest note when multiple notes are played together - - **High note priority** - Will play the highest note when multiple notes are played together - - **Low note priority** - Will play the lowest note when multiple notes are played together - - **Legacy note priority** - When multiple notes are played together, it will play the latest note once hit and play - the highest remaining note once released. - -- **Envelope Retrigger Behavior** - - **Reset to zero** - Selected by default. The envelopes will immediately reset to the beginning of the attack stage - when pressing a note. - - **Continue from current level** - Selecting this option will make the envelopes start at the level they were left - off from the previous note. - -- **Sustain pedal in mono mode** - - **Sustain pedal holds all notes (no note off retrigger)** - If sustain is engaged and multiple notes are hit then - held one after the other, Surge XT will stay on the latest note when releasing that note instead of switching to the - previous note. - - **Sustain pedal allows note off retrigger** - If sustain is engaged and multiple notes are hit then held one after - the other, Surge XT will switch to the previous note when the latest note is released. - -
- -## Sound Shaping - -![Illustration 15: Sound shaping](../manual_xt/images/Pictures/sound_shaping.png) - -
- -### Filter Controls - -**Filter Block Configuration** – Chooses how the filters, waveshaper and -the gain stage are connected together. Note that only the Stereo and Wide configurations -will output a stereo signal. - -- **Serial 1** - The signal from the Mixer goes into Filter 1, then into the Waveshaper, then into Filter 2, then the -Amplifier which contains the Amplifier Envelope Generator (AEG), before going through the Scene Highpass and to the final -Scene Output section. - -- **Serial 2** - The signal path is the same as with **Serial 1**, with the addition of a feedback path going from the -output of the Amplifier back into Filter 1. - -- **Serial 3** - The signal path is the same as with **Serial 2**, but Filter 2 is in the feedback loop, which is after -the signal is being tapped from the Amplifier instead of before. - -- **Dual 1** - The signal from the Mixer is sent to both Filter 1 and Filter 2 in parallel. The outputs from both filters are -then summed, then sent to the Waveshaper, then into the Amplifier, and finally in the Scene Highpass before the Scene Output section. -Feedback is again tapped at the output of the Amplifier and goes back into both filters (it is summed with the output from the Mixer). - -- **Dual 2** - The signal path is the same as with **Dual 1**, except that the Waveshaper is only applied to Filter 1 -before its output is summed with the output from Filter 2. - -- **Stereo** - The signal path is the same as with **Dual 1**, except that Filter 1 is always on the left channel and -Filter 2 is always on the right channel. - -- **Ring** - The signal path is the same as with **Dual 1**, except that the outputs from Filter 1 and 2 are multiplied -(ring modulated) together instead of being summed before continuing onwards to the Waveshaper. - -- **Wide** - The signal path is the same as with **Serial 2**, except it is being doubled for a full stereo signal path. - -**Feedback** – Controls the amount (and polarity) of output that's fed -back into the input of the filter block. It has no effect when using filter -block configurations without a feedback path. - -Note: -Be careful with your monitoring volume when using feedback. It's easy to -make really loud high-pitched noises by mistake if you're not familiar -with how the synth reacts to feedback. - -Don't let this scare you though. There's a lot to be gained from proper -and creative use of feedback. Changing the character of filters, making -filters interact together, making basic physical models, making sounds -that are just about to break apart. It is these things that make -Surge XT truly special. - -**Filter Balance** – Controls how the two filters are mixed. The -behavior depends on the filter block configuration. - -**Type** – Selects the type of the filter. There are [numerous types available](#filters). -You can disable the filter in question here by unchecking the **Enabled** option below the different -filter type categories. - -**Subtype** – Selects variations of each filter type. The difference can -vary from subtle to radical depending on how the filter is used. See -[Filters](#filters) in the Technical Reference section -for information regarding subtypes of each filter type. It is displayed -as a number next to the filter type (when available). - -**Cutoff** – Controls the cutoff frequency of the filter. When tweaked, while its tooltip -will show frequency in Hz, it will also show its approximate MIDI note value, -very useful when using the filter for melodic and tuning purposes. -You can also right-click on this control and choose the option -**Reset cutoff to keytrack root** which makes it very easy to tune filters -when using filter keytracking. Finally, the **Apply SCL/KBM tuning to filter cutoff** -option can be accessed when the **Apply tuning after modulation** option is enabled in the Tuning menu. -See the [microtuning](#microtuning) section for more information. - -**Resonance** – Controls the amount of resonance of the filter. - -**Filter Analysis** – To open the Filter Analysis window, simply click on the small button above the filter -balance control. It will display the current filter response according to the current type, subtype, cutoff and -resonance settings. You can switch to the other filter by using the corresponding buttons. You can also drag on the -display horizontally to change the displayed filter's cutoff frequency, and drag vertically to change its resonance. - -![Illustration 16: Filter Analysis](../manual_xt/images/Pictures/filter_analysis.png) - -**Filter 2 Offset Button** (small "+" button to the right of the filter parameters) – When active, -the cutoff frequency will be set relative to filter 1. -This includes any modulations (including the hardwired FEG depth & -keytracking). Filter 2's cutoff frequency slider **becomes an offset** setting relative -to filter 1's cutoff frequency. - -**Resonance Link Button** (small button, filter 2 only) – Makes the slider -follow filter 1's resonance slider setting. - -**Keytrack \> F1/F2** – Controls how much the pitch of a note affects the -cutoff frequency of the filter. A setting of 100% means the filter -frequency will follow the pitch harmonically. - -
- -### Envelope Generators - -There are two envelope generators connected to the filter block. - -![Illustration 17: Envelope generators](../manual_xt/images/Pictures/EGs.png) - -On the left is the Filter Envelope Generator (Filter EG). -It is hardwired to the two filters, whose depth is set by the **\>F1** and **\>F2** sliders. - -On the right is the Amplifier Envelope Generator (Amp EG). This one is hardwired to the gain -stage of the filter block. - -![Illustration 18: ADSR envelope structure](../manual_xt/images/Pictures/illu10.png) - -*The ADSR envelope structure* - -The envelope generators are of the 4-stage ADSR type. This is the most -common form of EG used in synthesizers and it is named after its four -stages **Attack**, **Decay**, **Sustain** and **Release**. If you're new -to synthesizer programming the illustration should give you a good idea -how they work. The thing you need to remember is that after going -through the attack & decay stages the envelope will stick in the sustain -stage until the key is released. - -**Attack**, **Decay** and **Release** are time-based parameters and can be tempo-synced by right-clicking on one of -those sliders. You will also find an option to tempo-sync those three controls at once for each envelope generator. - -Above the envelope stage controls is a graphic representation of the -ADSR structure. - -If the envelope mode is set to **Digital**, there will be small adjustable orange fields -on the graphic. Dragging them horizontally allows you to choose the curvature of the different stages of the envelope. - -![Illustration 19: ASDR envelope fields](../manual_xt/images/Pictures/EGs_orange_fields.png) - -If the envelope mode is set to **Analog**, the curvature of the different stages -will automatically be set to a shape that tries to emulate analog behavior. - -
- -### Waveshaper - -The waveshaper module now features 43 waveforms and is an integral part of Surge's audio path. - -![Illustration 20: Waveshaper](../manual_xt/images/Pictures/waveshaper.png) - -**Waveshaper selector** - Menu allowing you to change the type of the non-linear wave-shaping. -Alternatively, you can also use the arrow buttons, left-click and drag, or scroll with the mouse wheel -over the waveshaper display to cycle through the different shapes. - -**Waveshaper drive** – The vertical slider to the right of the waveshaper display. Sets the drive amount -of the waveshaper. This control can be extended. - -**Waveshaper Analysis window** - This panel can be opened by clicking on the small icon at the -bottom of the waveshaper module. It allows you to visually preview the output of the waveshaper -at different input levels, which can be controlled with the waveshaper's **Drive** control. - -![Illustration 21: Waveshaper analysis](../manual_xt/images/Pictures/waveshaper_analysis.png) - -
- -### Other Sound Shaping Parameters - -**Keytrack root note** – Sets the root key of the filter keytracking and the -keytrack modulation source. At the root key, the keytrack modulation -source will have the value zero. Above/below it it will have -positive/negative modulation depending on the distance to the root key -in octaves. This parameter does not affect the oscillator pitch. - -**Keytrack amount sliders** - Sets the amount of filter keytracking applied to -each filter. - -**HP** – Controls the scene high-pass filter (scene parameter). This parameter can be disabled, which will remove it -from the audio path. You also have a choice for filter slope between **12**, **24**, **36**, **48** dB/Octave. - -**FM configuration** – Chooses how oscillator FM (frequency modulation) is -routed. - -**FM depth** – Sets the depth of the oscillator FM. - -**Amp Vel.** - Controls how the **Amp Gain** scales with velocity. This -is neutral at the maximum position. Other settings provide attenuation -at lower velocities, thus this setting will never increase the **Amp -Gain** parameter by velocity. - -**Amp Gain** – Controls the gain element inside the filter block. - -
- -### Scene Output - -The output stage is located after the filter block in the audio-path. As -it's outside the filter block-structure changing the gain here doesn't -have any affect on the timbre of the voice (unlike the previous -gain-control which may affect how the feedback and wave-shaping acts), -but it can still change the timbre of the effect section if non-linear -effects (like distortion) are used. - -**Volume** – Scene volume control. You can choose to hard clip the scene output at **+18 dBFS** (default), -**0 dBFS** , or to **disable hard clipping** by right-clicking this control and choosing the desired option. - -**Pan** – Pan/balance control - -**Width** – The amount of stereo spread (only present for the **Stereo** and -**Wide** filter block configurations) - -**Send FX 1/2 or 3/4 Level** – Send levels to send slot 1 to 4 (scene parameters). -To display the send 3/4 levels, simply select one of those send FX units in the unit selector -(see [Effect Unit Selector](#effect-unit-selector)). - -
- -# Modulation/Routing - -The modulation section is different from the sound generation -and shaping sections as no audio data is passed through it. Instead it -allows you to control the parameters in the other sections from various -sources. - -![Illustration 22: Modulation and routing](../manual_xt/images/Pictures/modulation_routing.png) - -## Routing - -Modulation routing in Surge XT is a bit different compared to most synthesizers, -but it's actually very intuitive and extremely powerful, thanks to the routing bar. - -![Illustration 23: Routing section](../manual_xt/images/Pictures/routingbar.png) - -### How To Apply Modulation - -Here's how it works: - -1. Select the modulation source you want to use. - - ![Illustration 24: Modulation source](../manual_xt/images/Pictures/routing_1.png) - -2. Engage routing mode with a second click on the source. It will become bright green, -and sliders that can be modulated with that source will display a blue modulation depth slider on top of their -normal sliders. - - ![Illustration 25: Engage routing mode](../manual_xt/images/Pictures/routing_2.png) - -3. Drag the desired modulation slider (blue slider) to the position you want the parameter to be at -when fully modulated (at the top peak of a Sine LFO, or after the attack stage of an envelope for example). -The modulation's full range will then be shown with the corresponding range bar indicator on the slider. - - ![Illustration 26: Modulation slider](../manual_xt/images/Pictures/routing_3.png) - -4. Disengage routing mode by clicking again on the modulation source. - - ![Illustration 27: Disengage routing mode](../manual_xt/images/Pictures/routing_1.png) - -Alternatively, routing mode can also be engaged or disengaged by pressing the **middle** mouse buttons anywhere over -the interface, or by pressing **TAB** on the keyboard if this option is enabled (see [Workflow section](#workflow) -in the menu). - -You can also directly access the numerical modulation amount dialog (explained [here](#edit-value)) -by dragging the desired modulation source over a modulatable parameter. - -Note that modulation range is always **relative** to the base value represented by the gray slider, -meaning that moving its position will then shift the whole modulation range up or down. -This also means that if a modulation slider's value is smaller than the base value, -the modulation polarity will be inverted. - -Also, when applying modulation to certain time-based parameters (such as Portamento, envelope attack, etc.) that are -set to 0.00 seconds, in some cases, the modulation won't trigger properly due to the way it works internally. -To fix this, simply increase the parameter in question by a very small amount, just so it doesn't have a value -of 0. - -
- -### Modulating a Modulator - -When clicking on one of the LFO buttons in the routing bar, both the LFO source -selection and the LFO editor will be selected. However, the two actions can be separated, as you can choose which button -is selected as the modulation routing source, and at the same time edit parameters from **a different LFO** than the source. - -To do that, select the source normally, and then click -on the mini-button on another LFO (the small orange arrow): - -![Illustration 28: Modulation section](../manual_xt/images/Pictures/modulationsourceselectionbar.png) - -Alternatively, you can also left-click on a modulation source while holding **Ctrl / Cmd** to display it -in the LFO editor as well. - -This effectively lets you **modulate the parameters of one LFO with any other mod source(s)**. -However, as an example, note that logistically, an S-LFO can modulate parameters of an LFO, but -an LFO **cannot** modulate parameters of an S-LFO -(see [Voice vs Scene Modulators](#voice-vs-scene-modulators)). - -Remember that you can also see which LFO is currently being displayed in the editor by looking at what's written -vertically to the left of the editor. - -
- -### Modulated Sliders - -Once a slider is routed to a modulation source, the shade of blue on its tray indicates -whether the parameter is modulated and by which source. - -![Illustration 29: Modulation sliders](../manual_xt/images/Pictures/illu7.png) - -1) Parameter is not modulated (gray) - -2) Parameter is modulated (gray-blue) - -3) Parameter is modulated by the currently selected modulation source (bright-blue) - -Moreover, if you hover your mouse pointer over any modulated slider, the source(s) it's being modulated -from will be highlighted in the routing bar. This makes it easier to see what modulation source(s) are -linked to a parameter. - -
- -### Modulation Source Selectors - -Once routed to any parameter, the modulation source selectors change their appearance depending if they are selected, -and if they are routed in the current patch or not. (scene dependent) - -![Illustration 30: Modulation source appearance](../manual_xt/images/Pictures/mod_source_buttons.png) - -1) Unused modulation source - -2) Used modulation source - -3) Unused selected modulation source - -4) Used selected modulation source - -Some modulation source selectors in the routing bar have a hamburger menu. This serves as an indicator that -different types of that modulation source are available. You can access them directly by clicking on that -hamburger menu, by right-clicking and going into the **Switch to...** submenu, or simply by scrolling with -the mouse wheel over the modulation source selector in question. - -![Illustration 31: Modulation source hamburger menu](../manual_xt/images/Pictures/hamburger_menu_modsource.png) - -
- -### Clearing Modulation - -After right-clicking on a modulated slider, you will see an option to easily clear the modulation and un-link it from its source. - -![Illustration 32: Clearing modulation](../manual_xt/images/Pictures/clear_modulation.png) - -Alternatively, you can also reset its modulation slider (blue slider) to 0 by double-clicking on it -when routing mode is engaged, or entering 0 in the type-in editor (see [Edit Value](#edit-value)). - -Furthermore, by right-clicking on any modulation source, there will be options to clear a particular linked parameter, -but also all of them at once. - -![Illustration 33: Modulation context menu](../manual_xt/images/Pictures/modsource_context_menu.png) - -
- -## Modulation List - -Surge XT has a detailed modulation list that can be displayed by clicking on the vertical rectangular button at the left of the routing bar: - -![Illustration 34: Modulation list window](../manual_xt/images/Pictures/modlist.png) - -This panel will display the modulation routings and their amounts from both scenes in the current patch. -Different display options are available to the left of its interface: - -**Sort by** - Allows you to choose whether the list of modulations is grouped according to the source they are -coming from or to the target they are routed to. - -**Filter By...** - This option allows you to only display certain modulation routings by hiding those that -aren't included in the desired source or target in this list. - -**Add Modulation** - These two menus allow you to directly add a new modulation routing directly from the -modulation list panel. Simply select a modulation source and a modulation target to link a modulator to a -parameter. - -**Value Display** - Allows you to choose between 4 different display options regarding the modulation values -displayed in the sliders section, ranging from **None** to **Values, Depths and Ranges**. - -Finally, in the sliders section, you can both adjust the different modulation amounts, but also directly -**mute** or **remove** a modulation routing entirely. - -
- -## Modulators - -Surge XT has four main types of modulation sources : - - - LFOs - - Internal modulators - - Voice and note properties - - Macros - -All of these modulation sources are located in the routing bar (see [Routing](#routing)) : - -![Illustration 35: Routing bar](../manual_xt/images/Pictures/routingbar.png) - -![Illustration 36: Routing bar sections](../manual_xt/images/Pictures/routingbar_sections.png) - -*The four types of modulation sources, separated in categories.* - -
- -### Voice vs Scene Modulators - -Some modulation sources operate at the voice level, while others operate at the scene level. -Although they might seem similar, there is an important factor that distinguishes them. - -One one hand, a voice modulator has separate modulation paths *for each voice*, meaning it can -control voice-level parameters (like filter cutoff) but cannot control scene level parameters (like FX levels or scene pitch). - -On the other hand, a scene modulator has one identical modulation path *for the whole scene*, so it can control both scene -level parameters **and** voice level parameters. - -![Illustration 37: Modulation source labels](../manual_xt/images/Pictures/modsource_labels.png) - -*On top, three voice LFOs. On the bottom, three Scene LFOs, "S-" meaning Scene.* - -To demonstrate this distinction, let's say an sine wave LFO is modulating the cutoff of a filter. -Now, if 3 notes are being hit with a small delay between each of them, the phase of the LFO will -be delayed between the notes accordingly. - -You will indeed clearly hear the cutoff of the filter moving independently for each note, which gives the impression -that there are three LFOs and three filters (which there actually is!). The same principle applies for envelopes. - -However, unlike the first demonstration, this time, if an S-LFO is modulating a certain parameter, -hitting more notes will not "add" an LFO for each voice, which gives the impression that there is a single LFO -modulating the cutoff frequency of the filter instead of many. - -See [Modulation Routing Details](#modulation-routing-details) in the Technical Reference section for more information. - -
- -### LFOs - -Compared to some other synthesizers, Surge XT does not have dedicated **LFO**, **Envelope**, **Step sequencer** or -**MSEG** modulation sources. Instead, those are integrated within every LFO. This effectively enables the -flexibility of having up to 12 LFOs, envelopes, step sequencers or MSEGs, and everything in between simply by -changing their shape. - -Surge XT's LFOs are very flexible and come with a built in DAHDSR-envelope which can -either work as a dedicated envelope generator or shape the amplitude of other modulation types over time. - -![Illustration 38: LFO editor](../manual_xt/images/Pictures/lfo_editor.png) - -Surge XT has a total of 12 LFOs: - - - 6 Voice LFO sources (labeled LFO 1-6 for instance) - - 6 Scene LFO sources (labeled S-LFO 1-6 for instance) - -See [Voice vs. Scene](#voice-vs-scene-modulators) for an explanation about the difference LFOs and S-LFOs. - -#### Shapes - -![Illustration 39: LFO shape selector](../manual_xt/images/Pictures/lfo_shapes.png) - -LFO shapes (from left to right, top to bottom): - -| | | | -|-|-|-| -| Sine | Sine wave LFO | Vertical bend | -| Triangle | Triangle wave LFO | Vertical bend | -| Square | Pulse wave LFO | Pulse width | -| Sawtooth | Sawtooth wave LFO | Vertical bend | -| Noise | Smooth noise LFO | Correlation | -| S&H | Sample & Hold (stepped noise) LFO | Correlation | -| Envelope | Envelope generator - sets the LFO to a constant output of 1, which can then be shaped by the LFO EG (see [LFO Envelope Generator](#lfo-envelope-generator))| Envelope shape | -| Step Seq | 16 step step-sequencer (see [Step Sequencer](#step-sequencer)).| Smoothness/Spikyness | -| MSEG | Fully editable MSEG (Multi-Segment Envelope Generator) with a large number of curve types and various editing options (see [Envelope Generator](#envelope-generators))| Depends on segment type and configuration | -| Formula | Script (Lua) enabled formula modulator | Depends on the coded modulation | - -*On the left, the different shapes and their explanation. On the right, the way that the* ***Deform*** *parameter affects the waveform.* - -Depending on the selected shape for a particular LFO, its name in the routing bar will change. -When using the first 6 waveforms, it will be called **LFO**. However, when using the envelope shape, **ENV** -will be displayed, **SEQ** will be displayed when the step-sequencer is used, and for the MSEG, **MSEG** -will be displayed. Scene LFOs have their equivalent labels as well: - -![Illustration 40: Modulation source labels](../manual_xt/images/Pictures/modsource_labels.png) - -
- -#### Parameters - -![Illustration 41: LFO parameters](../manual_xt/images/Pictures/lfo_editor.png) - -**Rate** – Controls the modulation rate. When the type is set to -Step Seq, one step equals the whole cycle. This slider can be tempo-synced -and disabled from its context menu. -Deactivating the rate effectively freezes the LFO to a certain constant value depending on the -Phase/Shuffle parameter. -This can be useful for manually scrubbing in a waveform cycle of an LFO for instance, and can also be used in -the same way in the sequencer. This feature can also be used to make the modulation source act as a -**randomizer** in tandem with the "Random" trigger mode. A simpler Random (see [Internal Modulators](#internal-modulators)) -modulation source can however also be used for that purpose. -Furthermore, modulation can even be applied to the Phase/Shuffle parameter with another modulation source -which opens up a lot of possibilities, such as effectively using the frozen LFO as a mod mapper. - -Note: In the LFO editor, when right-clicking parameters that can be tempo-synced, there will also be an option to Tempo sync all the LFO parameters at once. - -**Phase/Shuffle** - Controls the starting phase of the modulation waveform. As with any parameter, -it can be modulated. However, in this case, its modulated value will not change after the modulation is triggered -(for instance, it's not possible to shift an LFO's phase while a note is pressed). -Only starting phase is taken into account. This control can also be extended, allowing for bipolar shuffle, -useful for adding swing in the step sequencer. - -**Amplitude** – Controls the amplitude of the modulation. This is the parameter -you should use if you want to control the depth of an LFO with a -controller (like controlling vibrato depth with the modulation wheel, for instance). This control can also be -extended form its context menu, which allows you to reach a negative amplitude range (-100 to 100% instead of 0 to 100%). - -**Deform** – Deform the modulation shape in various ways. The effect varies depending on the selected shape. -Different deform types are available for the **Sine**, **Triangle**, **Sawtooth**, **S&H**, **Envelope** and -**Step Seq** shapes, and can be accessed by right-clicking on the **Deform** slider. - -**Trigger mode** – Chooses how the LFO is triggered when a new note is played: - -- **Freerun** – The LFO's starting phase is synchronized with the host's song position to make it continuously running in the background. The modulation will be trigged at its starting phase when playback position is either at the beginning position and the song starts playing, or when playback position goes back at the beginning of a loop -for instance. Freerun behaves the same on voice LFOs or scene LFOs. -- **Keytrigger** – The LFO's starting phase is triggered when a new note is pressed. -If the synth is set to "Poly", each new voice gets its own LFO triggered with it when using a voice LFO. -However, when using an scene LFO, the first voice sets the LFO's position, then the other ones will follow it. -- **Random** – The LFO's starting phase is set to a random point in its cycle. If the synth is set to "Poly", -each new voice gets its own LFO triggered with it when using an voice LFO. -However, when using an scene LFO, the first voice sets the LFO's position, then the other ones will follow it. - -**Unipolar** - If active, the modulation will be in the \[0 .. 1\] -range (unipolar). If not, it will be in the \[-1 .. 1\] range (bipolar). - -The modulation range on a parameter is represented by a green bar when routing -mode is engaged (see [Routing](#routing)). - -![Illustration 42: Modulation from a bipolar source](../manual_xt/images/Pictures/routing_3.png) - -*Modulation on a control from a bipolar source* - -![Illustration 43: Modulation from a unipolar source](../manual_xt/images/Pictures/routing_3_unipolar.png) - -*Modulation on a control from a unipolar source* - -
- -#### LFO Envelope Generator - -The Envelope Generators are of the 6-stage DAHDSR type that are -multiplied with the waveform generator, no matter what the selected LFO shape is. -This means that if the LFO shape is set to Envelope, the output will simply be 100%, -and can then be shaped by the LFO EG. - -Also, note that when using the Envelope shape, the envelope will always trigger on key trigger, -no matter what the trigger mode is set to. - -The LFO envelope generator can be completely disabled by right-clicking on one of its controls and unchecking -the **Enabled** option. - -![Illustration 44: LFO envelope generator](../manual_xt/images/Pictures/lfo_eg.png) - -![Illustration 45: 6-stage DAHDSR envelope](../manual_xt/images/Pictures/illu12.png) - -*6-stage DAHDSR envelope* - -
- -#### Step Sequencer - -The **Step Seq** shape houses a step sequencing editor where the LFO display would be. It allows you to draw -the output waveform with up to 16 steps. - -![Illustration 46: Step sequencer editor](../manual_xt/images/Pictures/stepseq.png) - -*Step Sequencer editor* - -The two blue markers define loop-points in which the -sequence will repeat once it gets into the loop. The left mouse button is -used for drawing while the right one can be used to clear the values to -zero. - -To quickly reset a step to 0, either double-click on a step, or hold down Ctrl/Cmd and click or drag with the mouse over -the desired step(s). - -Right-clicking and dragging over steps allows you to draw a straight line over the desired steps, -thus creating a perfectly linear staircase pattern. - -Holding down **Shift** while drawing will quantize the values to -the scale degrees (1/12th in case of standard tuning, or possibly other -for custom tuning) spanning the range of **one octave**. -Furthermore, holding down **Shift + Alt** makes two times more values available, hence -useful when modulating pitch by **two octaves** instead. - -For more information on microtonal pitch modulation using the step sequencer, visit our -[Tuning Guide](../tuning_guide/#Surge-XT-Microtonal-Step-Sequencing) -on Surge's wiki. - -The step sequencers inside **voice LFOs** have an extra lane at the top of the -step editor allowing to re-trigger the two regular voice envelopes -(The Amplifier and Filter Envelope Generators) when the small -rectangle is filled at that particular step. - -![Illustration 47: Envelope retrigger pane of LFO 1](../manual_xt/images/Pictures/illu14.png) - -*Step Seq of LFO 1 containing the re-trigger pane* - -However, shift-clicking or right-clicking those rectangles allows the specified step in the sequencer to **only -trigger one of the two envelopes**. When the step is half-filled on the left, -only the filter envelope will be triggered. When filled on the right, only the amplifier envelope will be triggered. - -![Illustration 48: Trigger lanes](../manual_xt/images/Pictures/triggerlanes.png) - -The **Deform** parameter gives the **Step Seq** waveform a lot of flexibility. A value of -0% will output the steps just as they look on the editor. Negative -values will give an increasingly spiky waveform while positive values -will make the output smoother. - -| | | -|-|-| -| **Negative deform** | ![Illustration 49: Negative deform](../manual_xt/images/Pictures/stepseq_deform1.png) | -| **Positive deform** | ![Illustration 50: Positive deform](../manual_xt/images/Pictures/stepseq_deform2.png) | - -![Illustration 51: Effect of the deform parameter on the step sequencer waveform](../manual_xt/images/Pictures/illu15.png) - -*Effect of the deform parameter on the step Seq waveform* - -
- -#### Multi-Segment Envelope Generator - -Surge XT's Multi-Segment Envelope Generator (MSEG) is powerful and fully editable with a large number of curve types -and various editing options. It can be used to create more complicated LFO waveforms or envelopes -compared to the previously mentioned modulation shapes. -With the combination of various settings in the editing window and the usual parameters from the LFO editor, -you can practically create any modulation shape you could think of. - -![Illustration 52: Multi-segment envelope generator](../manual_xt/images/Pictures/mseg.png) - -To open this MSEG editing window, you can either click on the little pencil button next to the wave display (1), -click on the wave display itself (2), or double-click on the MSEG icon in the modulation type selector (3): - -![Illustration 53: Opening multi-segment envelope generator](../manual_xt/images/Pictures/open_mseg.png) - -**Default MSEG state** - -Once opened, you will see a shape working as an envelope if you're using a voice LFO, or a triangle wave -working as an LFO if you're using a scene LFO. In any case, you can either build upon these -shapes if they suit your needs, or you can reset them to a simple straight line by right-clicking anywhere -in the edit window, then choosing **Create -> Minimal MSEG**. More information on those menu entries can be -found below. - -![Illustration 54: Default multi-segment envelope generator state](../manual_xt/images/Pictures/default_mseg.png) - -**Zooming and panning** - -In the MSEG editor, you can pan the view left or right by either left-clicking or middle-clicking, -then drag on the background left or right. - -You can also zoom in and out by either scrolling with the mouse wheel or left-clicking -then dragging your mouse up or down. Alternatively, you can again middle-click and drag if you prefer. - -**Moving nodes** - -To move a node, simply left-click and drag it. To do the same with multiple nodes at the same time, you can -Shift+left-click and drag, which makes a selection. - -**Adding and removing nodes** - -In Surge XT's MSEG, a segment is comprised of its starting node (point) and the segment itself. A "segment's end node" -is actually the next segment's starting node. To add a new node, simply double-click where you want it to -be added. To remove a node and its following segment, simply double-click on the node you want to remove. -Note that you can only remove nodes if there are more than two nodes remaining in the shape. - -**Control points** - -In addition, you will also often find a **control point** in the middle of a segment. This one can be dragged -vertically (and also sometimes horizontally) to alter the segment's curvature or other properties depending -on the line type. To reset a control point to its default position, simply double-click on it. - -**MSEG editing and behavior options** - -At the bottom of the editor are a couple of options to configure editing modes and general behavior of the MSEG: - -- **Movement Mode** - Sets the behavior when moving nodes. - - **Single** - When dragging a node horizontally, moves a single node without affecting the others. - - **Shift** - When dragging a node horizontally, shifts around the nodes following the node being moved, keeping the length of the segment belonging to that node constant. - - **Draw** - Locks horizontal dragging of nodes, allowing you to draw over existing nodes to set their value in a - simple sweeping motion. - -- **Edit Mode** - Configures the MSEG editor to work in Envelope or LFO mode. - - **Envelope** - Displays draggable loop points and region (effectively representing the Sustain stage in an envelope). - - **LFO** - Hides the draggable loop points and region, links the value of the start and end nodes to complete the - waveform cycle, always keep loop mode enabled (even if set to off). - -- **Loop Mode** - - **Off** - Don't loop when in Envelope mode, turn off draggable loop points. - - **On** - Loop forever in the loop region (between the loop points). Subsequent segments, if any, - will never be reached. - - **Gate** - Loop until the note is released, then immediately transition to the segments following the loop region. - -- **Snap To Grid** - - **Horizontal** - Enables horizontal snapping to the grid. The number field to the right corresponds to the - horizontal grid resolution. You can also temporarily enable horizontal snapping by holding down the Ctrl/Cmd key - while dragging. - - **Vertical** - Enables vertical snapping to the grid. The number field to the right corresponds to the - vertical grid resolution. You can also temporarily enable vertical snapping by holding down the Alt key - while dragging. - -**Segment options** - -Each segment has options in a context menu which can be accessed with a right-click in the -area of that segment. Some of them are only applied to the right-clicked segment, while others are applied -to the whole shape: - -- **Actions** - - **Split** - Splits the segment into two by adding a new node in its center - - **Delete** - Remove the segment and its starting node - - **Double duration** - Doubles the total duration of the whole shape - - **Half duration** - Halves the total duration of the whole shape - - **Flip vertically** - Flips the whole shape vertically - - **Flip horizontally** - Flips the whole shape horizontally - - **Quantize notes to snap division** - Quantizes the nodes in the whole shape to the nearest horizontal grid position. Available in Envelope edit mode only. - - **Quantize notes to whole units** - Quantizes the nodes in the whole shape horizontally to the nearest whole time units. Available in Envelope edit mode only. - - **Distribute nodes evenly** - Distributes the existing nodes from the whole shape evenly in the horizontal axis between the first and last node. - -- **Create** - - **Minimal MSEG** - Loads a straight line going from 1 to 0 in value, a great starting point to build upon. - - **Default voice MSEG** - Loads the default voice MSEG preset (envelope shape). - - **Default scene MSEG** - Loads the default scene MSEG preset (triangle wave LFO shape). - - **8 to 128 step sequencer** - Replaces the existing shape by an 8 to 128-step sequencer shape. - - **8 to 128 sawtooth plucks** - Replaces the existing shape by an 8 to 128 sawtooth plucks shape. - - **8 to 128 lines sine** - Replaces the existing shape by a sine wave made out of 8 to 128 segments. - -- **Trigger** - - **Filter EG** - Triggers the hardwired filter envelope generator at that point. - - **Amp EG** - Triggers the hardwired amplifier envelope generator at that point. - - **Nothing** - Disables the triggering of both the filter and amplifier envelope generators at that point. - - **All** - Enables the triggering of both the filter and amplifier envelope generators at that point. - -- **Settings** - - **Link start and end nodes** - Links the value of the start and end nodes (useful for seamless - looping for example). - - **Deform applied to segment** - Sets if the selected segment is affected by the - Deform parameter found in the LFO editor or not (see [deform parameter](#parameters)). - - **Invert deform value** - Inverts the deform polarity applied to the selected segment. - - -- **Segment types** - List of line types from which a segment can be. The control point, if present, will have a different effect depending on the type used. - - **Hold** - Holds the value of the previous node up to the segment's end node. No control point available. - - **Linear** - Single line. The control point controls the curvature of the segment. - - **Bezier** - Single line. The control point can freely bend the segment. - - **S-curve** - Curved line. The control point determines how abrupt the S-shape is and its direction. - - **Bump** - Single line. The control point can be moved up or down to create a "bump" in the segment. - - **Sine, sawtooth, triangle, square** - Sine, sawtooth, triangle or square waves. - The control point determines how many wave cycles there are between the segment's beginning and end node. - - **Stairs, smooth stairs** - Stair or smooth stairs line types. The control point determines - how many steps there are between the segment's beginning and end node. - - **Brownian bridge** - Random between the beginning and end node every time it's being triggered. - Moving the control point down adjusts the number of steps while quantizing them up to 24 equidistant steps - (useful for random scales, for instance). Moving the control point up also adjusts the number of steps, but - this time without any quantization. The horizontal value of the control point adjusts correlation. - -#### Formula - -The Formula modulator shape is a fully-fledged and Lua-enabled scriptable modulation source. Although this -shape may not be as straight forward to use and to understand as the others listed above, in its complexity -hides true modulation power, which technically-geared users will truly appreciate. - -Surge XT comes with a series of tutorials for the formula modulator available in the patch browser, -each of them explaining different aspects and ideas you can re-create in the formula editor: - -![Illustration 55: Formula modulator](../manual_xt/images/Pictures/formula_modulator.png) - -These tutorials are definitely worth consulting, but here are some basic principles that may help you get started -with the formula modulator. - -Every formula modulator instance must contain at least a **process** function. This is where the modulator -output will be set or calculated. - -Different **variables** can be accessed (and some modified), allowing you to create the desired modulation -behavior: -- `rate` - Value of the modulator's Rate parameter. -- `startphase` - Value of the modulator's Phase slider. -- `amplitude` - Value of the modulator's Amplitude parameter. -- `deform` - Value of the modulator's Deform parameter. - -- `output` - Output value of the formula modulator itself (ranges from -1 to 1). -- `phase` - Continuous value representing the real-time phase position of the modulator output. -- `intphase` - Integer value set to the number of cycles that have been executed. - -- `released` - Is set to true when the modulator is in the release state. -- `songpos` - Host song position -- `tempo` - Host tempo -- `samplerate` - Host sample rate -- `block_size` - Audio buffer size used by Surge XT - -You can access or modify those values by using the following syntax:
- -modstate["*variable-name*"] - -To see a list of values corresponding to those variables, you can open the integrated Debugger by clicking on the -**Show** button at the right of the interface. This debugger also allows you to initialize the modulator by clicking -on **Init**, and to step through the code using the **Step** button. - -Since Formula is an indexed modulator, you can have up to 8 different outputs on a single formula -modulator instance. This can be done by assigning the output to an array of values instead of a single -value. An example of this can be seen in the tutorial *Both Time And Space* (#10). - -After entering code or modifying existing code, press the **Apply** button for changes to take effect. -You will see the output display update with the new shape. - -Finally, you can switch to the **Prelude** view of the code by clicking on the corresponding button. The Surge -prelude is loaded in each surge session and provides a set of built in utilities we've found handy in writing -modulators. - -
- -#### LFO Presets - -To the left of the **Rate** parameter, a small menu icon can be found. Clicking on it will reveal options to -save the selected LFO state, open previously saved states, and finally rescan presets to update the list. -Presets will be categorized by modulation shape. - -#### Raw Waveform and EG Only Outputs - -Each LFO is comprised of three distinct modulation outputs: the full **LFO**, the **raw waveform**, and -the **envelope generator only**. - -While the full LFO output (default) will send the resulting LFO shape modulated with the integrated -envelope generator, switching to **Raw Waveform** from the modulation source context-menu will bypass -the envelope, and **Envelope Generator Only** will set aside the LFO shape itself and only produce an output -from the envelope generator. -Those three outputs are treated as three separate modulation sources. - -Right below, there is an option to apply the Amplitude parameter to still affect the Raw Waveform and -Envelope Generator Only outputs of that modulator. - -#### Copy/Paste Options - -Finally, after setting up an LFO, its settings with or without its targets can be copied and pasted to -another LFO. To do this, simply right-click on the source LFO in the routing bar and use the desired -**Copy** option, depending on what you want to replicate on the new modulation source. Then, use the -**Paste** option to paste it. - -#### Renaming - -LFOs and S-LFOs can be renamed to be more representative of their role and to help the user keep track of what each modulation source is doing in a patch. To do this, simply right-click on the LFO or SLFO in question, -select **Rename Modulator...** and enter the desired name. - -For more information on LFO algorithms, see -[LFOs](#lfos) in the Technical Reference section. - -
- -### Internal Modulators - -#### Filter EG - -The Filter Envelope Generator modulation source, which is labeled "Filter EG", is simply a modulation -source corresponding to the output of the Filter EG, which as its name suggests is already hardwired -to the filter modules. Other parameters can also be modulated by the Filter EG by various amounts, -simply by routing them to this source. - -#### Amp EG - -The Amp EG modulation source, which is labeled "Amp EG", is simply a modulation source corresponding to the -output of the Amp EG, which as its name suggests is already hardwired to the output amp module. Other -parameters can also be modulated by the Amp EG by various amounts, -simply by routing them to this source. - -#### Random - -This modulation source operates at voice level. It will generate a single random value inside the modulation range -for each voice every time a voice is played. - -By default, this modulation source is bipolar and its value distribution is uniform. However, you can -switch to a unipolar and normal versions of it by right-clicking on it and selecting **Switch to...**, and then choosing the desired type from the list. All of those can be used at the same time, -so they can be considered independent modulation sources. - -Note that multiple parameters routed to that modulation source will all receive the same value (in percentage). -To send different randomized values to different parameters, multiple LFOs can be -configured in a way to do this and with greater control. See the explanation of -[the **Rate** parameter](#parameters). - -#### Alternate - -This modulation operates at the voice level. It will generate alternating values between the two modulation range's -extremums. - -By default, this modulation source is bipolar. However, you can switch to a unipolar version of it by -right-clicking on it and selecting **Switch to -> Alternate Unipolar**. The two can also be used at the same time, -so they can be considered two independent modulation sources. - -
- -### Voice and Note Properties - -Like other synthesizers, Surge XT receives MIDI data to determine what note(s) to play. -However, it can also use **MIDI CC** data to modulate any routable parameter. - -There are 14 of those voice and note properties in the routing bar: - -| | | | | -|-|-|-|-| -|**Velocity**|Per note velocity amount|Voice modulator|Unipolar| -|**Release Velocity**|Per note release velocity amount|Voice modulator|Unipolar| -|**Polyphonic Aftertouch (labeled Poly AT)**|Per note polyphonic aftertouch|Voice modulator|Unipolar| -|**Channel Aftertouch (labeled Channel AT)**|Monophonic aftertouch if MPE is disabled|Scene modulator,
Voice modulator in MPE mode|Unipolar| -|**Pitch Bend**|Pitch bend wheel value|Scene modulator|Bipolar| -|**Modwheel**|Modulation wheel value|Scene modulator|Unipolar| -|**Breath**|Breath controller signal|Scene modulator|Unipolar| -|**Expression**|Often used in pedals and for crescendos or decrescendos|Scene modulator|Unipolar| -|**Sustain**|Sustain signal, often from a pedal|Scene modulator|Unipolar| -|**Timbre**|Primarily used for MPE controllers|Voice modulator|Bipolar| -|**Keytrack**|Per note keytrack value|Voice modulator|Bipolar| -|**Lowest Key**|Keytrack value corresponding to the lowest note played|Scene modulator|Bipolar| -|**Highest Key**|Keytrack value corresponding to the highest note played|Scene modulator|Bipolar| -|**Latest Key**|Keytrack value corresponding to the latest note played|Scene modulator|Bipolar| - -Note that only scene-level modulation sources can be routed to FX sends and parameters. -For instance, you can use **Latest Key** instead of **Keytrack** to modulate FX parameters, as Keytrack is -a voice-level modulation. -See [Voice vs. Scene](#voice-vs-scene-modulators) modulators for more details. -
- -![Illustration 56: Routing bar sections](../manual_xt/images/Pictures/routingbar_sections.png) - -### Macros - -There are 8 macros, and by default, they are blank. - -What separates these assignable controllers from the rest is that with a right-click, they can be -assigned to a MIDI controller or any MIDI CC signal, and their value can be edited on-screen -with the blue digital slider below their names. - -By default, the macros are assigned to midi CC 41-48, which is often mapped by default to knobs or -slider banks for a lot of midi controllers. - -See [MIDI CC Information](#midi-cc-information) in the Technical Reference section for more information. - -The right-click context menu also allows you to rename the controller. -There is also the typical routing and clearing options, -(see [Routing](#routing)) and you can choose if their modulation is bipolar (both positive and negative with 0 -in the middle) or unipolar (just positive). - -Macros can also be dragged and dropped over other macros to make them switch place. To do so, simply left-click + drag over the desired macro slot location. - -Finally, note that macros are considered **global modulators**, meaning they are shared between and act on both -scenes A and B. This is useful in case you would want to quickly control certain parameters from both scenes -in a single place. - -
- -# Effects - -The FX Section controls the 16 effect units of the effect block -stored in every patch. - -![Illustration 57: Effects section](../manual_xt/images/Pictures/fxsection.png) - -## Effect Unit Selector - -The effect unit selector can be found towards the top of the FX section. It also represents the signal path -of the effects block. Here it is in more detail: - -![Illustration 58: The effect block](../manual_xt/images/Pictures/illu18.png) - -*The effect block* - -A **left-click** on a particular unit in the effect unit selector brings that unit in the editor. -A **double-click** on a unit disables/enables it. This state is stored within patches, -unlike the global FX bypass setting. -A **right-click** on a unit displays the effect and preset picker specifically for that unit, allowing you to directly -add or swap an effect on that unit. -An **Alt+Click** clears the desired FX unit. - -Moreover, you can drag-and-drop units over other units to make them switch places. Holding down **Ctrl/Cmd** and -dragging allows you to duplicate (copy) units on other units instead, and holding **Shift** allows to simply replace -(overwrite) the target unit with the source one. - -Finally, you can right-click on either the **A** or **B** icons in the diagram to bring up output hard clipping -options, which are the same as explained earlier in the [Scene Output](#scene-output) -and [Global Volume](#fx-bypass-character-global-volume) sections. - -## Effect and Preset Picker - -Effects can be added or removed from the **Effect and preset picker** -(just below the FX return sliders). You can also cycle through effects and presets using the -same arrow buttons as those found in the global [Patch Browser](#patch-browser). - -You can also save your own effect presets which will be stored globally with -the synth. Finally, at the bottom of this menu, there are **Copy** and **Paste** options, -which allows you to copy an effect and its parameters and paste it on another unit. -You can also use drag-and-drop gestures to accomplish this -(see [Effect Unit Selector](#effect-unit-selector)). - -## Effect Editor - -This is where every effect parameter can be edited. Like with the oscillator editor, the parameter of each slider -will change depending on the loaded effect. - -Here's a list of the available effects: -- [EQ](#eq) -- [Exciter](#exciter) -- [Graphic EQ](#graphic-eq) -- [Resonator](#resonator) -- [CHOW](#chow) -- [Distortion](#distortion) -- [Neuron](#neuron) -- [Tape](#tape) -- [Waveshaper](#waveshaper-1) -- [Combulator](#combulator) -- [Frequency Shifter](#frequency-shifter) -- [Nimbus](#nimbus) -- [Ring Modulator](#ring-modulator) -- [Treemonster](#treemonster) -- [Vocoder](#vocoder) -- [Chorus](#chorus) -- [Ensemble](#ensemble) -- [Flanger](#flanger) -- [Phaser](#phaser) -- [Rotary Speaker](#rotary-speaker) -- [Delay](#delay) -- [Reverb 1](#reverb-1) -- [Reverb 2](#reverb-2) -- [Spring Reverb](#spring-reverb) -- [Airwindows](#airwindows) -- [Conditioner](#conditioner) -- [Mid-Side Tool](#mid-side-tool) - -See [Effects](#effects-1) in the Technical Reference section for more information about each effect. - -Note: remember that **FX parameters are scene controls**. This means that only scene-level modulation sources -can modulate them. - -
- -# Microtuning - -Surge XT has become known as a good synth for microtuning. It features full keyboard microtuning support using two -different modes, **Scala SCL/KBM** and **MTS-ESP**, as well as from its internal **Tuning Editor**. Here we will focus -on explaining the options in Surge XT's **Tune** menu, one by one. If you want to learn more about the different -tuning workflows, and the pros and cons of each of them, please visit our [Tuning Guide](../tuning-guide/#methods) - -While using either of the modes, the **Tune** and **Filter Cutoff** menus will dynamically change to reveal the relevant -tuning-related options. Also note, with any tuning mode active, left-clicking the **Tune** label in the [status area](#status-area) -simply turns the tuning mode on or off. To access the menu from this state, right-click instead - -## Default - -By default, Surge XT tunes incoming MIDI notes the same way (nearly) every other software instrument does: -To 12 equal divisions of an octave (12edo for short), with middle C tuned to 261.626Hz as a reference note (which makes A=440). - -From this default state, opening the tuning menu shows you this: - -![Illustration 59: Tuning menu default](../manual_xt/images/Pictures/tuning_menu.png) - -*The tuning menu in default mode* - -The options near the top pertain to the Tuning Editor and SCL/KBM mode of retuning, the ones at the bottom to MTS-ESP. -Let's go through the menu options one by one, and also briefly describe the advantages of each tuning method. - -## Tuning Editor - -The first option on the previously shown menu opens Surge XT's built in tuning editor, which can -change the intonation of the current Surge XT instance (and other instances and instruments too, -via MTS-ESP, more on that later). Its function is described in more detail in our [Tuning Guide](../tuning-guide/#tuning-editor) - -## Scala SCL/KBM Mode - -Scala SCL/KBM uses small plain text files to give tuning information to an instrument. For more -general information about this method, refer to our [Tuning Guide](../tuning-guide/#scala-files) - -Once in SCL/KBM mode, the tuning menu looks like this: - -![Illustration 60: Tuning menu](../manual_xt/images/Pictures/tuning_menu_2.png) - -*The tuning menu with an SCL/KBM pair loaded* - -- **Current tuning** - Once an SCL file has been loaded, the description line of the tuning will appear here. - -- **Current keyboard mapping** - Once a KBM has been loaded, the file name of the keyboard mapping will appear here. - -- **Open tuning editor…** - As mentioned above, opens the [Tuning Editor](../tuning-guide/#tuning-editor) - - -The following three options are grayed out in the default menu, but become available once SCL/KBM files are loaded. -Their purpose is returning the instrument to standard intonation settings: - -- **Set to standard tuning** - Resets the currently loaded SCL tuning table to 12 tone equal temperament, keeping -the currently loaded KBM. - -- **Set to standard mapping (Concert C)** - Resets the currently loaded KBM such that the 1/1 of the loaded SCL is -mapped to middle C.60 at 261.626 Hz, keeping the current SCL. - -- **Set to standard scale (12-TET)** - Resets both of the above. - - -The next three options are for loading SCL/KBM files. These can also be imported via drag-and-drop -anywhere on the Surge XT interface: - -- **Load .scl tuning** - Loads .scl files. - -- **Load .kbm keyboard mapping** - Loads .kbm files. - -- **Factory tuning library** - Clicking on this option will open the system file browser at the location of the -included Surge XT factory SCL/KBM content. - - -Then come some auxiliary options: - -- **Remap A4 (MIDI note 69) directly to…** - Instead of using a *.kbm* file, this option lets you directly type in the frequency (in Hz) -of MIDI note 69, A above middle C. - -- **Use MIDI channel for octave shift** - Enables users of generalized array keyboard controllers (such as the -Lumatone) to map large tuning gamuts and equal-temperaments contiguously across all 16 MIDI Channels. - - -Then follow two options which determine how Surge XT's internal modulators will relate to the tuning information: - -- **Apply tuning at MIDI input** - Selected by default. When checked, the tuning is only applied -to MIDI input, but pitch modulation is in 12-tone equal temperament amounts. So for example, a pitch bend of 2 always means -200 cents, whether or not your chosen tuning has a 200 cent interval. - -- **Apply tuning after modulation** - When checked, pitch modulation is instead tuned to the loaded scale. -For instance, this means that a pitch bend of 2 always lands on the same frequency as the note two steps up, -even in tunings with unequal step sizes. - - -Since choosing between one of the two options explained above fundamentally changes how a patch would play in tuned mode, -this setting is stored at the patch level. - -
- -## MTS-ESP Mode - -**MTS-ESP** is a system in which all software instruments are retuned simultaneously by one central interface. -To learn more about what MTS-ESP is, visit our [Tuning Guide](../tuning-guide/#mts-esp) - -In MTS-ESP mode, the tuning menu will look like this: - -![Illustration 61: Tuning menu in MTS-ESP microtuning mode](../manual_xt/images/Pictures/tuning_mts-esp.png) - -*The Surge XT Tuning menu in MTS-ESP mode.* - -The MTS-ESP in parentheses at the top indicates that an MTS-ESP Source is present. - - -- **Current tuning** - Displays the name of the currently active tuning in MTS-ESP. - -- **Use MTS-ESP if available** - This option was already visible in the previous menus. If this option is checked, -when Surge XT detects the presence of an MTS-ESP Source, its tuning will be determined by that Source. If no source is present, -Surge XT will go back to the default or SCL/KBM modes. This settings applies across all Surge XT instances that are loaded after -it was checked. - -- **Act as MTS-ESP source** - When this option is checked, the current instance of Surge XT will become the MTS-ESP source. -Any **SCL/KBM** loaded (or any changes applied from the **Tuning Editor**) in the current instance, will be applied to any -MTS-ESP compatible instruments present, for example into all other instances of Surge XT (provided the "Use MTS-ESP..." option -above was checked). The MTS-ESP specification only allows one source to exist at a time, so this option will be -grayed out if another source is already present. - -- **Re-Initialize MTS-ESP Library and IPC** - Since there can only be one MTS-ESP source at a time, it's important that -sources properly de-register themselves when closing. If that doesn't happen (say if the host crashes), that can lead to -some problems. Pressing this button and re-starting your host session should solve these. - -- **Disconnect as client from MTS-ESP** - Provides a way to disable MTS-ESP in the current Surge XT instance, -even when a Source is present, whereupon the individual instance will return to SCL-KBM mode. - -- **Query tuning at note on only** - This option is only relevant if you're using an MTS-ESP source which can change tunings -on-the-fly, like for example [ODDsounds MTS-ESP Master](https://oddsound.com/mtsespsuite.php). -If the MTS-ESP tuning changes while notes are held, a client can choose whether to adjust those notes immediately (which will -sound like pitch bends) or to wait until the next note-on. The former behavior (known as Dynamic Microtuning, the -default for Surge XT), can enable some unheard-of musical gestures like morphing gradually from one tuning to the next. -That may not always be what you want though, which is why this option exists. With it enabled, held notes -keep their pitch when the tuning changes. - -
- -# Main Menu - -You can find this menu in the bottom-right corner of Surge XT's interface. -Clicking it reveals various configuration options. - -Note: Some of these options are also present at the top of the user interface for easier access -(see [Status Area](#status-area)). - -This menu can also be opened by right-clicking anywhere on the user interface where there are no controls. - -### Zoom - -The **Zoom** option can be extremely useful on certain monitors and configurations. - -In its sub-menu there are various options to change the scale of the whole user-interface to a certain size. -Keep in mind that it will not let you change it to any size, as there is an upper limit depending on your screen resolution. - -When a new instance of Surge is loaded, its zoom will be set to default size. To change this value, -go back in this sub-menu and select the option "Set [zoom %] as default", or "Set default zoom to ..." then enter the desired value. - -### Skins - -This is where the UI skin can be chosen. Surge XT comes with two factory skins: **Classic** and **Dark**. - -![Illustration 62: Classic skin](../manual_xt/images/Pictures/surge.png) - -![Illustration 63: Dark skin](../manual_xt/images/Pictures/surge_dark.png) - -Additional skins are available to download from our [**skin library**](https://surge-synthesizer.github.io/skin-library). -Here is one of them, the **Royal** skin by [Voger Design](https://vogerdesign.com/): - -![Illustration 64: Royal skin](../manual_xt/images/Pictures/surge_royal.png) - -From there you can also reload the current skin and rescan the skins folder. You can even configure if the colors of -context menus follow the OS light/dark mode settings, or are applied from the currently loaded skin. - -From there, you can also reload the current skin, rescan skins, open the current skin folder location, open the skin -inspector and open the skin development guide. - -If you would like to get on board with the skin engine and developing skins, -see the documentation on [developing Surge XT skins](https://surge-synthesizer.github.io/skin-manual.html). - -### Value Displays - -- **High Precision Value Readouts** - Allows value popups that appear when tweaking parameters to show more digits -after the decimal point (6 digits). This can be useful in some more advanced and precise scenarios. - -- **Modulation value readout shows bounds** - Allows the value popup that appears when applying modulation and -adjusting its amount to a parameter to show more values, such as the relative range in the negative direction, -and both absolute minimum and maximum values underneath. - -- **Show value readout on mouse hover** - Allows you to enable or disable the gesture of hovering over a slider to -display its value. - -- **Show ghosted LFO waveform reference** - Allows you to enable or disable the LFO waveform at full amplitude -displayed with a dotted line in the LFO display area. - -- **Middle C** - Allows you to change the reference octave shown in popup displays of some frequency-related parameters, -such as filter cutoff for instance. You can change Middle C to display either **C3**, **C4** or **C5**. - -### Data Folders - -In this sub-menu, there are a couple of options regarding user data and patches. - -**Open factory data folder...** - This opens the location where factory patches, wavetables and other -configuration files are stored. - -**Open user data folder...** - This option opens the location where custom patches saved by the user will be stored. - -**Set custom user data folder...** - This allows you to change where user patches will be saved. - -**Rescan all data folders** - This option can be useful after importing patches created by someone else, -after transferring user patches to another computer, or after downloading patches from the internet. - -### Mouse Behavior - -This sub-menu contains options allowing you to change the sensitivity of the mouse when moving sliders. -While *Legacy* is used by default, the other 3 options range from *Slow* (more granular) to *Exact* -(as fast as the mouse pointer). Also, there is an option to keep showing the mouse pointer on the -screen when dragging on a control. - -Touchscreen mode automatically sets the mouse options to give the user the best experience when using Surge -on a touch screen. - -### Patch Settings - -This is where you can configure what appears by default in the **Author** and **Comment** fields when saving a patch. \ -You can also set the currently loaded patch as the default patch, append the original author -name to modified patches or not, and configure tuning and tuning mapping when loading patches. \ -Finally, there are options to export the currently loaded patch as an HTML file, either containing -all parameters, or only the ones that aren't set to their default value. - -### Workflow - -- **Remember tab positions per scene** - Remember tab positions (for example, currently selected oscillator or - LFO currently shown in the LFO editor) separately for each scene or unified in the whole synth. - -- **Load MSEG snap state from patch** - Tells Surge XT if it should load the MSEG snap parameters from the saved patch or -keep the existing settings. - -- **Previous/next patch constrained to current category** - Turn this option off to allow the previous/next -patch arrow buttons in the patch browser area to automatically switch categories after hitting the beginning or end -of one. - -- **Retain patch search results after loading** - Prevents the search results box from closing after loading a searched -patch. Useful if you want to preview all patches corresponding to your search query. - -- **Confirm patch loading if unsaved changes exist** - When this option is enabled, Surge XT will ask if you -would like to save the currently edited patch before loading the next one. - -- **Use keyboard shortcuts** - Enables of disables the keyboard shortcuts. - -- **Edit keyboard shortcuts...** - Opens a window containing a list of all the available keyboard shortcuts in Surge XT. -This is also where you can customize all those shortcuts and enable or disable them individually. - -- **Shift + F10 and Edit parameter value shortcuts** - If the first of the two options is enabled, the **Shift + F10** -keyboard shortcut and **Enter** key will allow you to access a control's context menu. -If the **Follow mouse hover focus** option is enabled, it will also follow the mouse cursor. - -- **Virtual keyboard** - Toggle this option to show or hide the virtual on-screen keyboard at the -bottom of the user interface. The virtual keyboard also includes a pitch bend and modulation wheel control. - -- **Oscilloscope...** - This opens a window that displays an oscilloscope or a spectrum analyser. See [Oscilloscope](#oscilloscope) for more information. - -### Accessibility - -- **Set all recommended accessibility options** - Enables all the accessibility options found right below. Useful for quickly setting up -Surge XT to work with screen readers. - -- **Send additional accessibility announcements** - Sends more information when using accessibility features, such as -patch or category changes via the arrow buttons below the patch browser. - -- **Announce patch browser entries** - This is a Windows only option. -If enabled, the narrator will announce the currently selected row in the patch browser. - -- **Add sub-menus for modulation menu items** - Makes the modulation options found in the context menu of controls work as a -sub-menu with discrete Clear, Mute and Edit entries, alongside being able to directly click on the corresponding icons. - -- **Focus modulator editor on "Add modulation from" actions** - After using the context menu option ["Add modulation from"](#add-modulation-from), -the modulator that is used to modulate the targeted control will be displayed in the modulation editor. - - -### MPE Settings - -**MPE** stands for **MIDI Polyphonic Expression**. It can be enabled or disabled in its sub-menu. -The current and default pitch bend range can be changed here as well. Finally, you can also configure -the MPE pitch bend smoothing amount. - -### MIDI Settings - -This sub-menu contains options for MIDI mappings. - -#### Controller Smoothing - -This sub-menu contains options to set the amount of desired MIDI controller smoothing. - -#### Sustain Pedal in Mono Mode - -- **Sustain pedal holds all notes (no note off retrigger)** - If sustain is engaged and multiple notes are hit then -held one after the other, Surge XT will stay on the latest note when releasing it instead of switching to the previous -note. -- **Sustain pedal allows note off retrigger** - If sustain is engaged and multiple notes are hit then held one after -the other, Surge XT will switch to the previous note when the latest note is released. - -#### Use MIDI channels 2 and 3 to play scenes individually - -Playing MIDI channels 2 or 3 when this option is unchecked will not play scene A or B individually. - -#### Ignore MIDI Program Change messages -Self-explanatory. You probably want to turn this on in most situations. - -#### Save MIDI mapping as... - -This allows you to save the current MIDI mapping. The newly created profile will appear in this menu under the two top options. - -#### Set current MIDI mapping as default -When a new instance of Surge XT is opened, it will load this MIDI mapping by default if you select this option. - -#### Clear current MIDI mapping - -As its name suggests, this option clears the existing MIDI mapping in Surge XT and resets it back to default. - -#### Show Current MIDI Mapping - -This opens up an HTML file listing the currently loaded MIDI mapping. - -### Tuning - -These options are also present in the Tuning menu at the top of the interface. See [Microtuning](#microtuning) for -detailed explanations on the tuning implementation within Surge XT. - -### Online Links - -The following items are for [reaching the developers and user feedback information](https://surge-synthesizer.github.io/feedback), -[reading the code on GitHub](https://github.com/surge-synthesizer/surge/), -[downloading additional content](https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki/Additional-Content), -visiting [Skin Library](https://surge-synthesizer.github.io/skin-library), opening this user manual, -and finally [opening Surge's website](https://surge-synthesizer.github.io/). - -### About Surge XT - -Finally, there is an option to open the **About** pane containing various version, configuration and license information. - -### Developer Menu - -When right-clicking on the Menu button, some more options for development and testing purposes appear in various sub-menus. -Holding down **Shift** when right-clicking anywhere where there is no control will also display this Developer option sub-menu. - -
- -# Oscilloscope - -Surge XT offers a basic real-time waveform and spectrum display to help with your sound design. After opening the Oscilloscope window, -you can choose between either a **Waveform Display** (oscilloscope) or **Spectrum Display**. - -In both modes, you can select to view only the left or right stereo channels or both simultaneously using the **L** and **R** buttons -towards the top-right of the display. If both are selected, the results are averaged between the two channels. If neither are selected, -the scope will be frozen in its current position until a channel is selected. - -## Waveform Display - -The waveform display is based on the well-known oscilloscope plugin s(M)exoscope. Big thanks to [Bram@Smartelectronix](https://github.com/bdejong/smartelectronix) for open-sourcing this useful tool! - -![Illustration 64: Royal skin](../manual_xt/images/Pictures/oscilloscope.png) - -The oscilloscope has four trigger modes: - -- **Freerun** - Enabled by the default. The display never erases and immediately starts writing again at the left as soon as the waveform reaches the right side of the display area. - -- **Rising Edge** This mode retriggers the display every time a waveform peak rises past a certain level. This level is set with the **Trigger Level** slider. Drag this slider to set the retrigger level above or below the zero crossing. The retrigger level will be indicated by a horizontal white line on the display. - -- **Falling Edge** Identical to Rising mode, except that the display retriggers only when the waveform falls past the retrigger level. - -- **Internal Trigger** - Retriggers the display at a frequency set by the **Internal Trigger Freq** slider. Values are measured in Hz, and retrigger rates range from as infrequently as 0.441 Hz to as often as 139.4 times a second. This mode is useful if you only want to watch a certain part of a waveform. - -In all of the above modes, the **Retrigger Threshold** slider determines how soon the display can be retriggered after the last trigger. This threshold is measured in samples, from 1 to 10000. -For example, if the Retrigger Threshold is set to 450, then the display will not retrigger unless at least 450 samples have passed through the display since the last retrigger. This is useful if you absolutely need to see a certain number of samples in your waveform before it refreshes. - -There are also two other sliders that control the display: - -- **Time Scaling** - Controls the number of pixels per sample. The lower the number, the finer the resolution of the waveform. When you change this slider, you can see the time scale marks on the display change to represent the new timescale. - -- **Amplitude Scaling** - Controls the amplitude of the waveform in the display. If your waveform appears too thin, turn it up. If your waveform is cut off at the top or bottom of the display, turn it down. - - -Finally, there are three options you can use to customize the oscilloscope's behavior even further: - -- **DC Block** - Enabling this option will automatically compensate for DC offset, if your waveform is too far off the zero crossing line for example. - -- **Freeze** - This button can be used to freeze the waveform on the display. - -- **Sync Redraw** - When activated, Surge XT will only update waveform data when the plugin's internal graphic buffer is full (as opposed to in real-time). In other words, turn this on to slow down how often the display refreshes, and adjust the Time Scaling slider again to find the right speed. - - - -## Spectrum Display - -The spectrum display provides a simple instantaneous view of the frequency domain of the current -synthesizer output. It is done using FFT, with a fixed block size of 8192 samples. - -![Illustration 64: Royal skin](../manual_xt/images/Pictures/spectrum.png) - -The display is updated with new data extremely quickly as it streams in. It interpolates between the -prior FFT block and the new block over the course of (8196 / sample size) seconds. Once this very -brief smoothing period passes, all new data is displayed. - -The spectrum display can be controlled by a few parameters: - -- **Min Level** - Controls the lowest value that the display will show. Increase it in order to scale -the display to your taste or your data. - -- **Max dB** - Controls the highest value that the display will show. Decrease it in order to -scale the display to your taste or your data. - -- **Decay Rate** - Controls the time it takes for the spectrum's amplitude to decay after a decrease in -amplitude. - -- **Freeze** - This button can be used to freeze the spectral content on the display. - -
- -# Accessibility - -The Surge XT user interface can be completely navigated from the keyboard. Pressing Tab will allow you to move through all controls -in the user interface, while pressing the up and down arrow keys will let you adjust them. Just like holding Shift or Control/Command -while moving a slider with the mouse lets you make more precise adjustments, holding these modifiers while pressing the -arrow keys will have a similar effect. Pressing Home, End or Delete will let you set a control to its maximum, minimum and default -value respectively. Finally, pressing Shift+F10 or the Applications key on any control will open its right-click menu. - -With the exception of Tab, the other keys mentioned here need to be turned on before they can be used. If you press one of these keys -with the shortcuts turned off, you will be asked whether you want to turn them on. Alternatively, they can be turned on by checking the -**Use keyboard shortcuts** option in the [Workflow](#workflow) section of the menu. A number of additional shortcuts are available -which allow you to quickly open specific dialogs, change patches or save your work and more. - -In addition to full keyboard support, Surge XT is compatible with screen reader software on both Mac and Windows. This means that as -you navigate through the interface, the screen reader will give you full speech and braille feedback on the control that’s focused -and what its value is. You can also navigate the interface using your screen reader’s review commands. - -For additional help on using Surge with specific Screen Readers, refer to this page. - -
-
- - -# Technical Reference - -## Surge XT Hierarchy - -### Overview - -![Illustration 65: Block diagram of the synthesizer engine](../manual_xt/images/Pictures/illu16.png) - -*Block diagram of the synthesizer engine.* - -![Illustration 66: Signal flow of the synthesizer engine](../manual_xt/images/Pictures/signal_flow.png) - -Illustration shows an overview of the synthesizer engine of Surge XT. - -
- -### Voices - -![Illustration 67: Block diagram of a synthesizer voice](../manual_xt/images/Pictures/illu17.png) - -*Block diagram of a synthesizer voice* - -Illustration shows most audio and control-paths of a single -voice. Not all processing elements of the voice are shown in the -diagram. - -
- -### LFOs - -Each voice has 6 configurable LFOs and each scene has an -additional 6 configurable LFOs, making each voice effectively capable of receiving modulation from -a total of 12 LFOs. - -![Illustration 68: LFO block diagram](../manual_xt/images/Pictures/tech_lfos.png) - -*LFO block diagram* - -
- -### Modulation Routing Details - -How the modulation routing works internally isn't something you normally -have to think about when using Surge XT. Just activate the modulation mode -with the desired source and see which of the sliders that become blue. -Nonetheless, it is useful to know which limitations are present and why. - -![Illustration 69: Modulation routing behind the scenes](../manual_xt/images/Pictures/illu19.png) - -*Modulation routing behind the scenes* - -The thing to remember is that voice modulation sources can't -modulate scene parameters, global/effect parameters or parameters from scene LFOs, since these are two -distinctly different modulation paths. Other than that it should be pretty straightforward. - -
- -## Oscillator Algorithms - -Surge XT provides 12 different oscillator algorithms, each capable of -generating sound in different ways with a different set of controls. -They're not just different waveforms. - -### Classic - -The Classic oscillator algorithm consists of a main oscillator that can -generate a pulse wave, a sawtooth wave, a dual-saw wave or anything in -between. - -A sub-oscillator provides a pulse-wave one octave below the main -oscillator. Changing the pulse-width of the sub-oscillator does affect -the main oscillator as well, as they will both change levels at the same -time except that the main oscillator does it twice as often. - -The Classic algorithm is also capable of oscillator self-sync. Note that -the sub-oscillator will be used as the base-pitch for the sync. - -The algorithm provides unison at the oscillator-level with up to 16 -instances. Unlike the Wavetable oscillator, the cost of unison in terms -of CPU usage for the Classic oscillator is quite modest. The unison -oscillator voices are affected by the scene level Osc Drift parameter -independently. - -| | | | -|-|-|-| -| Shape | Waveform shape. -100% = pulse, 0% = saw, 100% = dual saw. | -100 .. 100 % | -| Width 1 | Duty cycle (pulse) or relative phase (dual saw). | 0 .. 100 % | -| Width 2 | Squeezes or expands the waveform in a different way. If positive, the two latter halves of two consecutive single cycles get squeezed closer together. | 0 .. 100 % | -| Sub Mix | Sub-oscillator mix, 0% = only main, 100% = only sub. | 0 .. 100 % | -| Sync | Oscillator hard sync. | 0 .. 60 semitones | -| Unison Detune | Detuning of unison oscillators.
Can be extended.
Can be switched between relative (default) and absolute. | 0 .. 100 cents
0 .. 1200 cents
0 .. 16 Hz
0 .. 192 Hz | -| Unison Voices | Number of oscillators used for unison (1 = disabled). | 1 .. 16 | - -
- -### Modern - -The Modern oscillator algorithm is a multi-waveform oscillator which creates clean, -low aliasing versions of pulse, triangle, saw and sine waveforms with unison and -sub-oscillator capabilities. It is based on the differentiated polynomial waveform -algorithm, from [this paper](https://www.researchgate.net/profile/Juhan-Nam/publication/224557976_Alias-Suppressed_Oscillators_Based_on_Differentiated_Polynomial_Waveforms/links/573f274d08ae9ace84133dc9/Alias-Suppressed-Oscillators-Based-on-Differentiated-Polynomial-Waveforms.pdf). - -Three parameters labeled **Sawtooth**, **Pulse** and **Triangle** control relative mixes of those waveforms, while -the **Width** parameter controls the pulse width for the Pulse wave. **Sync** offsets the pitch of the oscillator against the pitch of the internal reference oscillator -while resetting the phase of the main oscillator to the phase of the reference oscillator, to achieve typical hard sync effects. -Unison controls work like in other Surge XT oscillators. - -| | | | -|-|-|-| -| Sawtooth | Amplitude of the Sawtooth waveform. | -100 .. 100 % | -| Pulse | Amplitude of the Pulse waveform. | -100 .. 100 % | -| Triangle/Sine/Square | Amplitude of the third waveform, can be right-clicked (for more information, see below this parameter list). | -100 .. 100 % | -| Width | Duty cycle of the Pulse waveform. | 0 .. 100 % | -| Sync | Oscillator hard sync. | 0 .. 60 semitones | -| Unison Detune | Detuning of unison oscillators.
Can be extended.
Can be switched between relative (default) and absolute. | 0 .. 100 cents
0 .. 1200 cents
0 .. 16 Hz
0 .. 192 Hz | -| Unison Voices | Number of oscillators used for unison (1 = unison disabled). | 1 .. 16 | - -#### Third Waveform Parameter - -The third waveform parameter (labeled "Triangle" by default) is special in that -it has several waveform options to choose from. If you right-click it, you can see -that it can generate a triangle wave, a sine wave, or a square wave. This control -can also become a sub-oscillator, playing at half the frequency of the other two waveforms. -Importantly, in sub-oscillator mode, the third waveform does **not** participate in unison, -which is in contrast to the Sub Mix parameter in Classic oscillator. Finally, -there is also an option for the sub-oscillator to bypass hard syncing against the internal reference oscillator. - -
- -### Wavetable - -A wavetable in Surge XT consists of up to 512 single-cycle waveforms (frames), each of which can consist of up to 4096 samples. -Using the **Morph** parameter it is possible to sweep across the waveforms -in the wavetable. - -![Illustration 70: Wavetable](../manual_xt/images/Pictures/tech_wavetable.png) - -The individual waves are equidistant in the table. When the shape -setting is between two individual waves, they will be mixed to ensure -smooth travel. You can't edit the wavetable contents directly within -Surge XT, but it is possible to generate custom wavetables with external -software. - -Surge XT can also import wavetables containing a **clm** block to indicate loop size (as used by Serum), -a **cue** block (as used by various products including Native Instruments) and a **smpl** block. -Wavetable files without loop information are loaded as one-shots. - -This effectively lets you import various wavetables from other products such as **Serum**. -All those 3rd party wavetables that have been tested in Surge XT have been reported to work flawlessly. - -To import custom wavetables, use the wavetable selection bar at the bottom of the oscillator display. This is where you can also -[download additional wavetable content](https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki/Additional-Content). - -Alternatively, you can simply drag-and-drop any compatible wavetable file anywhere over the Surge interface to load it. - -You can even create your own wavetables for Surge using [wt-tool](https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki/Creating-Wavetables-For-Surge) or [WaveEdit](https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki/Creating-Wavetables-With-WaveEdit). - -Once a wavetable is loaded, you can also export it using the wavetable selection bar. - -Then, by modulating the **Morph** parameter, it is possible to create motion, -dynamic response to playing and sonic variation. If you want to select an exact frame, drag the slider while holding -down Ctrl/Cmd, which allows you to snap to exact values in the table, useful for switching between distinct -shapes, for example. - -What real-life property, if any, the **Morph** parameter is supposed to mirror depend on -each wavetable. Common cases are: - - - Analyzed from sounds that evolve over time. The behavior can be - recreated by letting shape increase over time by modulation. It's - the most common among the analyzed wavetables. - - Analyzed from static sounds over different pitches to capture the - formant shift of a sound. The behavior can be recreated by - modulating shape by the keytrack modsource. - - A parameter of a mathematical equation. - -In the end it's just a set of data and Surge XT doesn't care how it was -generated, all that matters is how it sounds. - -The Wavetable oscillator has some interesting sonic characteristics. It -outputs the waveform in a stair-stepped fashion, making no attempts to -'smooth the steps' in the process, but does so in a manner that is -completely band-limited. This makes it similar in sound to 1980s era -wave-table synths and samplers which didn't use resampling but had -dedicated D/A-converters for each voice instead and changed the pitch by -varying the sample rate of the individual D/As. - -The fact that the steps aren't smoothed causes an artifact known as -harmonic aliasing. This is not to be confused with inharmonic aliasing -which sounds somewhat similar to an AM-radio being tuned and is -generally nasty. Instead, this artifact will cause the harmonics of the -waveform to repeat themselves and fill up the entire audible spectra -even at low pitches, just like a square-wave would, preventing the -waveform from sounding dull. As this artifact is completely harmonic it -is also musically pleasing. Nonetheless, it may sound a bit out of place -on very smooth waveforms but the effect can be filtered out by a -lowpass filter in the filter block if desired. Some of the wave-tables, -such as the regular triangle wave, are large enough for this artifact to -never appear in the normally used range for this specific reason. - -The important thing is that just like most other oscillators in Surge XT, -it doesn't output any inharmonic aliasing whatsoever or any audible -levels of interpolation-noise, two artifacts which has played a big part -in giving digital synthesizers a bad name. - -For more information, you can read -[this article](https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki/Why-you-may-get-high-frequency-distortion-from-some-wavetables) -on Surge's wiki. - -**For developers and advanced users**: - -There is a reference for the .wt file-format used by the wavetables. It -is located at: `surgedata/wavetables/wt fileformat.txt` - -| | | | -|-|-|-| -| Morph | Interpolates between wavetable frames.
0% = first frame, 100% = last frame.
Can be set to non-continuous.| 0 .. 100 % | -| Skew Vertical | Vertical skew of the waveform. | -100 .. 100 % | -| Saturate | Soft saturation of the waveform. | 0 .. 100 % | -| Formant | Compresses the waveform in time but keeps the cycle-time intact. | 0 .. 60 semitones | -| Skew Horizontal | Horizontal skew of the waveform. | -100 .. 100 % | -| Unison Detune | Detuning of unison oscillators.
Can be extended.
Can be switched between relative (default) and absolute. | 0 .. 100 cents
0 .. 1200 cents
0 .. 16 Hz
0 .. 192 Hz | -| Unison Voices | Number of oscillators used for unison. 1 = disabled. | 1 .. 16 | - -
- -### Window - -The Window oscillator is another shot at wavetable -synthesis that is quite different from the previous wavetable algorithm. - -The wave, which can be any wavetable included with Surge XT, is multiplied -by a second waveform, the window, which can be one of 9 waveform types -that are specifically made for the window oscillator. The formant -parameter controls the pitch of the wave independently of the window, -but as the wave is always restarted with the window, the pitch will -remain the same. Instead, the timbre of the sound will change -dramatically, much depending on which window is selected. - -Unlike the Wavetable algorithm, the Window oscillator uses a more -traditional resampling approach which doesn't result in harmonic -aliasing. - -| | | | -|-|-|-| -| Morph | Selects a frame from the wavetable, without interpolation. 0% = first frame, 100% = last frame.
Can be set to continuous. | 0 .. 100 % | -| Formant | Adjusts pitch of the wavetable frame, independently from the pitch of the window. | -60 .. 60 semitones | -| Window | Chooses the waveform used for the amplitude window. | Triangle, Cosine, Blend 1, Blend 2, Blend 3,
Sawtooth, Sine, Square, Rectangle | -| Low Cut | Cutoff frequency of built-in highpass filter.
Must be activated in context menu. | 13.75 .. 25087.71 Hz | -| High Cut | Cutoff frequency of built-in lowpass filter.
Must be activated in context menu. | 13.75 .. 25087.71 Hz | -| Unison Detune | Detuning of unison oscillators.
Can be extended.
Can be switched between relative (default) and absolute. | 0 .. 100 cents
0 .. 1200 cents
0 .. 16 Hz
0 .. 192 Hz | -| Unison Voices | Number of oscillators used for unison. 1 = disabled. | 1 .. 16 | - -
- -### Sine - -Quite unsurprisingly, this oscillator generates a sine waveform. However, there's a number of other interesting things this oscillator can do! - -| | | | -|-|-|-| -| Shape | Various variants of sine wave achieved through quadrant masking, shifting and frequency doubling. | 1 .. 28 | -| Feedback | FM feedback amount.
Can be extended. | -100 .. 100 %
-400 .. 400 % | -| FM Behavior | Chooses whether FM behaves like Surge 1.6.1.1 and earlier, or consistent with FM2/3 oscillators. | Legacy (before v1.6.2),
Consistent with FM2/3 | -| Low Cut | Cutoff frequency of built-in highpass filter.
Must be activated in context menu. | 13.75 .. 25087.71 Hz | -| High Cut | Cutoff frequency of built-in lowpass filter.
Must be activated in context menu. | 13.75 .. 25087.71 Hz | -| Unison Detune | Detuning of unison oscillators.
Can be extended.
Can be switched between relative (default) and absolute. | 0 .. 100 cents
0 .. 1200 cents
0 .. 16 Hz
0 .. 192 Hz | -| Unison Voices | Number of oscillators used for unison, 1 = disabled. | 1 .. 16 | - -
- -### FM2 - -![Illustration 71: FM2 modulation matrix](../manual_xt/images/Pictures/FM2.png) - -FM2 provides a miniature FM synthesizer voice in an oscillator that is -specifically tailored towards making nice and musical FM sounds. A -single sine carrier is modulated by two sine modulators, whose ratios to -the carrier are always integer thus the resulting waveform is always -cyclic. However, **M1/2 Offset** lets you offset the modulators slightly in -an absolute fashion, creating an evolving and pleasing detune -effect. - -| | | | -|-|-|-| -| M1 Amount | Modulation amount of the first modulator | 0 .. 100 % | -| M1 Ratio | Ratio of the first modulator to the carrier | 1 .. 32 | -| M2 Amount | Modulation amount of the second modulator | 0 .. 100 % | -| M2 Ratio | Ratio of the second modulator to the carrier | 1 .. 32 | -| M1/2 Offset | Absolute detuning of the modulators
Can be extended. | -10 .. 10 Hz
-1000 .. 1000 Hz | -| M1/2 Phase | Changes the initial phase of the modulators to give different variations of the waveform. | 0 .. 100 % | -| Feedback | Modulation amount of the carrier to itself
Extended mode (default) can be disabled. |-400 .. 400 %
-100 .. 100 % | - -
- -### FM3 - -![Illustration 72: FM3 modulation matrix](../manual_xt/images/Pictures/FM3.png) - -As a contrast to FM2, FM3 is the algorithm of choice for scraping paint -off the walls. The modulators have a larger range, the ratios can be -non-integer and there's a third modulator which has its rate set as an -absolute frequency. - -| | | | -|-|-|-| -| M1 Amount | Modulation amount of the first modulator | 0 .. 100 % | -| M1 Ratio | Ratio of the first modulator to the carrier, can either be extended or absolute. | 0.0 .. 32.00
1/32.0 .. 32.0
~ 8 Hz .. 24 kHz | -| M2 Amount | Modulation amount of the second modulator | 0 .. 100 % | -| M2 Ratio | Ratio of the second modulator to the carrier, can either be extended or absolute. | 0.0 .. 32.00
1/32.0 .. 32.0
~ 8 Hz .. 24 kHz | -| M3 Amount | Modulation amount of the third modulator | 0 .. 100 % | -| M3 Frequency | Frequency of the third modulator | ~ 14 Hz .. 25 kHz | -| Feedback | Modulation amount of the carrier to itself
Extended mode (default) can be disabled. | -400 .. 400 %
-100 .. 100 % | - -
- -### String - -The String oscillator uses a physical modeling technique where excitation sources -are sent into a tuned delay line with feedback, with various filters inline -(based on the original Karplus-Strong algorithm). The oscillator runs two strings -at all times which can be detuned from each other and individually damped. - -To make the model create sound, you need to excite it. We have two classes of -excitation modes, **Burst** and **Constant**. In Burst mode, the delay line is loaded with a pattern -before a note is played, and then no further signal is added to the oscillator. -Think of this as emulating a plucked string. In Constant mode, the delay -line is also pre-loaded, but the signal continues to be applied for as long as you hold the key. -Think of this as emulating a bowed string. In almost all cases, Continuous excitation modes would be used -along with modulation of **Exciter Level** parameter, in order to emulate bow pressure, and so on. - -Exciter modes provide various waveforms - noise, pink noise, ramp, etc. - which you can use to excite the strings, -leading to different timbres. Surge XT's audio input can also be used as an exciter signal! - -| | | | -|-|-|-| -|Exciter|Determines mode and waveform used to excite the string.|Burst, Constant| -|Exciter Level|Determines how strongly the string gets excited.
Oversampling and interpolation can be configured in its context-menu.
|-100 .. 100 %| -|String 1 Decay|Sets the decay time of the first string (amount of delay line feedback).|-100 .. 100 % | -|String 2 Decay|Sets the decay time of the second string (amount of delay line feedback).|-100 .. 100 %| -|String 2 Detune|Adjusts tuning of the second string.
Can be extended.
Can be switched between relative (default) and absolute.|-100 .. 100 cents
-1200 .. 1200 cents
-16 .. 16 Hz
-192 .. 192 Hz| -|String Balance|Adjusts mix between the two strings.|-100 .. 100%| -|Stiffness|Applies lowpass (left) and highpass (right) filters in the feedback loop. Results in inharmonic timbres at the extremes.
The stiffness filter can be configured in its context-menu.|-100 .. 100%| - -
- -### Twist - -This oscillator imports a rather famous Eurorack macro oscillator into Surge XT, based on Émilie Gillet's -device. You can read the manual for the hardware module on which this oscillator is based -[here](https://mutable-instruments.net/modules/plaits/manual). - -This implementation presents all 16 oscillator modes and the controls are dynamically renamed -appropriately for every model. Core differences between the hardware module and Surge XT's implementation are: - -1. By default, the LPG in the module is disabled, but by activating the LPG level and decay sliders with (right-click, then Activate), -the LPG will be triggered per voice for each received MIDI note. - -2. By default, you can mix between the main and the auxiliary oscillator outputs with the **Mix** parameter. -You can also right-click the Mix parameter and enable **Pan main and auxiliary signals** option, -in which case -100% value is Main to left/Aux to right, +100% is Main to right/Aux to left, and 0% is an even mix of both signals sent to both left and right. -Do note that for this to be audible, you have to be in one of stereo filter configuration modes. - -Twist can be more CPU demanding than most other Surge XT oscillator algorithms. -Judiciously using maximum polyphony setting and being careful with Amp EG release times -can go a long way in minimizing the CPU usage, thus making robust patches. - -
- -### Alias - -The Alias oscillator purposefully ignores a few decades of research into making digital signals with low or no -aliasing, and does all the things you shouldn't do, so it purposefully sounds digital, gross, broken, terrible, -yet awesome all at once. - -| | | | -|-|-|-| -| Shape | Sets the oscillator waveform. | See explanation [below](#shape) | -| Wrap | Mangles the waveform by amplifying it, then making it wrap around from the other side instead of hard clipping. | -100 .. 100 % | -| Mask | Sets a 8-bit bitmask applied to the waveform. | -100 .. 100 % | -| Threshold | Adjusts the turning point (ramp), duty cycle (pulse) or wavetable readout offset (others) of the waveform. | -100 .. 100 % | -| Bitcrush | Sets the amount of bitcrushing applied to the waveform. | 1.00 .. 8.00 bits | -| Unison Detune | Detuning of unison oscillators.
Can be extended.
Can be switched between relative (default) and absolute. | 0 .. 100 cents
0 .. 1200 cents
0 .. 16 Hz
0 .. 192 Hz | -| Unison Voices | Number of oscillators used for unison, 1 = disabled. | 1 .. 16 | - -#### Shape - -**Shape** parameter (comes in the form of a menu) is very important and is worth explaining in more detail, -as it allows you to choose the source used for the Alias algorithm. - -In addition to the more regular shapes (such as Sine, Ramp, Pulse and Noise), Surge XT's audio input can be also used. - -Going further, there is Additive, which allows you to create a custom waveform by adjusting amplitudes of up to 16 -harmonics, accessible by clicking on the Edit button that appears in this mode: - -![Illustration 73: Alias additive editor](../manual_xt/images/Pictures/alias_additive_editor.png) - -This editor works in a similar way to the step sequencer editor, however there are some additional options available when right-clicking: - -- **Shapes** - Partial level presets which roughly represent different wave shapes, including a random option. -- **Absolute** - Sets the level of all the partials in the positive range. -- **Invert** - Flips the partial levels vertically. -- **Reverse** - Flips the partial levels horizontally. - -Additionally, you can also use **Quadrant Shaping** waveforms as a source, which are also found in the -[Sine](#sine) oscillator. - -Finally, we have various **Memory from...** options: - -- **This Alias Instance** - Generates a waveform based on reading memory associated with the currently selected instance of Alias. -- **Oscillator Data** - Generates a waveform based on reading memory associated with general oscillator data. -- **Step Sequencer Data** - Generates a waveform based on reading memory associated with step sequencer data. -- **Scene Data** - Generates a waveform based on reading memory associated with general scene data. -- **DAW Chunk Data** - Generates a waveform based on reading memory that serves as additional DAW chunk data (various non-automatable parameters and settings). - -**Note:** When using **Memory From...** as a source, there is no guarantee that the resulting waveform -will be consistent, as memory data can vary depending on a number of things: the DAW used, the particular Surge XT instance, rebooting your machine, and so on. -Thus, it's good practice to bounce the audio output from Surge XT when using this mode. -You know what they say; "If you like it, you should... put a mic on it." - -
- -### S&H Noise - -S&H is an abbreviation for 'Sample and Hold'. The S&H Noise oscillator algorithm works like a pulse oscillator, -but instead of always switching between +1 and -1, the levels used are determined stochastically. - -The correlation parameter determines how new levels are calculated. A -setting of 0% will have no memory and each new level will -effectively be a random number (white noise). A lower setting will -favor new values that are closer to the previous level and will -provide noise with a darker spectra. Higher values will favor -values as far away from the previous one as possible, with 100% -resulting in a harmonic pulse wave. - -| | | | -|-|-|-| -| Correlation | Noise correlation. 0% = white noise, 100% = pulse wave. | -100 .. 100 % | -| Width | Duty cycle of the oscillator. | 0 .. 100 % | -| Low Cut | Cutoff frequency of built-in highpass filter.
Must be activated in context menu. | 13.75 .. 25087.71 Hz | -| High Cut | Cutoff frequency of built-in lowpass filter.
Must be activated in context menu. | 13.75 .. 25087.71 Hz | -| Sync | Oscillator hard sync. | 0 .. 60 semitones | -| Unison Detune | Detuning of unison oscillators.
Can be extended.
Can be switched between relative (default) and absolute. | 0 .. 100 cents
0 .. 1200 cents
0 .. 16 Hz
0 .. 192 Hz | -| Unison Voices | Number of oscillators used for unison. 1 = disabled. | 1 .. 16 | - -
- -### Audio Input - -Audio Input lets you route external audio into the voice architecture of -Surge XT. It also allows you to route the audio output from Scene A into Scene B. - -| | | | -|-|-|-| -| Audio In L/R Channel | Chooses which external input is used. -100% = left, 0% = both (stereo), 100% = right. | -100 .. 100 % | -| Audio In Gain | External input gain in dB. | 48 .. +48 dB | -| Scene A L/R Channel**1** | Chooses which input from Scene A is used. -100% = left, 0% = both (stereo), 100% = right. | -100 .. 100% | -| Scene A Gain**1** | Scene A input gain in dB. | 48 .. +48 dB | -| Audio In<>Scene A Mix**1** | Blend control between the external audio-in signal and the output of Scene A. | -100 .. +100% | -| Low Cut | Cutoff frequency of built-in highpass filter.
Must be activated in context menu. | 13.75 .. 25087.71 Hz | -| High Cut | Cutoff frequency of built-in lowpass filter.
Must be activated in context menu. | 13.75 .. 25087.71 Hz | - -**1** Only available in Scene B - -Note: When using the Audio Input oscillator type in Scene B to get audio from Scene A, -you will likely want to **set Play Mode to Latch**. That way, Scene B will always be triggered. - -For more information and possible applications, you can read -[this article](https://github.com/surge-synthesizer/surge-synthesizer.github.io/wiki/Using-Surge-as-an-effect-(and-vocoder)) -on Surge's wiki. - -
- -## Filters - -There are multiple filter algorithms available for each of the 2 -filter units in the filter block. Each of the algorithms have -different subtypes, which alter their sound. - -Some of the filter-(sub)types have some non-linear elements in them -to allow them to self-oscillate in a stable and predictable manner. -This means they will sound different depending on how hard they're -driven, which can be conveniently controlled with the Pre-Filter -Gain setting found in the mixer. For example, if the resonance peaks of a filter is too -loud, increase the Pre-Filter Gain to make the rest of the signal -more dominant (and if needed decrease the gain at the output stage -of the voice to compensate). - -Filters in Surge XT are divided into the following categories: -- Lowpass filters -- Highpass filters -- Bandpass filters -- Notch filters -- Effect filters - -### Filter Types - -**12 dB** - 2-Pole filter. Available in **Lowpass**, **Highpass**, **Bandpass** -and **Notch** types. - -**24 dB** - 4-Pole filter. Available in **Lowpass**, **Highpass**, **Bandpass** -and **Notch** types. - -Sub-types for both **12 dB** and **24 dB**: - -1. **Standard** - clear with a strong resonance, capable of self-oscillation. Handles transient behavior extremely well. -2. **Driven** - chesty, somewhat distorted sound with a more held-back resonance. Capable of self-oscillation. -3. **Clean** - the smoothest and cleanest sounding subtype, capable of lower resonance than the others, which is suitable when you do not want the sound of the filter to be noticed but only to roll-off a part of the spectrum. - -**Legacy Ladder** - 4-Pole ladder filter. This is Surge's original and older ladder filter. -It has stable self-oscillation and requires less CPU processing than the newer Vintage Ladder filter. -Available in **Lowpass** type. - -Sub-types: - -1. **6 dB** - Output taken from 1st stage (1-pole). -2. **12 dB** - Output taken from 2nd stage (2-pole). -3. **18 dB** - Output taken from 3rd stage (3-pole). -4. **24 dB** - Output taken from 4th stage (4-pole). - -**Vintage Ladder** - 4-Pole ladder filter. This is a more recent, accurate and often better-sounding ladder filter. -It also has stable self-oscillation, but requires more CPU processing than the older Legacy Ladder filter. -Available in **Lowpass** type. - -Sub-types: - -1. **Type 1** - Imitates a Moog resonant filter by Runge-Kutta numerical integration of -a differential equation approximately describing the dynamics of the circuit. -2. **Type 1 Compensated** - Gain-compensated version of Type 1. -3. **Type 2** - Moog Ladder filter that builds upon the work done by Smith and Stilson from Antti Huovilainen's paper. -4. **Type 2 Compensated** - Gain compensated version of Type 2. - -Thanks to [@ddiakopoulos](https://github.com/ddiakopoulos) for maintaining this very -useful [repository](https://github.com/ddiakopoulos/MoogLadders) of research and code which -heavily informed the models we implemented. - -**K35** - 12 dB/Octave filters from the Odin 2 synthesizer, and inspired by the Korg MS-20 filter topology. -Increasing resonance will make them sound dirtier and more aggressive. -Available in **Lowpass** and **Highpass** types. - -Sub-types: - -1. No Saturation -2. Mild Saturation -3. Moderate Saturation -4. Heavy Saturation -5. Extreme Saturation - -Thanks to [@TheWaveWarden](https://github.com/TheWaveWarden) for allowing us to implement Odin 2's K35 -filters inside Surge XT. You can download Odin 2 [here](https://www.thewavewarden.com/odin2), or read the code -[here](https://github.com/TheWaveWarden/odin2). - -**Diode Ladder** - 4-pole diode ladder filter from the Odin 2 synthesizer with individually -tapped pole outputs. This filter attempts to model the sound of a ladder filter that uses diodes -instead of transistors. This filter does not self-oscillate without feedback. -Available in **Lowpass** type. - -Sub-types: - -1. **6 dB** - Output taken from 1st stage (1-pole). -2. **12 dB** - Output taken from 2nd stage (2-pole). -3. **18 dB** - Output taken from 3rd stage (3-pole). -4. **24 dB** - Output taken from 4th stage (4-pole). - -Thanks to [@TheWaveWarden](https://github.com/TheWaveWarden) for allowing us to implement Odin 2's Diode Ladder -filters inside Surge XT. You can download Odin 2 [here](https://www.thewavewarden.com/odin2), or read the code -[here](https://github.com/TheWaveWarden/odin2). - -**OB-Xd 12dB** - 12dB filters from the OB-Xd synthesizer by discoDSP, and from the work of Vadim Filatov, which is based on the filters found in the Oberheim OB-Xa. Available in **Lowpass**, **Highpass**, **Bandpass** -and **Notch** types. - -Sub-types: -1. **Standard** - Standard filter response. -2. **Pushed** - Adds boosted non-linearities that drives the filter into more self-oscillation at high resonance -values. - -Thanks to [discoDSP](https://www.discodsp.com/news/) for allowing us to implement OB-Xd's filters inside Surge XT. You can get OB-Xd [here](https://www.discodsp.com/obxd/), or read the source [here](https://github.com/reales/OB-Xd). - -**OB-Xd 24dB** - 24dB filters found in the OB-Xd synthesizer by discoDSP, and from the work of Vadim Filatov, which is based on the filters found in the Oberheim OB-Xa. Available in **Lowpass** type. - -Sub-types: - -1. **6 dB** - Output taken from 1st stage (1-pole). -2. **12 dB** - Output taken from 2nd stage (2-pole). -3. **18 dB** - Output taken from 3rd stage (3-pole). -4. **24 dB** - Output taken from 4th stage (4-pole). - -Thanks to [discoDSP](https://www.discodsp.com/news/) for allowing us to implement OB-Xd's filters inside Surge XT. You can get OB-Xd [here](https://www.discodsp.com/obxd/), or read the source [here](https://github.com/reales/OB-Xd). - -**Cutoff Warp** - 12dB/Octave filters created using a nonlinear biquad filter structure. The nonlinearities in the Cutoff Warp filter cause the cutoff frequency to sweep to higher frequencies as the signal level increases (see below). Available in **Lowpass**, **Highpass**, **Bandpass**, **Notch** and **Allpass (Effect)** types. - -![Illustration 74: Cutoff warp frequency response](../manual_xt/images/Pictures/cutoff_warp.png) - -For more information on the Cutoff Warp filter, you can see [this blog post](https://jatinchowdhury18.medium.com/complex-nonlinearities-episode-4-nonlinear-biquad-filters-ae6b3f23cb0e) by Jatin Chowdhury, or [this 2020 DAFx paper](https://dafx2020.mdw.ac.at/proceedings/papers/DAFx2020_paper_3.pdf), specifically section 4. - -**Resonance Warp** - 12dB/Octave filters created using a nonlinear biquad filter structure. The nonlinearities in the Resonance Warp filter cause the resonance of the filter to decrease as the signal level increases (see below). Available in **Lowpass**, **Highpass**, **Bandpass**, **Notch** and **Allpass (Effect)** types. - -![Illustration 75: Resonance warp frequency response](../manual_xt/images/Pictures/reso_warp.png) - -For more information on the Cutoff Warp filter, you can see [this blog post](https://jatinchowdhury18.medium.com/complex-nonlinearities-episode-5-nonlinear-feedback-filters-115e65fc0402) by Jatin Chowdhury, or [this 2020 DAFx paper](https://dafx2020.mdw.ac.at/proceedings/papers/DAFx2020_paper_3.pdf), specifically section 3. - -Sub-types for **Cutoff Warp** and **Resonance Warp**: - -1. **1 Stage tanh** - Output taken from 1st stage (2-pole), using `tanh` nonlinearities. -2. **2 Stages tanh** - Output taken from 2nd stage (4-pole), using `tanh` nonlinearities. -3. **3 Stages tanh** - Output taken from 3rd stage (6-pole), using `tanh` nonlinearities. -4. **4 Stages tanh** - Output taken from 4th stage (8-pole), using `tanh` nonlinearities. -5. **1 Stage Soft Clip** - Output taken from 1st stage (2-pole), using soft-clipping nonlinearities. -6. **2 Stages Soft Clip** - Output taken from 2nd stage (4-pole), using soft-clipping nonlinearities. -7. **3 Stages Soft Clip** - Output taken from 3rd stage (6-pole), using soft-clipping nonlinearities. -8. **4 Stages Soft Clip** - Output taken from 4th stage (8-pole), using soft-clipping nonlinearities. -9. **1 Stage OJD** - Output taken from 1st stage (2-pole), using OJD nonlinearities. -10. **2 Stages OJD** - Output taken from 2nd stage (4-pole), using OJD nonlinearities. -11. **3 Stages OJD** - Output taken from 3rd stage (6-pole), using OJD nonlinearities. -12. **4 Stages OJD** - Output taken from 4th stage (8-pole), using OJD nonlinearities. - -**Tri-Pole** - 3-pole filter based on the [Threeler filter](http://ijfritz.byethost4.com/Threeler_board_doc.pdf) -designed by Ian Fritz, which contains 3 filter stages and a resonance stage all in a global feedback loop. - -1. **Low -> Low -> Low, First** - Output taken from the 1st filter stage.
-Filter stages are: LPF, LPF, LPF. -2. **Low -> High -> Low, First** - Output taken from the 1st filter stage.
-Filter stages are: LPF, HPF, LPF. -3. **High -> Low -> High, First** - Output taken from the 1st filter stage.
-Filter stages are: HPF, LPF, HPF. -4. **High -> High -> High, First** - Output taken from the 1st filter stage.
-Filter stages are: HPF, HPF, HPF. -5. **Low -> Low -> Low, Second** - Output taken from the 2nd filter stage.
-Filter stages are: LPF, LPF, LPF. -6. **Low -> High -> Low, Second** - Output taken from the 2nd filter stage.
-Filter stages are: LPF, HPF, LPF. -7. **High -> Low -> High, Second** - Output taken from the 2nd filter stage.
-Filter stages are: HPF, LPF, HPF. -8. **High -> High -> High, Second** - Output taken from the 2nd filter stage.
-Filter stages are: HPF, HPF, HPF. -9. **Low -> Low -> Low, Third** - Output taken from the 3rd filter stage.
-Filter stages are: LPF, LPF, LPF. -10. **Low -> High -> Low, Third** - Output taken from the 3rd filter stage.
-Filter stages are: LPF, HPF, LPF. -11. **High -> Low -> High, Third** - Output taken from the 3rd filter stage.
-Filter stages are: HPF, LPF, HPF. -12. **High -> High -> High, Third** - Output taken from the 3rd filter stage.
-Filter stages are: HPF, HPF, HPF. - -For more information on the development of the Tri-Pole filter, please see -[this Python notebook](https://github.com/surge-synthesizer/surge-python/blob/main/scripts/dsp_simulations/ThreelerAnalysis.ipynb) -which outlines the development of the signal processing building blocks behind the filter. - -**Allpass** - As its name suggests, this filter passes all frequencies equally in gain. However, it is useful to alter the phase relationship in the spectrum. Unless feedback is involved, its effect can mostly be heard when the Cutoff frequency is in movement. Thus, modulation can be used to get interesting results. - -Allpass can be found under the **Effect** category. - -**Comb +** and **Comb -** - Comb filter, which is different compared to the previous filter types since it doesn't -filter any part of the spectrum, but instead plays back the original signal with a delay. The former type has -positive feedback and the latter has negative feedback. - -Sub-types: - -1. **50% Wet** -2. **100% Wet** - -When the sub-type is set to 2 and resonance is 0%, the -comb filter will work purely as a delay unit (with sub-sample -precision). This can be used together with the other filter unit -along with filter block feedback to provide interesting options. The -"Winds/Clarinet" and " Plucks/Simple Waveguide" patches -showcase how this ability can be used for simple physical modeling. -They only use the oscillator section to ignite the sound, the rest -is in the filter block. - -Moreover, the negative comb filter produces the sound an octave lower than the positive comb filter. - -Comb + and Comb - can be found in the **Effect** category. - -**Sample & Hold** - The Sample & Hold module will sample the audio at the rate set by the -cutoff frequency. Resonance will emphasize oscillations around the -cutoff frequency, not unlike the resonance peak of a lowpass filter. - -Sample & Hold can be found in the **Effect** category. - -
- -## Effects - -Surge XT has 8 effect units which each can run one of the 10 provided -algorithms. - -### EQ - -The EQ unit provides 3-bands of fully parametric equalizing. This -high-quality algorithm has a much better response at high frequencies -than digital equalizers usually have. - -| | | | -|-|-|-| -|Band 1/2/3
Gain|Band gain, can be disabled|-48 .. +48 dB| -|Band 1/2/3
Freq|Band frequency|14Hz .. 25kHz| -|Band 1/2/3
Bandwidth|Band bandwidth|0 .. 5 octaves| -|Output gain|Gain control|-48 .. +48 dB| -|Mix|Blend control between the dry and the wet signal.|0 .. 100 %| - -
- -### Exciter - -Exciter is a harmonic exciter based on the famous Aphex Aural Exciter unit. -For more information, see [this blog post](https://jatinchowdhury18.medium.com/complex-nonlinearities-epsiode-2-harmonic-exciter-cd883d888a43) by Jatin Chowdhury. - -| | | | -|-|-|-| -|Drive|Controls the amount of generated harmonics.|0 .. 100 %| -|Tone|Controls the tone balance of the generated harmonics.|0 .. 100 %| -|Attack|Controls the attack time of the generated harmonics.|5 .. 20 ms| -|Release|Controls the release time of the generated harmonics.|50 .. 200 ms| -|Mix|Controls the mix of wet and dry signals.|0 .. 100 %| - -
- -### Graphic EQ - -Graphic EQ is, as its name suggests, a graphic equalizer. It is comprised of -11 level-adjustable and deactivatable (from the right-click menu) bands, which -makes this equalizer better than the normal EQ at sculpting relatively complex response curves. -Apart from the fact that there is also an output gain control at the bottom -of the interface, there is not much else to add. - -
- -### Resonator - -The Resonator provides carefully tuned lowpass, bandpass, bandpass + notch or highpass filters, -each with individual output gain and resonance. By default, the filters cannot be driven into self-oscillation, -but if you right-click any of the three **Resonance** parameters and enable **Modulation extends into self-oscillation**, -modulation sources can drive the filters to a self-oscillating point. Similarly, the three resonator bands -are tuned to match the ranges of a very famous resonator circuit, but they can be extended to allow a wider range. - -| | | | -|-|-|-| -|Frequency 1/2/3|Frequency of the filter for the the first, second or third band.
Can be extended.|60 .. 300 Hz
60 .. 7500 Hz| -|Resonance 1/2/3|Amount of resonance for the first, second or third band.
Modulation can be allowed to push the filter into self-oscillation from the right-click menu.|0 .. 100 %| -|Gain 1/2/3|First, second or third band gain.|-inf .. 0 dB| -|Mode|Sets the filter type used in the resonator effect.|Lowpass, Bandpass, Bandpass+Notch, Highpass| -|Mix|Controls the mix of wet and dry signals|0 .. 100 %| - -
- -### CHOW - -Chow is a half-wave rectifier distortion effect with controls similar to those found in a compressor. -The original effect was implemented as an [open source audio plugin](https://github.com/Chowdhury-DSP/CHOW) by Jatin Chowdhury. - -| | | | -|-|-|-| -|Threshold|Controls the threshold at which rectification starts.|-96dB .. 0dB| -|Ratio|Controls the amount of rectification.|1:1 .. 1:20| -|Flip|Flips the output signal to be positive or negative.|On/Off| -|Mix|Controls the mix of wet and dry signals.|0 .. 100 %| - -
- -### Distortion - -Distortion algorithm. Provides plenty of EQ options as well as a -feedback loop to alter the tonality of the clipping stage. - -![Illustration 76: Distortion algorithm block diagram](../manual_xt/images/Pictures/tech_distortion.png) - -*Distortion algorithm block diagram* - -| | | | -|-|-|-| -|Pre-EQ Gain/Freq/BW|Parametric EQ band parameters prior to the clipping stage,
Gain can be extended.|| -|Pre-EQ High cut|High cut element prior to the clipping stage|14Hz .. 25kHz| -|Model|Waveshaper used for distortion|Soft, Hard, Asymmetric, Sine, Digital| -|Drive|Drive of the clipping stage,
Can be extended.|-24 .. +24 dB
-120 .. 120 dB| -|Feedback|Feedback loop around the clipping stage|-100 .. 100 %| -|Post-EQ Gain/Freq/BW|Parametric EQ band parameters after the clipping stage,
Gain can be extended.|| -|Post-EQ High cut|High cut element prior to the clipping stage|14Hz .. 25kHz| -|Output gain|Output gain|-24 .. +24 dB| - -
- -### Neuron - -Neuron is an effect based on a [Gated Recurrent Unit](https://en.wikipedia.org/wiki/Gated_recurrent_unit) -(GRU), a commonly used building block in recurrent neural networks. - -![Illustration 77: Neuron diagram](../manual_xt/images/Pictures/gru.png) - -For more information on the development of the Neuron effect, you can read -[this blog post](https://jatinchowdhury18.medium.com/complex-nonlinearities-episode-10-gated-recurrent-distortion-6d60948323cf) by Jatin Chowdhury. - -| | | | -|-|-|-| -|Drive|The Wh  coefficient of the GRU; controls the input gain of the main signal path.|0 .. 100 %| -|Squash|The Wf  coefficient; controls the input gain of the sidechain signal path.|0 .. 100 %| -|Stab|The Uf  coefficient; controls the feedback gain of the sidechain signal path.|0 .. 100 %| -|Asymmetry|The Uh  coefficient; controls the feedback gain of the main signal path.|0 .. 100 %| -|Bias|The bf  coefficient; controls the bias amount of the sidechain signal path.|0 .. 100 %| -|Comb
Freq|Controls the length of the feedback delay, creating an internal comb filter.|14Hz .. 25kHz| -|Comb
Separation|Controls the separation between the comb frequencies in the left and right channels.|-96 .. 96 semitones| -|LFO
Waveform/Rate/Depth|Controls for the modulation of the comb frequency.|| - -
- -### Tape - -Tape effect is a port of the Chow Tape Model tape emulation effect, a real-time -physical model of a reel-to-reel analog tape machine. The model contains -parameters for controlling the amount of tape distortion and degradation, -as well as physical characteristics of the tape machine, like the play head -width, or tape thickness. - -The original plugin can be found [on GitHub](https://github.com/jatinchowdhury18/AnalogTapeModel), -and signal processing details are outlined in [this 2019 -DAFx paper](http://dafx2019.bcu.ac.uk/papers/DAFx2019_paper_3.pdf). - -| | | | -|-|-|-| -|Drive|Controls the gain of the tape distortion|0 .. 100 %| -|Saturation|Controls the amount of tape saturation|0 .. 100 %| -|Bias|Controls the amount of tape bias|0 .. 100 %| -|Tone|Controls the tone balance of the tape distortion|-100 .. 100 %| -|Speed|Controls the tape speed|1 .. 50 ips| -|Gap|Controls the width of the playhead gap|0.1 .. 20 microns| -|Spacing|Controls the spacing between the tape and the playhead|0.1 .. 50 microns| -|Thickness|Controls the tape thickness|1 .. 50 microns| -|Depth|Controls the tone balance of the tape distortion|0 .. 100 %| -|Amount|Controls the tone balance of the tape distortion|0 .. 100 %| -|Variance|Controls the tone balance of the tape distortion|0 .. 100 %| -|Mix|Controls the mix of wet and dry signals|0 .. 100 %| - -
- -### Waveshaper - -The full waveshaper module present in the sound shaping section of the synth (see [Waveshaper](#waveshaper)) -is also available as an effect unit which, like other effects, can be loaded anywhere in the FX signal path. -It also hosts additional controls for further adjustments of the resulting distorted output. - -| | | | -|-|-|-| -|Low Cut (pre)|Low cut filter prior to the waveshaping stage. disabled by default, but can be activated.|13.75 Hz .. 25kHz| -|High cut (pre)|High cut filter prior to the waveshaping stage. disabled by default, but can be activated.|13.75 Hz .. 25kHz| -|Shape|Shape used for waveshaping|Full list of wave shapes also present in the waveshaper| -|Bias|Alters the symmetry of the shaping curve|-100 .. 100 %| -|Drive|Drive of the waveshaping stage.
Can be extended.|-24 .. +24 dB
-120 .. 120 dB| -|Low Cut (post)|Low cut filter after the waveshaping stage. Can be activated.|13.75 Hz .. 25kHz| -|High cut (post)|High cut filter after the waveshaping stage. Can be activated.|13.75 Hz .. 25kHz| -|Gain|Output gain|-24 .. +24 dB| -|Mix|Controls the mix of wet and dry signals|0 .. 100 %| - -
- -### Combulator - -Combulator effect is somewhat similar to the [Resonator](#resonator) in that it -is also made of three filter bands. However, it uses comb filters instead. -These three filters are tuned to a center pitch and two offsets, each with -its own gain control, and combs 2 and 3 with individual pan. -A common use case is to use a monophonic (scene-level) modulation source like **Highest Key** to modulate the -center pitch. The circuit also implements an envelope -follower on the input signal, and mixes additional noise in based on the followed envelope and the **Extra -Noise** parameter. - -| | | | -|-|-|-| -|Extra Noise|Controls the level of extra noise added to the comb filters|0 .. 100 %| -|Center|Master center pitch control, offsets the three comb filters simultaneously|0.5 .. 25087.71 Hz %| -|Offset 1/2|Controls the offset independently for two of the comb filters
Can be set to absolute (unlinked from the center comb filter).|-60 .. 60 semitones| -|Feedback|Controls the feedback amount applied to the comb filters|-100 .. 100 %| -|Tone|Applies low-pass filtering (left) or high-pass filtering (right)|-100 .. 100 %| -|Comb 1/2/3|Output gain for each of the comb filters|-inf .. 0 dB| -|Pan 2/3|Independent output panning controls for two of the comb filters|-inf .. 0 dB| -|Mix|Controls the mix of wet and dry signals|0 .. 100 %| - -
- -### Frequency Shifter - -Based on the classic Bode frequency shifter effect, which uses a carrier wave to shift frequencies linearly. -This changes the frequency relationships between overtones, usually resulting in a more inharmonic sound. -This version also provides a delay unit and a feedback loop to create -consecutively shifted repeating delays, as heard in a classic english sci-fi theme. - -| | | | -|-|-|-| -|Left|Amount of frequency shift (in hertz) for the left channel,
Can be extended|-10 .. 10 Hz
-1 .. 1 kHz| -|Right|Amount of frequency shift (relative to the left channel) for the right channel.|-100 .. 100 %| -|Time|Delay time for the frequency-shifted signal. Can be tempo-synced.|0 .. 32 s
1/512 .. 16 whole notes| -|Feedback|Feedback around the frequency shifter and delay-unit.|-inf .. 0 dB| -|Mix|Blend control between the dry and the wet signal.|0 .. 100 %| - -
- -### Nimbus - -The Nimbus effect imports the granular texture effect from Émilie Gillet's Eurorack project. -You can read the manual for the hardware device on which this effect is based -[here](https://mutable-instruments.net/modules/clouds/manual). - -The labels and ranges in the effect adjust based on the mode to allow you to use this -effect appropriately in Surge XT. - -
- -### Ring Modulator - -Flexible ring modulation algorithm. - -| | | | -|-|-|-| -|Shape|Shape used by the carrier oscillator.|1 .. 24| -|Frequency|Frequency of the carrier oscillator.|8.18 .. 12543.86 Hz| -|Unison Detune|Detuning of the carrier unison voices.
Can be extended.
Can be switched between relative (default) and absolute.|0 .. 100 cents
0 .. 1200 cents
0 .. 16 Hz
0 .. 192 Hz| -|Unison Voices|Number of unison voices used by the carrier oscillator. 1 = disabled.|1 .. 16| -|Forward Bias|Controls the approximate model of the diode **1**.|0 .. 100 %| -|Linear Region|Controls the approximate model of the diode **1**.|0 .. 100 %| -|Low Cut|Low cut element before the output stage.|13.75 .. 25087.71 Hz| -|High Cut|High cut element before the output stage.|13.75 .. 25087.71 Hz| -|Mix|Blend control between the dry and the wet signal.|0 .. 100 %| - -**1** For more information on the diode model used by the ring modulator, -you can read [this paper](http://dafx.de/paper-archive/2011/Papers/66_e.pdf). - -
- -### Treemonster - -Treemonster is a specialized effect ported from Shortcircuit 2, a proper Vember Audio classic! -Treemonster runs a naïve pitch detection algorithm on the input signal, runs a -sine oscillator at the detected pitch, then ring modulates the input signal with the -resulting tuned sine oscillator. It can get pretty crazy, especially if you apply pitch -shifts to the generated oscillator. Like the emulated analog ring modulation in Surge XT, -this effect can very rapidly become very inharmonic. - -| | | | -|-|-|-| -|Threshold|Level above which the input signal will have its pitch detected.|-96 .. 0 dB| -|Speed|Transition speed between two detected pitches.|0 .. 100 %| -|Low Cut|Cutoff frequency of the highpass filter applied to the input signal before pitch detection.
Can be disabled.|13.75 .. 25087.71 Hz| -|High Cut|Cutoff frequency of the lowpass filter applied to the input signal before pitch detection.
Can be disabled.|13.75 .. 25087.71 Hz| -|Pitch|Pitch offset of the carrier oscillator.|0 .. 100 %| -|Ring Modulation|Mix between the clean sine carrier oscillator (left) and the ring modulated signal (right).|0 .. 100 %| -|Width|Stereo width. 0% = mono, 100% = stereo, -100% = reverse stereo |-100 .. 100 %| -|Mix|Blend control between the dry and the wet signal.|-100 .. +100%| - -
- -### Vocoder - -The audio input of Surge XT is used to modulate the carrier signal at the -input stage of this 20-band vocoder algorithm. - -| | | | -|-|-|-| -|Gain|Gain control of the modulator|-48 .. +48 dB| -|Gate|Bands below this level will be silenced.|-96 .. 0 dB| -|Env Follow|Rate of the envelope followers.|0 .. 100 %| -|Q|Controls the steepness of the filters.|-100 .. 100 %| -|Bands|The number of vocoder bands.|4 .. 20| -|Min Frequency|Frequency of the lowest vocoder band applied to the carrier. Bands will be spread evenly in pitch between it and the high band.|55 .. 3520 Hz| -|Max Frequency|Frequency of the highest vocoder band applied to the carrier. Bands will be spread evenly in pitch between it and the low band.|440 .. 14080 Hz| -|Input|Chooses the input source configuration.|Mono Sum, Left Only, Right Only, Stereo| -|Range|Squeezes or expands the range of the modulator bands.|-100 .. 100 %| -|Center|The modulator bands default to the carrier bands, but this recenters the modulator while keeping the same low/high distance.|-100 .. 100 %| - -
- -### Chorus - -4-stage chorus algorithm. - -| | | | -|-|-|-| -|Rate|Rate of the modulation,
Can be tempo-synced.|0.008 .. 512 Hz
64 .. 1/1024 note| -|Depth|Depth of the modulation.|0 .. 100 %| -|Time|Delay time used as center.|0 .. 0.125 s| -|Feedback|Amount fed from the output back into the input.|-inf .. 0 dB| -|Low/High-cut|EQ controls of the chorused signal.|14Hz .. 25kHz| -|Width|Gain scaling of the Side-component of the wet signal.|-24 .. 24 dB| -|Mix|Blend control between the dry and the wet signal.|0 .. 100 %| - -
- -### Ensemble - -Ensemble chorus effect based on BBD (bucket-brigade device) delay lines (with optional clean digital delay lines, too). - -Implementation of the BBD chip is based on a [2018 -DAFx paper](http://dafx2018.web.ua.pt/papers/DAFx2018_paper_12.pdf) -by Martin Holters and Julian Parker. - -| | | | -|-|-|-| -|Filter|The frequency of the anti-aliasing filter used by the BBD|14Hz .. 25kHz| -|Modulation
Freq 1/2|Controls the modulation frequency of the chorus|0.01 .. 20 Hz| -|Modulation
Depth 1/2|Controls the modulation depth of the chorus|0 .. 100 %| -|Delay Type|Controls the type of delay line used for the chorusing effect|128 .. 4096 BBD Stages, Digital| -|Clock Rate|Controls the clock rate used by the BBD delays|1.5kHz .. 100kHz| -|Saturation|Controls a BBD-style saturation on the chorusing delays|0 .. 100 %| -|Feedback|Controls feedback around the chorusing delays, creating a flanging effect|0 .. 100 %| - -
- -### Flanger - -Versatile Flanging algorithm. - -| | | | -|-|-|-| -|Waveform|Waveform of the modulation|Sine, Triangle, Sawtooth, Sample & Hold| -|Rate|Rate of the modulation,
Can be tempo-synced|0.008 .. 512 Hz
64 .. 1/1024 note| -|Depth|Depth of the modulation|0 .. 100%| -|Count|Number of comb filters used for the flanging algorithm.|1.00 .. 4.00| -|Base Pitch|Cutoff frequency/pitch of the first comb filter.|0 .. 127 semitones| -|Spacing|Cutoff frequency offset for the other comb filters.|0 .. 12 semitones| -|Feedback|Increases the flanging resonance. |0 .. 100 %| -|LF Damping|Damping for low frequencies.|0 .. 100%| -|Mode|Mode used for the flanging algorithm|Dry Signal + Combs, Combs Only,
Dry Signal + Arpeggiated Combs,
Arpeggiated Combs Only| -|Width|Gain scaling of the Side-component of the wet signal.|-24 .. +24 dB| -|Mix|Blend control between the dry and the wet signal.|-100 .. +100%| - -
- -### Phaser - -Flexible phaser with adjustable number of stages. - -| | | | -|-|-|-| -|Waveform|Shape of the modulation|Sine, Triangle, Sawtooth,
Noise, Sample & Hold, Square| -|Rate|Rate of modulation LFO,
Can be tempo-synced.
Can be disabled**1**.|0.008 .. 512 Hz
64 .. 1/1024 note| -|Depth|Depth of the phaser modulation LFO.|0 .. 100 %| -|Stereo|LFO Phase relation between stereo channels
0% = 0 degrees, 100% = 180 degrees.|0 .. 100 %| -|Count|Number of stages|2 .. 16| -|Spread|Distance between the stages.|0 .. 100%| -|Center|Base frequency for the stages.|-100 .. 100 %| -|Sharpness|Q setting for the stages.|-100 .. 100 %| -|Feedback|Feedback of the phaser.|-100 .. 100 %| -|Tone|Applies Low Pass filtering (left) or High Pass filtering (right)|-100 .. 100 %| -|Width|Gain scaling of the Side-component of the wet signal.|-24 .. +24 dB| -|Mix|Blend control between the dry and the wet signal.|0 .. 100 %| - -**1** Once disabled, the **Rate** parameter acts like a phase parameter, which can be -scrubbed through and modulated to achieve manual phasing and combing effects. - -
- -### Rotary Speaker - -Rotary speaker simulator algorithm. - -| | | | -|-|-|-| -|Horn rate|Rate of HF horn rotation, the LF horn is a lower multiple of this rate,
Can be tempo-synced.|0.008 .. 512 Hz
64 .. 1/1024 note| -|Rotor Rate|Rotor rate (as a factor of Horn rate).|0 .. 200 %| -|Model|Waveshaper used for distortion.|Soft, Hard, Asymmetric, Sine, Digital| -|Drive|Distortion amount|0 .. 100 %| -|Doppler|The amount of Doppler shift (vibrato).|0 .. 100 %| -|Tremolo|The amount of amplitude modulation.|0 .. 100 %| -|Width|Gain scaling of the side component of the wet signal.|-24 .. +24 dB| -|Mix|Blend control between the dry and the wet signal.|-100 .. +100%| - -
- -### Delay - -The delay algorithm in Surge XT is very versatile and can work well both as -an echo/delay and chorus. - -![Illustration 78: Delay algorithm block diagram](../manual_xt/images/Pictures/illu20.png) - -*Delay algorithm block diagram* - -There is an LFO connected to the delay-lines (not shown in diagram) -which can provide stereo-widening/detuning of the delay-line. - -| | | | -|-|-|-| -|Channel|Routes the two channels to the delay-units by panning.
The gain of the input-channels remain unaffected, it's only
their stereo location that changes. (a sound only heard in the left channel
will still be heard when pan is set to 100% here, but only in the right channel.)|-100 .. 100 %| -|Delay time Left|Delay time for the left channel.
Can be tempo-synced.|0 .. 32 s
1/512 .. 16 whole notes| -|Delay time Right|Delay time for the right channel.
Can be tempo-synced.
Can be linked to left channel.|0 .. 32 s
1/512 .. 16 whole notes| -|Feedback|Amount fed from the channel to its own input.
Can be extended.
Clipping can be configured in its context-menu.|-inf .. 0 dB| -|Crossfeed|Amount fed from the channel to the input of the opposing channel.|-inf .. 0 dB| -|Low/High- cut|EQ controls of the delayed signal.|14Hz .. 25kHz| -|Modulation rate|Rate of the modulation LFO (triangle). |0.008 .. 512 Hz
64 .. 1/1024 note| -|Modulation depth|Indirect control of the modulation LFO depth.
The effect adjust the depth to match the detuning in cents set here.|0 .. 200 cents| -|Width|Gain scaling of the Side-component of the wet signal.|-24 .. 24 dB| -|Mix|Blend control between the dry and the wet signal.|0 .. 100 %| - -
- -### Reverb 1 - -The Reverb 1 algorithm is a classic and older sounding digital reverb. - -| | | | -|-|-|-| -|Pre-Delay|Amount of delay applied to the signal before it is fed to the
reverberation unit.
Can be tempo-synced.|0 .. 32 s
1/512 .. 16 whole notes| -|Room Shape|Selects between 4 room shapes that has different sounds.
(changing this parameter will interrupt the signal)|0 .. 3| -|Size|Changes the apparent size of the simulated room.
(changing this parameter will interrupt the signal)|0 .. 100 %| -|Decay Time|The time it takes for the reverberation to ring-out. (-60 dB)|0 .. 64 s| -|HF Damping|Amount of HF damping applied to the signal inside the reverberator.|0 .. 100 %| -|Low Cut, Peak Freq/Gain, High Cut|Post-reverb equalizer controls.|| -|Width|Gain scaling of the Side-component of the wet signal|-24 .. 24 dB| -|Mix|Blend control between the dry and the wet signal.|0 .. 100 %| - -
- -### Reverb 2 - -The Reverb 2 algorithm is a second version of Surge's original Reverb effect and has a different algorithm and controls. -Reverb 2 is more natural and contains less digital artifacts. For most use cases, Reverb 2 sounds better than Reverb 1. - -| | | | -|-|-|-| -|Pre-Delay|Amount of delay applied to the signal before it is fed to the
reverberation unit.
Can be tempo-synced.|0 .. 2 s
1/512 .. whole notes| -|Room Size|Changes the apparent size of the simulated room.|-100 .. 100 %| -|Decay time|The time it takes for the reverberation to ring-out. (-60 dB)|0 .. 64 s| -|Diffusion|Changes the complexity of the room, thus adjusting diffusion amount|0 .. 100 %| -|Buildup|Controls how long the reverb takes to come to its peak and how
"smeared" in time the effect is.|0 .. 100 %| -|Modulation|Amount of pitch modulation applied to the input for a more lush sound|0 .. 100 %| -|LF/HF Damping|The amount of absorption/reduction for Low or High frequencies|0 .. 100 %| -|Width|Gain scaling of the Side-component of the wet signal|-24 .. 24 dB| -|Mix|Blend control between the dry and the wet signal.|0 .. 100 %| - -
- -### Spring Reverb - -The Spring Reverb algorithm is an emulation of old spring reverb effects. It is based loosely on the -algorithm outlined by Parker ([EURASIP 2011](https://asp-eurasipjournals.springeropen.com/articles/10.1155/2011/646134)). - -| | | | -|-|-|-| -| Size | Size of the springs being used to create the reverb. | 0 .. 100 % | -| Decay | Decay time of the reverb. | 0.5 .. 4.5 s | -| Reflections | Amount of early reflections propagated through the springs. | 0 .. 100 % | -| Damping | Amount of high-frequency damping in the springs. | 0 .. 100 % | -| Spin | Amount of frequency smearing happening in the springs. | 0 .. 100 % | -| Chaos | Amount of random modulation used to excite the springs. | 0 .. 100 % | -| Knock | Emulates the sound of a person knocking against the spring reverb unit. | Off/On | -| Mix | Blend control between the dry and the wet signal. | 0 .. 100 % | - -
- -### Airwindows - -Airwindows effect is an integration of 56 diverse effects by Chris Johnson. -Thanks to Airwindows for providing high quality open source effects! - -You can read more about these effects [here](https://www.airwindows.com/category/free/), -and read the code [here](https://github.com/airwindows/airwindows). - -
- -### Conditioner - -The Conditioner is a simple EQ, stereo image control and a limiter built -into one unit. The limiter applies make-up gain automatically. - -![Illustration 79: Conditioner block diagram](../manual_xt/images/Pictures/tech_conditioner.png) - -| | | | -|-|-|-| -| Bass | LF boost/cut. | \-12 .. +12 dB | -| Treble | HF boost/cut. | \-12 .. +12 dB | -| Width | Stereo width. 0% = mono, 100% = stereo, -100% = reverse stereo. | \-100 .. 100 % | -| Side Low Cut | Low cut filter for the side component. Must be enabled to be used. | 13.75 .. 25087.71 Hz | -| Balance | Stereo balance (left-right). | \-100 .. 100 % | -| Threshold | Limiter threshold level. | \-48 .. 0 dB | -| Attack | Limiter attack rate.
Negative values are faster and positive values are slower.| \-100 .. 100 % | -| Release | Limiter release rate.
Negative values are faster and positive values are slower.| \-100 .. 100 % | -| Output | Limiter output attenuation. | \-48 .. 0 dB | - -
- -### Mid-Side Tool - -The Mid-Side tool is a set of controls useful for transforming a stereo signal to mid-side and vice versa, -with additional separate filtering for the mid and side signal. - -| | | | -|-|-|-| -| (Mid) Low Cut | Low cut filter for mid component. Must be enabled to be used. | 13.75 .. 25087.71 Hz | -| (Mid) Gain | Gain of the mid peak band. Must be enabled (with Frequency) to be used. | -24 .. 24 dB | -| (Mid) Frequency | Frequency of the mid peak band. Must be enabled (with Gain) to be used. | -24 .. 24 dB | -| (Mid) High Cut | Low cut filter for mid component. Must be enabled to be used. | 13.75 .. 25087.71 Hz | -| (Side) Low Cut | Low cut filter for side component. Must be enabled to be used. | 13.75 .. 25087.71 Hz | -| (Side) Gain | Gain of the side peak band. Must be enabled (with Frequency) to be used. | -24 .. 24 dB | -| (Side) Frequency | Frequency of the side peak band. Must be enabled (with Gain) to be used. | -24 .. 24 dB | -| (Side) High Cut | Low cut filter for side component. Must be enabled to be used. | 13.75 .. 25087.71 Hz | -| Mid Gain | Output level of mid component. | -48 .. 12 dB | -| Side Gain | Output level of side component. | -48 .. 12 dB | -| Balance | Stereo balance (left-right). | -100 (Left) .. 100 % (Right) | - -
- -## MIDI CC Information - -The eight macros atop the routing bar have MIDI CCs assigned to them by default. They are as follows: - -**Macro 1** = CC 41 - -**Macro 2** = CC 42 - -**Macro 3** = CC 43 - -**Macro 4** = CC 44 - -**Macro 5** = CC 45 - -**Macro 6** = CC 46 - -**Macro 7** = CC 47 - -**Macro 8** = CC 48 - -
- -# Questions? - -Feel free to visit the Surge Synth Team Discord server [here](https://discord.com/invite/spGANHw) if you have questions -about Surge XT, want to help in developing it further or if you come across any bugs or other issues. diff --git a/nightly-xt.md b/nightly-xt.md deleted file mode 100644 index 29d4c1dd98..0000000000 --- a/nightly-xt.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: page -title: Surge XT Nightly Releases -noheader: true -permalink: nightly_XT ---- - -Current build: {% include latest_xt_version %} built at {% include latest_xt_build_time %} - -You can always find the latest nightly release in every available format here, but for convenience, direct download links for our most popular platforms are below. - - - -Note that the direct links can break for 90-120 seconds while we are releasing a new build, but the all formats link is always valid. - -The draft changelog can be found here. - -Testing the beta is how the release gets good, though! We need and welcome your feedback, either on [GitHub](https://github.com/surge-synthesizer/surge/issues) or -[Discord](https://discord.gg/aFQDdMV). - -Recent changes: - -``` -{% include git_nightly_xt_recent_five %} -``` - -## Caveats - -Please take a moment to understand the nightlies. We automatically build Surge XT on all our -platforms with every commit to our main branch. This means -the code you are about to download may be minutes old. Depending on the pace of development at Surge Synth Team, -the code could contain bugs, new features which don't work, and may even end up making patches that -future Surge versions load differently, incorrectly, or not at all. - - -Our minimum advice if you use a nightly is to use a limiter on the output. We have made DSP errors in the nightlies before -which created nasty clicks and pops, in worst cases sudden blasts of noise. - - -But despite the above warning, we work really hard to have the nightlies be great. Most of Surge Synth Team runs the nightly in their -music-making environment, and the software is generally stable and robust. Also, using the nightly, finding a bug, and letting us -know is how bugs get fixed. For more on that, learn how to contact us with questions and comments. - diff --git a/nightly.md b/nightly.md deleted file mode 100644 index f7a7833bca..0000000000 --- a/nightly.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -layout: page -title: Surge 1.9 Beta -noheader: true -permalink: nightly ---- - -Welcome to the Surge 1.9 Beta site! - -We released Surge 1.8.1 in January 2021, and are planning to release Surge 1.9 in late April -or early May of 2021. The 1.9 release candidate contains many new features, including 4 new oscillators -and 16 new effects! You can read the nightly changelog here. - -There's no real difference between a Surge nightly and a beta, except that late in the release cycle -we get confident that the nightly is pretty good, and so call it a beta. At this point, we think the -bugs are mostly gone, the features all work, and barring an unforseen error, patches made with this -Beta should work in the 1.9 production release, with the following exceptions: - -1. We still have some more modes and behaviors to add to the Alias oscillator, which will likely change its behavior still -2. We may still make some tweaks to the Ensemble effect Clock Rate parameter in BBD modes -3. We are still adapting the FX bank to include all the new features and so there will be UI change coming for sure - -You all testing the beta is how the release gets good, though! We need and welcome your feedback, either on [GitHub](https://github.com/surge-synthesizer/surge/issues) or -on [Discord](https://discord.gg/aFQDdMV). And even though the beta is in pretty good shape, it may still have bugs. Please be -careful, use a limiter, don't use in-ear headphones when experimenting, and so forth, in case we -have made a DSP error and you run across it. - -Finally, enjoy making music with Surge! - - - -Build: {% include latest_version %} built at {% include latest_build_time %} - - - -Details on the most recent change -(diff): - -``` -{% include git_nightly_log_long_display %} -``` - -

-

- -Full git commit history is always available. -The five most recent commits are: - -``` -{% include git_nightly_recent_five %} -``` - -

-

- - - -
- -## Caveats - -Please take a moment to understand the nightlies. We automatically build Surge on all our -platforms with every commit to our main branch. This means -the code you are about to download may be minutes old. Depending on the pace of development at Surge Synth Team, -the code could contain bugs, new features which don't work, and may even end up making patches that -future Surge versions load differently, incorrectly, or not at all. - -Our minimum advice if you use a nightly is to use a limiter on the output. We have made DSP errors in the nightlies before -which created nasty clicks and pops, in worst cases sudden blasts of noise. - -But despite the above warning, we work really hard to have the nightlies be great. Most of Surge Synth Team runs the nightly in their -music-making environment, and the software is generally stable and robust. Also, using the nightly, finding a bug, and letting us -know is how bugs get fixed. For more on that, learn how to contact us with questions and comments. - -We keep the nightly changelog up to date by hand. It can lag the actual nightly by days or weeks, but is available -here. - diff --git a/nightlychangelog.md b/nightlychangelog.md deleted file mode 100644 index 15a89a9c25..0000000000 --- a/nightlychangelog.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -layout: page -title: Nightly Changelog -noheader: true -permalink: nightlychangelog ---- - -# Nightly headed to 1.3 change log - -We plan to release Surge XT 1.3 sometime in mid/late autumn 2023. - -This is up to date as of Aug 13 / 343fbbacbb - -## Open Sound Control -- Surge adds a complete open sound control implementation. For more information, see *what??* - -## A CLI / True-Headless Synth -- we added a pure CLI/No GUI version of the surge synthesizer for total headless playback -- surge-xt-cli (on linux), the cli executable in the standalone bundle (mac). Windows users must - download separately -- Combined with Open Sound Control and MIDI Program Change support, this allows a variety of - new and useful embedded and headless performance options - -## New Effects: Bonsai and Audio In -- Write this - -## DSP Additions and Changes -- The Digital Ring Modulator (RM1x2 and 2x3 in the mixer) gains a large number - alternate combinator modes. -- FM3 M3 frequency extendable down to 0.5 hz -- Oscillator initialization ignored the octave setting. This caused a very small initial - gliss in the String and (in some cases) modern oscillator. Correct this to remove the - gliss -- Sin, FM2, and FM3 get a 'vintage feedback' mode (right mouse the Feedback slider) using a - longer feedback window for slightly smoother feedback results. -- The default Comb Filter buffer is twice as long (4096 samples) allowing lower frequency - physical modelling at high sample rates. Self builders can reduce this size if they need to - preserve memory through a CMake switch. - -## Tuning-related changes -- The tuning editor gets two new visualizations. The "True Keys" mode shows actual keys depressed and the - interval betwene them. The "Radial" mode changes to "Polar" with both a "Radial" and "Angular" mode. -- The tuning editor converts into a tuning analyzer in MTS-ESP mode, showing the new True Keys mode against - MTS-ESP sources -- Option to blanket ignore ODDSound-MTS removed. -- Disconencting from ODDSound-MTS on an instance-by-instance basis is remembered in teh DAW state -- Misleading tuning-related type-ins in 'tune-after-modulation' mode now present accurate errors - - -## MIDI and Performance Changes -- Support MIDI Program Change - - The user patch directory contains a `MIDI Programs` directory - - Patches in the top level form a bank 0 if present - - Subdirectories form bank 0 ... 128 if no top level patches present of 1...127 if so -- Support MIDI learn on all channels by channel -- Disallow learn on reserved MIDI CCs -- Dual scene mode in MPE and Latch-with-23-routing-off mis-released voices, - leaving the non-active scene playing on release. Correct - -## Other Changes -- Patch Save Factoriy Overwrite available with shift-alt-click -- Clap Parameter Menus work -- Clap remote-control pages get an initial implementation -- CLAP polymod works properly with per-channel and per-key polyphonic modulation, whereas - previously it just worked per note -- Standalones with a non-null playhead still ignore it and use the standalone tempo -- Show input latency when block sizes are not power of 32 on the audio-input oscillator and FX -- Use built-in windows for all alerts and notifications, no longer using the JUCE generic alert -- XY drags in the filter window send VST automation events as well as modifying the filter -- Multuple virtual keyboard layouts -- Remove an unused button from the keyboard shortcuts editor which mis-read with screen readers -- Limit wavetable load dialog to .wav and .wt only -- Hide custom menu icons when menus are in accessible-expansion mode -- FX Swap with drag and drop participates in undo -- Add an unassigned-by-default but bindable key for random patch action -- Fix a problem with the use of bold fonts in menus which mis-render menu headers in some macOS situations -- You can mute an entire scene with the scene volume parameter -- Disconnecting from MTS-ESP in a single instance is stored in the DAW state -- The Standalone application works in FullScreen mode. Choose "Zoom/Enter Full Screen" to try. -- The Oscillator Display uses the half rate filter to show the waveform, which shows a - more accurate waveform in a couple of (high noise FM) cases. -- Buttons on the oscilloscope and a few other places use correct hover-off color -- Fix several points where the MSEG could generate or persist NaN values in the editor -- Swapping macro modulators gesture participates in undo - - -## Code Factoring and Quality -- A large number of efforts went to moving code from surge into libraries shared between - surge and shortcircuit including: - - moving many effects to the sst-effects library - - moving fundamental operators to the sst-basic-blocks library - - each of these moves included code improvements of various forms -- With JUCE 7, remove the modibund per-type class extensions -- The entire code base has uniform file comments and header guards -- Centralize our locale based formatting using the libfmt locale -- Remove some uses of `shared_ptr` which dont work with the VCV Rack build environment -- Make sure we properly obey `__restrict` on gcc -- Consistently use `uses_wavetable` for all queries about wavetable usage -- Fix an assumption about parameter layout in FXStorage -- Fix a collection of typos across the code comments - -## Infrastructure -- Upgrade to JUCE 7.0.5 (plus a couple of accesibility patches) -- Remove the LV2 from the binary distribution -- Tweak our CI/Azure strategy to improve time from commit to nightly -- Innclude the mistakenly unincluded for gcc13 -- Surge builds on RPI on 64 bit OS but not 32; fail the 32 bit raspberry pi build earlier -- Expand documentation about polypohnic modulation, about raspberry pi, and others -- Move to catchv3; enable CTest -- Improve unit test runtimes -- Move windows production compiler to CLang -- Move minimum CMake version to 21 -- Move macOS notarization from altool to notarytoool -- Consistently build for macOS 10.9 across all sub-modules -- Fix compile on Clang 15 on macOS - - diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..6a4cd98eee --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7615 @@ +{ + "name": "surge-synthesizer.github.io", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "surge-synthesizer.github.io", + "version": "0.0.1", + "hasInstallScript": true, + "devDependencies": { + "@astrojs/mdx": "latest", + "@astrojs/react": "latest", + "@astrojs/tailwind": "latest", + "@astrojs/ts-plugin": "latest", + "@tailwindcss/typography": "latest", + "@types/node": "latest", + "@types/react": "latest", + "@types/react-dom": "latest", + "astro": "latest", + "autoprefixer": "latest", + "postcss": "latest", + "postcss-load-config": "latest", + "prettier": "latest", + "prettier-plugin-astro": "latest", + "prettier-plugin-tailwindcss": "latest", + "react": "latest", + "react-dom": "latest", + "rollup": "latest", + "shiki": "latest", + "tailwindcss": "latest", + "typescript": "latest" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@astrojs/compiler": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-1.5.7.tgz", + "integrity": "sha512-dFU7GAMbpTUGPkRoCoMQrGFlTe3qIiQMSOxIXp/nB1Do4My9uogjEmBHdR5Cwr4i6rc5/1R3Od9v8kU/pkHXGQ==", + "dev": true + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.1.2.tgz", + "integrity": "sha512-YXLk1CUDdC9P5bjFZcGjz+cE/ZDceXObDTXn/GCID4r8LjThuexxi+dlJqukmUpkSItzQqgzfWnrPLxSFPejdA==", + "dev": true + }, + "node_modules/@astrojs/language-server": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-1.0.8.tgz", + "integrity": "sha512-gssRxLGb8XnvKpqSzrDW5jdzdFnXD7eBXVkPCkkt2hv7Qzb+SAzv6hVgMok3jDCxpR1aeB+XNd9Qszj2h29iog==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "^1.4.2", + "@jridgewell/trace-mapping": "^0.3.14", + "@vscode/emmet-helper": "^2.8.4", + "events": "^3.3.0", + "prettier": "^2.8.8", + "prettier-plugin-astro": "^0.9.1", + "vscode-css-languageservice": "^6.2.1", + "vscode-html-languageservice": "^5.0.0", + "vscode-languageserver": "^8.0.1", + "vscode-languageserver-protocol": "^3.17.1", + "vscode-languageserver-textdocument": "^1.0.4", + "vscode-languageserver-types": "^3.17.1", + "vscode-uri": "^3.0.3" + }, + "bin": { + "astro-ls": "bin/nodeServer.js" + } + }, + "node_modules/@astrojs/language-server/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@astrojs/language-server/node_modules/prettier-plugin-astro": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.9.1.tgz", + "integrity": "sha512-pYZXSbdq0eElvzoIMArzv1SBn1NUXzopjlcnt6Ql8VW32PjC12NovwBjXJ6rh8qQLi7vF8jNqAbraKW03UPfag==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "^1.0.1", + "prettier": "^2.8.3", + "sass-formatter": "^0.7.5", + "synckit": "^0.8.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0", + "pnpm": ">=7.14.0" + } + }, + "node_modules/@astrojs/markdown-remark": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-2.2.1.tgz", + "integrity": "sha512-VF0HRv4GpC1XEMLnsKf6jth7JSmlt9qpqP0josQgA2eSpCIAC/Et+y94mgdBIZVBYH/yFnMoIxgKVe93xfO2GA==", + "dev": true, + "dependencies": { + "@astrojs/prism": "^2.1.2", + "github-slugger": "^1.4.0", + "import-meta-resolve": "^2.1.0", + "rehype-raw": "^6.1.1", + "rehype-stringify": "^9.0.3", + "remark-gfm": "^3.0.1", + "remark-parse": "^10.0.1", + "remark-rehype": "^10.1.0", + "remark-smartypants": "^2.0.0", + "shiki": "^0.14.1", + "unified": "^10.1.2", + "unist-util-visit": "^4.1.0", + "vfile": "^5.3.2" + }, + "peerDependencies": { + "astro": "^2.5.0" + } + }, + "node_modules/@astrojs/mdx": { + "version": "0.19.7", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-0.19.7.tgz", + "integrity": "sha512-mfEbBD7oi8yBHhcJucEjnrquREkJ3os+jioURP8BR2B8tOV2rV2j8trvmLUgfS+P/+HevGObxCTjcRYxn6T7eg==", + "dev": true, + "dependencies": { + "@astrojs/markdown-remark": "^2.2.1", + "@astrojs/prism": "^2.1.2", + "@mdx-js/mdx": "^2.3.0", + "acorn": "^8.8.0", + "es-module-lexer": "^1.1.1", + "estree-util-visit": "^1.2.0", + "github-slugger": "^1.4.0", + "gray-matter": "^4.0.3", + "hast-util-to-html": "^8.0.4", + "kleur": "^4.1.4", + "rehype-raw": "^6.1.1", + "remark-frontmatter": "^4.0.1", + "remark-gfm": "^3.0.1", + "remark-smartypants": "^2.0.0", + "shiki": "^0.14.1", + "source-map": "^0.7.4", + "unist-util-visit": "^4.1.0", + "vfile": "^5.3.2" + }, + "engines": { + "node": ">=16.12.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-2.1.2.tgz", + "integrity": "sha512-3antim1gb34689GHRQFJ88JEo93HuZKQBnmxDT5W/nxiNz1p/iRxnCTEhIbJhqMOTRbbo5h2ldm5qSxx+TMFQA==", + "dev": true, + "dependencies": { + "prismjs": "^1.28.0" + }, + "engines": { + "node": ">=16.12.0" + } + }, + "node_modules/@astrojs/react": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-2.3.2.tgz", + "integrity": "sha512-hGOnvLA7xA0rry0tr0g0LiO7bsYK9yyrs0k+OVakVkXsWgBVgqXI2a2KBVc/W+vOBB9mFXMG4EnrqdMPcttT5Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "ultrahtml": "^1.2.0" + }, + "engines": { + "node": ">=16.12.0" + }, + "peerDependencies": { + "@types/react": "^17.0.50 || ^18.0.21", + "@types/react-dom": "^17.0.17 || ^18.0.6", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0" + } + }, + "node_modules/@astrojs/tailwind": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-4.0.0.tgz", + "integrity": "sha512-HmCAXFFes7MUBt5ihdfH1goa8QyGkHejIpz6Z4XBKK9VNYY9G2E3brCn8+pNn5zAOzcwl3FYcuH2AiOa/NGoMQ==", + "dev": true, + "dependencies": { + "autoprefixer": "^10.4.14", + "postcss": "^8.4.24", + "postcss-load-config": "^4.0.1" + }, + "peerDependencies": { + "astro": "^2.6.5", + "tailwindcss": "^3.0.24" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-2.1.1.tgz", + "integrity": "sha512-4pRhyeQr0MLB5PKYgkdu+YE8sSpMbHL8dUuslBWBIdgcYjtD1SufPMBI8pgXJ+xlwrQJHKKfK2X1KonHYuOS9A==", + "dev": true, + "dependencies": { + "ci-info": "^3.3.1", + "debug": "^4.3.4", + "dlv": "^1.1.3", + "dset": "^3.1.2", + "is-docker": "^3.0.0", + "is-wsl": "^2.2.0", + "undici": "^5.22.0", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": ">=16.12.0" + } + }, + "node_modules/@astrojs/ts-plugin": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@astrojs/ts-plugin/-/ts-plugin-1.1.3.tgz", + "integrity": "sha512-nErNpgHGMzOOBHmUdml3cEZv4nxowGpO4G+IfAsPBQXOKLLGbVXzNpIGrdIthk3ryGD3jsYOKBvv2/PrnTkRdA==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "1.5.7", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@volar/language-core": "~1.10.0", + "@volar/typescript": "~1.10.0", + "vscode-languageserver-textdocument": "^1.0.8" + } + }, + "node_modules/@astrojs/webapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@astrojs/webapi/-/webapi-2.2.0.tgz", + "integrity": "sha512-mHAOApWyjqSe5AQMOUD9rsZJqbMQqe3Wosb1a40JV6Okvyxj1G6GTlthwYadWCymq/lbgwh0PLiY8Fr4eFxtuQ==", + "dev": true, + "dependencies": { + "undici": "^5.22.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", + "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.11", + "@babel/parser": "^7.22.11", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", + "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.13.tgz", + "integrity": "sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", + "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.11", + "@babel/types": "^7.22.11", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", + "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==", + "dev": true + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.3.0.tgz", + "integrity": "sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/mdx": "^2.0.0", + "estree-util-build-jsx": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-util-to-js": "^1.1.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^2.0.0", + "markdown-extensions": "^1.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^2.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "unified": "^10.0.0", + "unist-util-position-from-estree": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz", + "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==", + "dev": true, + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/dom-view-transitions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/dom-view-transitions/-/dom-view-transitions-1.0.1.tgz", + "integrity": "sha512-A9S1ijj/4MX06I1W/6on8lhaYyq1Ir7gaOvfllW1o4RzVWW88HAeqX0pUx9VgOLnNpdiGeUW2CTkg18p5LWIrA==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.5.tgz", + "integrity": "sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/json5": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.30.tgz", + "integrity": "sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.7.tgz", + "integrity": "sha512-BG4tyr+4amr3WsSEmHn/fXPqaCba/AYZ7dsaQTiavihQunHSIxk+uAtqsjvicNpyHN6cm+B9RVrUOtW9VzIKHw==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/nlcst": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.1.tgz", + "integrity": "sha512-aVIyXt6pZiiMOtVByE4Y0gf+BLm1Cxc4ZLSK8VRHn1CgkO+kXbQwN/EBhQmhPdBMjFJCMBKtmNW2zWQuFywz8Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/node": { + "version": "20.5.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", + "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", + "dev": true + }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", + "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==", + "dev": true + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@volar/language-core": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.10.1.tgz", + "integrity": "sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.10.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.10.1.tgz", + "integrity": "sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.10.1.tgz", + "integrity": "sha512-+iiO9yUSRHIYjlteT+QcdRq8b44qH19/eiUZtjNtuh6D9ailYM7DVR0zO2sEgJlvCaunw/CF9Ov2KooQBpR4VQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.10.1" + } + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.2.tgz", + "integrity": "sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==", + "dev": true, + "dependencies": { + "emmet": "^2.4.3", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^2.1.2" + } + }, + "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", + "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", + "dev": true + }, + "node_modules/@vscode/l10n": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.14.tgz", + "integrity": "sha512-/yrv59IEnmh655z1oeDnGcvMYwnEzNzHLgeYcQCkhYX0xBvYWrAuefoiLcPBUkMpJsb46bqQ6Yv4pwTTQ4d3Qg==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/astring": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", + "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "dev": true, + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "2.10.14", + "resolved": "https://registry.npmjs.org/astro/-/astro-2.10.14.tgz", + "integrity": "sha512-02k2DjnI8yGtLCvdCSggvfCTkTWPm9UDgc/XHKdd1K34TSTl3X0A8TTYbASEXvgynk1zInCyOEe3IUDt3Lke+A==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "^1.8.0", + "@astrojs/internal-helpers": "^0.1.2", + "@astrojs/language-server": "^1.0.0", + "@astrojs/markdown-remark": "^2.2.1", + "@astrojs/telemetry": "^2.1.1", + "@astrojs/webapi": "^2.2.0", + "@babel/core": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "@types/babel__core": "^7.20.1", + "@types/dom-view-transitions": "^1.0.1", + "@types/yargs-parser": "^21.0.0", + "acorn": "^8.9.0", + "boxen": "^6.2.1", + "chokidar": "^3.5.3", + "ci-info": "^3.8.0", + "common-ancestor-path": "^1.0.1", + "cookie": "^0.5.0", + "debug": "^4.3.4", + "devalue": "^4.3.2", + "diff": "^5.1.0", + "es-module-lexer": "^1.3.0", + "esbuild": "^0.17.19", + "estree-walker": "3.0.0", + "execa": "^6.1.0", + "fast-glob": "^3.2.12", + "github-slugger": "^2.0.0", + "gray-matter": "^4.0.3", + "html-escaper": "^3.0.3", + "http-cache-semantics": "^4.1.1", + "js-yaml": "^4.1.0", + "kleur": "^4.1.4", + "magic-string": "^0.30.2", + "mime": "^3.0.0", + "network-information-types": "^0.1.1", + "ora": "^6.3.1", + "p-limit": "^4.0.0", + "path-to-regexp": "^6.2.1", + "preferred-pm": "^3.0.3", + "prompts": "^2.4.2", + "rehype": "^12.0.1", + "semver": "^7.5.3", + "server-destroy": "^1.0.1", + "shiki": "^0.14.1", + "string-width": "^5.1.2", + "strip-ansi": "^7.1.0", + "tsconfig-resolver": "^3.0.1", + "typescript": "*", + "unist-util-visit": "^4.1.2", + "vfile": "^5.3.7", + "vite": "^4.4.6", + "vitefu": "^0.2.4", + "which-pm": "^2.0.0", + "yargs-parser": "^21.1.1", + "zod": "^3.20.6" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": ">=16.12.0", + "npm": ">=6.14.0" + }, + "peerDependencies": { + "sharp": ">=0.31.0" + }, + "peerDependenciesMeta": { + "sharp": { + "optional": true + } + } + }, + "node_modules/astro/node_modules/@astrojs/compiler": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-1.8.2.tgz", + "integrity": "sha512-o/ObKgtMzl8SlpIdzaxFnt7SATKPxu4oIP/1NL+HDJRzxfJcAkOTAb/ZKMRyULbz4q+1t2/DAebs2Z1QairkZw==", + "dev": true + }, + "node_modules/astro/node_modules/estree-walker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.0.tgz", + "integrity": "sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ==", + "dev": true + }, + "node_modules/astro/node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true + }, + "node_modules/astro/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/astro/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/astro/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001524", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", + "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/devalue": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", + "dev": true + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dset": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.503", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz", + "integrity": "sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==", + "dev": true + }, + "node_modules/emmet": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.6.tgz", + "integrity": "sha512-dJfbdY/hfeTyf/Ef7Y7ubLYzkBvPQ912wPaeVYpAxvFxkEBf/+hJu4H6vhAvFN6HlxqedlfVn2x1S44FfQ97pg==", + "dev": true, + "dependencies": { + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz", + "integrity": "sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz", + "integrity": "sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", + "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz", + "integrity": "sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", + "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dev": true, + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root2": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", + "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2", + "pkg-dir": "^4.2.0" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/fraction.js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz", + "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", + "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "hastscript": "^7.0.0", + "property-information": "^6.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", + "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/parse5": "^6.0.0", + "hast-util-from-parse5": "^7.0.0", + "hast-util-to-parse5": "^7.0.0", + "html-void-elements": "^2.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz", + "integrity": "sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.1", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz", + "integrity": "sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^7.0.0", + "hast-util-whitespace": "^2.0.0", + "html-void-elements": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", + "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", + "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "dev": true + }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "dev": true + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-reference": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", + "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jiti": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", + "integrity": "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/load-yaml-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", + "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.13.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/load-yaml-file/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/load-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", + "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/markdown-extensions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", + "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", + "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", + "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz", + "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-extension-frontmatter": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", + "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", + "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", + "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", + "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", + "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", + "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", + "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", + "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "mdast-util-from-markdown": "^1.1.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", + "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", + "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-definitions": "^5.0.0", + "micromark-util-sanitize-uri": "^1.1.0", + "trim-lines": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-frontmatter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz", + "integrity": "sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==", + "dev": true, + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", + "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", + "dev": true, + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", + "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", + "dev": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", + "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", + "dev": true, + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", + "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", + "dev": true, + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", + "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", + "dev": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", + "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", + "dev": true, + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", + "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", + "dev": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz", + "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", + "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", + "dev": true, + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", + "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", + "dev": true, + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", + "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", + "dev": true, + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", + "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz", + "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz", + "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^2.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/network-information-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/network-information-types/-/network-information-types-0.1.1.tgz", + "integrity": "sha512-mLXNafJYOkiJB6IlF727YWssTRpXitR+tKSLyA5VAdBi3SOvLf5gtizHgxf241YHPWocnAO/fAhVrB/68tPHDw==", + "dev": true, + "peerDependencies": { + "typescript": ">= 3.0.0" + } + }, + "node_modules/nlcst-to-string": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz", + "integrity": "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-latin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-5.0.1.tgz", + "integrity": "sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==", + "dev": true, + "dependencies": { + "nlcst-to-string": "^3.0.0", + "unist-util-modify-children": "^3.0.0", + "unist-util-visit-children": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/preferred-pm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz", + "integrity": "sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "find-yarn-workspace-root2": "1.2.16", + "path-exists": "^4.0.0", + "which-pm": "2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prettier": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", + "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-astro": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.12.0.tgz", + "integrity": "sha512-8E+9YQR6/5CPZJs8XsfBw579zrwZkc0Wb7x0fRVm/51JC8Iys4lBw4ecV8fHwpbQnzve86TUa4fJ08BJzqfWnA==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "^1.5.5", + "prettier": "^3.0.0", + "sass-formatter": "^0.7.6" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.3.tgz", + "integrity": "sha512-M5K80V21yM+CTm/FEFYRv9/9LyInYbCSXpIoPAKMm8zy89IOwdiA2e4JVbcO7tvRtAQWz32zdj7/WKcsmFyAVg==", + "dev": true, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@shufo/prettier-plugin-blade": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@shufo/prettier-plugin-blade": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + }, + "prettier-plugin-twig-melody": { + "optional": true + } + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rehype": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz", + "integrity": "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "rehype-parse": "^8.0.0", + "rehype-stringify": "^9.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.5.tgz", + "integrity": "sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^6.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz", + "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-raw": "^7.2.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.4.tgz", + "integrity": "sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-frontmatter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", + "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-frontmatter": "^1.0.0", + "micromark-extension-frontmatter": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", + "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", + "dev": true, + "dependencies": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", + "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-2.0.0.tgz", + "integrity": "sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==", + "dev": true, + "dependencies": { + "retext": "^8.1.0", + "retext-smartypants": "^5.1.0", + "unist-util-visit": "^4.1.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retext": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz", + "integrity": "sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0", + "retext-latin": "^3.0.0", + "retext-stringify": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-3.1.0.tgz", + "integrity": "sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0", + "parse-latin": "^5.0.0", + "unherit": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-5.2.0.tgz", + "integrity": "sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0", + "nlcst-to-string": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-3.1.0.tgz", + "integrity": "sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0", + "nlcst-to-string": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "3.28.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", + "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/s.color": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz", + "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sass-formatter": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.7.tgz", + "integrity": "sha512-axtQ7c7Cf4UgHsD8e4okhIkkc90+tdgBIfUMx69+qJuMNq9EOo2k+RH/mDKj0XeA5z3nC1Ca5TCntuxRhI+1MA==", + "dev": true, + "dependencies": { + "suf-log": "^2.5.3" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.3.tgz", + "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/shiki/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dev": true, + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.2.tgz", + "integrity": "sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==", + "dev": true, + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/suf-log": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", + "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==", + "dev": true, + "dependencies": { + "s.color": "0.0.15" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tsconfig-resolver": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tsconfig-resolver/-/tsconfig-resolver-3.0.1.tgz", + "integrity": "sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.30", + "@types/resolve": "^1.17.0", + "json5": "^2.1.3", + "resolve": "^1.17.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.13.1" + }, + "funding": { + "url": "https://github.com/sponsors/ifiokjr" + } + }, + "node_modules/tsconfig-resolver/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ultrahtml": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.3.0.tgz", + "integrity": "sha512-xmXvE8tC8t4PVqy0/g1fe7H9USY/Brr425q4dD/0QbQMQit7siCtb06+SCqE4GfU24nwsZz8Th1g7L7mm1lL5g==", + "dev": true + }, + "node_modules/undici": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz", + "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/unherit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz", + "integrity": "sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", + "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-3.1.1.tgz", + "integrity": "sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", + "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", + "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", + "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-2.0.2.tgz", + "integrity": "sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", + "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vitefu": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", + "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vscode-css-languageservice": { + "version": "6.2.6", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.2.6.tgz", + "integrity": "sha512-SA2WkeOecIpUiEbZnjOsP/fI5CRITZEiQGSHXKiDQDwLApfKcnLhZwMtOBbIifSzESVcQa7b/shX/nbnF4NoCg==", + "dev": true, + "dependencies": { + "@vscode/l10n": "^0.0.14", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-languageserver-types": "^3.17.3", + "vscode-uri": "^3.0.7" + } + }, + "node_modules/vscode-html-languageservice": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.0.6.tgz", + "integrity": "sha512-gCixNg6fjPO7+kwSMBAVXcwDRHdjz1WOyNfI0n5Wx0J7dfHG8ggb3zD1FI8E2daTZrwS1cooOiSoc1Xxph4qRQ==", + "dev": true, + "dependencies": { + "@vscode/l10n": "^0.0.14", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-languageserver-types": "^3.17.3", + "vscode-uri": "^3.0.7" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", + "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", + "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.17.3" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", + "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver-types": "3.17.3" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", + "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==", + "dev": true + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-pm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", + "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", + "dev": true, + "dependencies": { + "load-yaml-file": "^0.2.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8.15" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dev": true, + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.22.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", + "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..38a3a425f9 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "surge-synthesizer.github.io", + "version": "0.0.1", + "type": "module", + "scripts": { + "astro": "astro", + "dev": "astro dev", + "host": "astro dev --host", + "build": "astro build", + "preview": "astro preview", + "preinstall": "astro telemetry disable" + }, + "devDependencies": { + "@astrojs/mdx": "latest", + "@astrojs/react": "latest", + "@astrojs/tailwind": "latest", + "@astrojs/ts-plugin": "latest", + "@tailwindcss/typography": "latest", + "@types/node": "latest", + "@types/react": "latest", + "@types/react-dom": "latest", + "astro": "latest", + "autoprefixer": "latest", + "postcss": "latest", + "postcss-load-config": "latest", + "prettier": "latest", + "prettier-plugin-astro": "latest", + "prettier-plugin-tailwindcss": "latest", + "react": "latest", + "react-dom": "latest", + "rollup": "latest", + "shiki": "latest", + "tailwindcss": "latest", + "typescript": "latest" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000..7f1f95f3f2 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4362 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + '@astrojs/mdx': + specifier: latest + version: 0.19.7(astro@2.10.14) + '@astrojs/react': + specifier: latest + version: 2.3.2(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0) + '@astrojs/tailwind': + specifier: latest + version: 4.0.0(astro@2.10.14)(tailwindcss@3.3.3) + '@astrojs/ts-plugin': + specifier: latest + version: 1.1.3 + '@tailwindcss/typography': + specifier: latest + version: 0.5.9(tailwindcss@3.3.3) + '@types/node': + specifier: latest + version: 20.5.7 + '@types/react': + specifier: latest + version: 18.2.21 + '@types/react-dom': + specifier: latest + version: 18.2.7 + astro: + specifier: latest + version: 2.10.14(@types/node@20.5.7) + autoprefixer: + specifier: latest + version: 10.4.15(postcss@8.4.28) + postcss: + specifier: latest + version: 8.4.28 + postcss-load-config: + specifier: latest + version: 4.0.1(postcss@8.4.28) + prettier: + specifier: latest + version: 3.0.2 + prettier-plugin-astro: + specifier: latest + version: 0.12.0 + prettier-plugin-tailwindcss: + specifier: latest + version: 0.5.3(prettier-plugin-astro@0.12.0)(prettier@3.0.2) + react: + specifier: latest + version: 18.2.0 + react-dom: + specifier: latest + version: 18.2.0(react@18.2.0) + rollup: + specifier: latest + version: 3.28.1 + shiki: + specifier: latest + version: 0.14.3 + tailwindcss: + specifier: latest + version: 3.3.3 + typescript: + specifier: latest + version: 5.2.2 + +packages: + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + dev: true + + /@astrojs/compiler@1.5.7: + resolution: {integrity: sha512-dFU7GAMbpTUGPkRoCoMQrGFlTe3qIiQMSOxIXp/nB1Do4My9uogjEmBHdR5Cwr4i6rc5/1R3Od9v8kU/pkHXGQ==} + dev: true + + /@astrojs/compiler@1.8.2: + resolution: {integrity: sha512-o/ObKgtMzl8SlpIdzaxFnt7SATKPxu4oIP/1NL+HDJRzxfJcAkOTAb/ZKMRyULbz4q+1t2/DAebs2Z1QairkZw==} + dev: true + + /@astrojs/internal-helpers@0.1.2: + resolution: {integrity: sha512-YXLk1CUDdC9P5bjFZcGjz+cE/ZDceXObDTXn/GCID4r8LjThuexxi+dlJqukmUpkSItzQqgzfWnrPLxSFPejdA==} + dev: true + + /@astrojs/language-server@1.0.8: + resolution: {integrity: sha512-gssRxLGb8XnvKpqSzrDW5jdzdFnXD7eBXVkPCkkt2hv7Qzb+SAzv6hVgMok3jDCxpR1aeB+XNd9Qszj2h29iog==} + hasBin: true + dependencies: + '@astrojs/compiler': 1.8.2 + '@jridgewell/trace-mapping': 0.3.19 + '@vscode/emmet-helper': 2.9.2 + events: 3.3.0 + prettier: 2.8.8 + prettier-plugin-astro: 0.9.1 + vscode-css-languageservice: 6.2.6 + vscode-html-languageservice: 5.0.6 + vscode-languageserver: 8.1.0 + vscode-languageserver-protocol: 3.17.3 + vscode-languageserver-textdocument: 1.0.8 + vscode-languageserver-types: 3.17.3 + vscode-uri: 3.0.7 + dev: true + + /@astrojs/markdown-remark@2.2.1(astro@2.10.14): + resolution: {integrity: sha512-VF0HRv4GpC1XEMLnsKf6jth7JSmlt9qpqP0josQgA2eSpCIAC/Et+y94mgdBIZVBYH/yFnMoIxgKVe93xfO2GA==} + peerDependencies: + astro: ^2.5.0 + dependencies: + '@astrojs/prism': 2.1.2 + astro: 2.10.14(@types/node@20.5.7) + github-slugger: 1.5.0 + import-meta-resolve: 2.2.2 + rehype-raw: 6.1.1 + rehype-stringify: 9.0.4 + remark-gfm: 3.0.1 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + remark-smartypants: 2.0.0 + shiki: 0.14.3 + unified: 10.1.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@astrojs/mdx@0.19.7(astro@2.10.14): + resolution: {integrity: sha512-mfEbBD7oi8yBHhcJucEjnrquREkJ3os+jioURP8BR2B8tOV2rV2j8trvmLUgfS+P/+HevGObxCTjcRYxn6T7eg==} + engines: {node: '>=16.12.0'} + dependencies: + '@astrojs/markdown-remark': 2.2.1(astro@2.10.14) + '@astrojs/prism': 2.1.2 + '@mdx-js/mdx': 2.3.0 + acorn: 8.10.0 + es-module-lexer: 1.3.0 + estree-util-visit: 1.2.1 + github-slugger: 1.5.0 + gray-matter: 4.0.3 + hast-util-to-html: 8.0.4 + kleur: 4.1.5 + rehype-raw: 6.1.1 + remark-frontmatter: 4.0.1 + remark-gfm: 3.0.1 + remark-smartypants: 2.0.0 + shiki: 0.14.3 + source-map: 0.7.4 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - astro + - supports-color + dev: true + + /@astrojs/prism@2.1.2: + resolution: {integrity: sha512-3antim1gb34689GHRQFJ88JEo93HuZKQBnmxDT5W/nxiNz1p/iRxnCTEhIbJhqMOTRbbo5h2ldm5qSxx+TMFQA==} + engines: {node: '>=16.12.0'} + dependencies: + prismjs: 1.29.0 + dev: true + + /@astrojs/react@2.3.2(@types/react-dom@18.2.7)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-hGOnvLA7xA0rry0tr0g0LiO7bsYK9yyrs0k+OVakVkXsWgBVgqXI2a2KBVc/W+vOBB9mFXMG4EnrqdMPcttT5Q==} + engines: {node: '>=16.12.0'} + peerDependencies: + '@types/react': ^17.0.50 || ^18.0.21 + '@types/react-dom': ^17.0.17 || ^18.0.6 + react: ^17.0.2 || ^18.0.0 + react-dom: ^17.0.2 || ^18.0.0 + dependencies: + '@babel/core': 7.22.11 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.11) + '@types/react': 18.2.21 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + ultrahtml: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@astrojs/tailwind@4.0.0(astro@2.10.14)(tailwindcss@3.3.3): + resolution: {integrity: sha512-HmCAXFFes7MUBt5ihdfH1goa8QyGkHejIpz6Z4XBKK9VNYY9G2E3brCn8+pNn5zAOzcwl3FYcuH2AiOa/NGoMQ==} + peerDependencies: + astro: ^2.6.5 + tailwindcss: ^3.0.24 + dependencies: + astro: 2.10.14(@types/node@20.5.7) + autoprefixer: 10.4.15(postcss@8.4.28) + postcss: 8.4.28 + postcss-load-config: 4.0.1(postcss@8.4.28) + tailwindcss: 3.3.3 + transitivePeerDependencies: + - ts-node + dev: true + + /@astrojs/telemetry@2.1.1: + resolution: {integrity: sha512-4pRhyeQr0MLB5PKYgkdu+YE8sSpMbHL8dUuslBWBIdgcYjtD1SufPMBI8pgXJ+xlwrQJHKKfK2X1KonHYuOS9A==} + engines: {node: '>=16.12.0'} + dependencies: + ci-info: 3.8.0 + debug: 4.3.4 + dlv: 1.1.3 + dset: 3.1.2 + is-docker: 3.0.0 + is-wsl: 2.2.0 + undici: 5.23.0 + which-pm-runs: 1.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@astrojs/ts-plugin@1.1.3: + resolution: {integrity: sha512-nErNpgHGMzOOBHmUdml3cEZv4nxowGpO4G+IfAsPBQXOKLLGbVXzNpIGrdIthk3ryGD3jsYOKBvv2/PrnTkRdA==} + dependencies: + '@astrojs/compiler': 1.5.7 + '@jridgewell/sourcemap-codec': 1.4.15 + '@volar/language-core': 1.10.1 + '@volar/typescript': 1.10.1 + vscode-languageserver-textdocument: 1.0.8 + dev: true + + /@astrojs/webapi@2.2.0: + resolution: {integrity: sha512-mHAOApWyjqSe5AQMOUD9rsZJqbMQqe3Wosb1a40JV6Okvyxj1G6GTlthwYadWCymq/lbgwh0PLiY8Fr4eFxtuQ==} + dependencies: + undici: 5.23.0 + dev: true + + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.13 + chalk: 2.4.2 + dev: true + + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.22.11: + resolution: {integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.10 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) + '@babel/helpers': 7.22.11 + '@babel/parser': 7.22.13 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.11 + '@babel/types': 7.22.11 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.22.10: + resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + dev: true + + /@babel/helper-compilation-targets@7.22.10: + resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.10 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.11 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + dev: true + + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + dev: true + + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.11 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.22.11: + resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.11 + '@babel/types': 7.22.11 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.22.13: + resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.22.13: + resolution: {integrity: sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.11 + dev: true + + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.11): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.11): + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.11) + '@babel/types': 7.22.11 + dev: true + + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.22.13 + '@babel/types': 7.22.11 + dev: true + + /@babel/traverse@7.22.11: + resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.22.10 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.13 + '@babel/types': 7.22.11 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.22.11: + resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + dev: true + + /@emmetio/abbreviation@2.3.3: + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + dependencies: + '@emmetio/scanner': 1.0.4 + dev: true + + /@emmetio/css-abbreviation@2.1.8: + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + dependencies: + '@emmetio/scanner': 1.0.4 + dev: true + + /@emmetio/scanner@1.0.4: + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + dev: true + + /@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.17.19: + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.17.19: + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.17.19: + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.17.19: + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.17.19: + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.17.19: + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.17.19: + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.17.19: + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.17.19: + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.17.19: + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.17.19: + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.17.19: + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.17.19: + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.17.19: + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.17.19: + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.17.19: + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.17.19: + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@mdx-js/mdx@2.3.0: + resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/mdx': 2.0.7 + estree-util-build-jsx: 2.2.2 + estree-util-is-identifier-name: 2.1.0 + estree-util-to-js: 1.2.0 + estree-walker: 3.0.3 + hast-util-to-estree: 2.3.3 + markdown-extensions: 1.1.1 + periscopic: 3.1.0 + remark-mdx: 2.3.0 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.2 + unist-util-stringify-position: 3.0.3 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.1 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true + + /@tailwindcss/typography@0.5.9(tailwindcss@3.3.3): + resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.3.3 + dev: true + + /@types/acorn@4.0.6: + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 1.0.1 + dev: true + + /@types/babel__core@7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + dependencies: + '@babel/parser': 7.22.13 + '@babel/types': 7.22.11 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.20.1 + dev: true + + /@types/babel__generator@7.6.4: + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + dependencies: + '@babel/types': 7.22.11 + dev: true + + /@types/babel__template@7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + dependencies: + '@babel/parser': 7.22.13 + '@babel/types': 7.22.11 + dev: true + + /@types/babel__traverse@7.20.1: + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + dependencies: + '@babel/types': 7.22.11 + dev: true + + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + dependencies: + '@types/ms': 0.7.31 + dev: true + + /@types/dom-view-transitions@1.0.1: + resolution: {integrity: sha512-A9S1ijj/4MX06I1W/6on8lhaYyq1Ir7gaOvfllW1o4RzVWW88HAeqX0pUx9VgOLnNpdiGeUW2CTkg18p5LWIrA==} + dev: true + + /@types/estree-jsx@1.0.0: + resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} + dependencies: + '@types/estree': 1.0.1 + dev: true + + /@types/estree@1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + dev: true + + /@types/hast@2.3.5: + resolution: {integrity: sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==} + dependencies: + '@types/unist': 2.0.7 + dev: true + + /@types/json5@0.0.30: + resolution: {integrity: sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==} + dev: true + + /@types/mdast@3.0.12: + resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==} + dependencies: + '@types/unist': 2.0.7 + dev: true + + /@types/mdx@2.0.7: + resolution: {integrity: sha512-BG4tyr+4amr3WsSEmHn/fXPqaCba/AYZ7dsaQTiavihQunHSIxk+uAtqsjvicNpyHN6cm+B9RVrUOtW9VzIKHw==} + dev: true + + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true + + /@types/nlcst@1.0.1: + resolution: {integrity: sha512-aVIyXt6pZiiMOtVByE4Y0gf+BLm1Cxc4ZLSK8VRHn1CgkO+kXbQwN/EBhQmhPdBMjFJCMBKtmNW2zWQuFywz8Q==} + dependencies: + '@types/unist': 2.0.7 + dev: true + + /@types/node@20.5.7: + resolution: {integrity: sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==} + dev: true + + /@types/parse5@6.0.3: + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + dev: true + + /@types/prop-types@15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: true + + /@types/react-dom@18.2.7: + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + dependencies: + '@types/react': 18.2.21 + dev: true + + /@types/react@18.2.21: + resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.2 + dev: true + + /@types/resolve@1.20.2: + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + dev: true + + /@types/scheduler@0.16.3: + resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + dev: true + + /@types/unist@2.0.7: + resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} + dev: true + + /@types/yargs-parser@21.0.0: + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + dev: true + + /@volar/language-core@1.10.1: + resolution: {integrity: sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==} + dependencies: + '@volar/source-map': 1.10.1 + dev: true + + /@volar/source-map@1.10.1: + resolution: {integrity: sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==} + dependencies: + muggle-string: 0.3.1 + dev: true + + /@volar/typescript@1.10.1: + resolution: {integrity: sha512-+iiO9yUSRHIYjlteT+QcdRq8b44qH19/eiUZtjNtuh6D9ailYM7DVR0zO2sEgJlvCaunw/CF9Ov2KooQBpR4VQ==} + dependencies: + '@volar/language-core': 1.10.1 + dev: true + + /@vscode/emmet-helper@2.9.2: + resolution: {integrity: sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==} + dependencies: + emmet: 2.4.6 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.8 + vscode-languageserver-types: 3.17.3 + vscode-uri: 2.1.2 + dev: true + + /@vscode/l10n@0.0.14: + resolution: {integrity: sha512-/yrv59IEnmh655z1oeDnGcvMYwnEzNzHLgeYcQCkhYX0xBvYWrAuefoiLcPBUkMpJsb46bqQ6Yv4pwTTQ4d3Qg==} + dev: true + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-sequence-parser@1.1.1: + resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + dev: true + + /astring@1.8.6: + resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + hasBin: true + dev: true + + /astro@2.10.14(@types/node@20.5.7): + resolution: {integrity: sha512-02k2DjnI8yGtLCvdCSggvfCTkTWPm9UDgc/XHKdd1K34TSTl3X0A8TTYbASEXvgynk1zInCyOEe3IUDt3Lke+A==} + engines: {node: '>=16.12.0', npm: '>=6.14.0'} + hasBin: true + peerDependencies: + sharp: '>=0.31.0' + peerDependenciesMeta: + sharp: + optional: true + dependencies: + '@astrojs/compiler': 1.8.2 + '@astrojs/internal-helpers': 0.1.2 + '@astrojs/language-server': 1.0.8 + '@astrojs/markdown-remark': 2.2.1(astro@2.10.14) + '@astrojs/telemetry': 2.1.1 + '@astrojs/webapi': 2.2.0 + '@babel/core': 7.22.11 + '@babel/generator': 7.22.10 + '@babel/parser': 7.22.13 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.11) + '@babel/traverse': 7.22.11 + '@babel/types': 7.22.11 + '@types/babel__core': 7.20.1 + '@types/dom-view-transitions': 1.0.1 + '@types/yargs-parser': 21.0.0 + acorn: 8.10.0 + boxen: 6.2.1 + chokidar: 3.5.3 + ci-info: 3.8.0 + common-ancestor-path: 1.0.1 + cookie: 0.5.0 + debug: 4.3.4 + devalue: 4.3.2 + diff: 5.1.0 + es-module-lexer: 1.3.0 + esbuild: 0.17.19 + estree-walker: 3.0.0 + execa: 6.1.0 + fast-glob: 3.3.1 + github-slugger: 2.0.0 + gray-matter: 4.0.3 + html-escaper: 3.0.3 + http-cache-semantics: 4.1.1 + js-yaml: 4.1.0 + kleur: 4.1.5 + magic-string: 0.30.3 + mime: 3.0.0 + network-information-types: 0.1.1(typescript@5.2.2) + ora: 6.3.1 + p-limit: 4.0.0 + path-to-regexp: 6.2.1 + preferred-pm: 3.0.3 + prompts: 2.4.2 + rehype: 12.0.1 + semver: 7.5.4 + server-destroy: 1.0.1 + shiki: 0.14.3 + string-width: 5.1.2 + strip-ansi: 7.1.0 + tsconfig-resolver: 3.0.1 + typescript: 5.2.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + vite: 4.4.9(@types/node@20.5.7) + vitefu: 0.2.4(vite@4.4.9) + which-pm: 2.0.0 + yargs-parser: 21.1.1 + zod: 3.22.2 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /autoprefixer@10.4.15(postcss@8.4.28): + resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.10 + caniuse-lite: 1.0.30001524 + fraction.js: 4.2.1 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.28 + postcss-value-parser: 4.2.0 + dev: true + + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /boxen@6.2.1: + resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001524 + electron-to-chromium: 1.4.503 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) + dev: true + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-lite@1.0.30001524: + resolution: {integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==} + dev: true + + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: true + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: true + + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: true + + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + dev: true + + /cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + dev: true + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-spinners@2.9.0: + resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} + engines: {node: '>=6'} + dev: true + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: true + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /devalue@4.3.2: + resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} + dev: true + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /diff@5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: true + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /dset@3.1.2: + resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} + engines: {node: '>=4'} + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium@1.4.503: + resolution: {integrity: sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==} + dev: true + + /emmet@2.4.6: + resolution: {integrity: sha512-dJfbdY/hfeTyf/Ef7Y7ubLYzkBvPQ912wPaeVYpAxvFxkEBf/+hJu4H6vhAvFN6HlxqedlfVn2x1S44FfQ97pg==} + dependencies: + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + dev: true + + /esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /estree-util-attach-comments@2.1.1: + resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + dependencies: + '@types/estree': 1.0.1 + dev: true + + /estree-util-build-jsx@2.2.2: + resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + dependencies: + '@types/estree-jsx': 1.0.0 + estree-util-is-identifier-name: 2.1.0 + estree-walker: 3.0.3 + dev: true + + /estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + dev: true + + /estree-util-to-js@1.2.0: + resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + dependencies: + '@types/estree-jsx': 1.0.0 + astring: 1.8.6 + source-map: 0.7.4 + dev: true + + /estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/unist': 2.0.7 + dev: true + + /estree-walker@3.0.0: + resolution: {integrity: sha512-s6ceX0NFiU/vKPiKvFdR83U1Zffu7upwZsGwpoqfg5rbbq1l50WQ5hCeIvM6E6oD4shUHCYMsiFPns4Jk0YfMQ==} + dev: true + + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.1 + dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@6.1.0: + resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 3.0.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: true + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + dependencies: + micromatch: 4.0.5 + pkg-dir: 4.2.0 + dev: true + + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: true + + /fraction.js@4.2.1: + resolution: {integrity: sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /github-slugger@1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + dev: true + + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /hast-util-from-parse5@7.1.2: + resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + dependencies: + '@types/hast': 2.3.5 + '@types/unist': 2.0.7 + hastscript: 7.2.0 + property-information: 6.2.0 + vfile: 5.3.7 + vfile-location: 4.1.0 + web-namespaces: 2.0.1 + dev: true + + /hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + dependencies: + '@types/hast': 2.3.5 + dev: true + + /hast-util-raw@7.2.3: + resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} + dependencies: + '@types/hast': 2.3.5 + '@types/parse5': 6.0.3 + hast-util-from-parse5: 7.1.2 + hast-util-to-parse5: 7.1.0 + html-void-elements: 2.0.1 + parse5: 6.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: true + + /hast-util-to-estree@2.3.3: + resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + dependencies: + '@types/estree': 1.0.1 + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.5 + '@types/unist': 2.0.7 + comma-separated-tokens: 2.0.3 + estree-util-attach-comments: 2.1.1 + estree-util-is-identifier-name: 2.1.0 + hast-util-whitespace: 2.0.1 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdxjs-esm: 1.3.1 + property-information: 6.2.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.2 + unist-util-position: 4.0.4 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /hast-util-to-html@8.0.4: + resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==} + dependencies: + '@types/hast': 2.3.5 + '@types/unist': 2.0.7 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 7.2.3 + hast-util-whitespace: 2.0.1 + html-void-elements: 2.0.1 + property-information: 6.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.3 + zwitch: 2.0.4 + dev: true + + /hast-util-to-parse5@7.1.0: + resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + dependencies: + '@types/hast': 2.3.5 + comma-separated-tokens: 2.0.3 + property-information: 6.2.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: true + + /hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + dev: true + + /hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + dependencies: + '@types/hast': 2.3.5 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.2.0 + space-separated-tokens: 2.0.2 + dev: true + + /html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + dev: true + + /html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + dev: true + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@3.0.1: + resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} + engines: {node: '>=12.20.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /import-meta-resolve@2.2.2: + resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: true + + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: true + + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: true + + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.3 + dev: true + + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: true + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + + /is-reference@3.0.1: + resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} + dependencies: + '@types/estree': 1.0.1 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jiti@1.19.3: + resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==} + hasBin: true + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + dev: true + + /jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + dev: true + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /log-symbols@5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: true + + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: true + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /magic-string@0.30.3: + resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /markdown-extensions@1.1.1: + resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} + engines: {node: '>=0.10.0'} + dev: true + + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: true + + /mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + unist-util-visit: 4.1.2 + dev: true + + /mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + dependencies: + '@types/mdast': 3.0.12 + escape-string-regexp: 5.0.0 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: true + + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + micromark-extension-frontmatter: 1.1.1 + dev: true + + /mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + dependencies: + '@types/mdast': 3.0.12 + ccount: 2.0.1 + mdast-util-find-and-replace: 2.2.2 + micromark-util-character: 1.2.0 + dev: true + + /mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + micromark-util-normalize-identifier: 1.1.0 + dev: true + + /mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + dev: true + + /mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + dependencies: + '@types/mdast': 3.0.12 + markdown-table: 3.0.3 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + dev: true + + /mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-gfm-autolink-literal: 1.0.3 + mdast-util-gfm-footnote: 1.0.2 + mdast-util-gfm-strikethrough: 1.0.3 + mdast-util-gfm-table: 1.0.7 + mdast-util-gfm-task-list-item: 1.0.2 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + ccount: 2.0.1 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + parse-entities: 4.0.1 + stringify-entities: 4.0.3 + unist-util-remove-position: 4.0.2 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdx@2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + dependencies: + mdast-util-from-markdown: 1.3.1 + mdast-util-mdx-expression: 1.3.2 + mdast-util-mdx-jsx: 2.1.4 + mdast-util-mdxjs-esm: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + dependencies: + '@types/mdast': 3.0.12 + unist-util-is: 5.2.1 + dev: true + + /mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + dependencies: + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.2.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + dev: true + + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + dev: true + + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.12 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} + dependencies: + fault: 2.0.1 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + dependencies: + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + dependencies: + micromark-util-types: 1.1.0 + dev: true + + /micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + dependencies: + micromark-extension-gfm-autolink-literal: 1.0.5 + micromark-extension-gfm-footnote: 1.1.2 + micromark-extension-gfm-strikethrough: 1.0.7 + micromark-extension-gfm-table: 1.0.7 + micromark-extension-gfm-tagfilter: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + dependencies: + '@types/estree': 1.0.1 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.1 + estree-util-is-identifier-name: 2.1.0 + micromark-factory-mdx-expression: 1.0.9 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: true + + /micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + dependencies: + micromark-util-types: 1.1.0 + dev: true + + /micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + dependencies: + '@types/estree': 1.0.1 + micromark-core-commonmark: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: true + + /micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + micromark-extension-mdx-expression: 1.0.8 + micromark-extension-mdx-jsx: 1.0.5 + micromark-extension-mdx-md: 1.0.1 + micromark-extension-mdxjs-esm: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + dependencies: + '@types/estree': 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-events-to-acorn: 1.2.3 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-position-from-estree: 1.1.2 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: true + + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: true + + /micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.1 + '@types/unist': 2.0.7 + estree-util-visit: 1.2.1 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + vfile-message: 3.1.4 + dev: true + + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: true + + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + dependencies: + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: true + + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: true + + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + dependencies: + '@types/debug': 4.1.8 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /network-information-types@0.1.1(typescript@5.2.2): + resolution: {integrity: sha512-mLXNafJYOkiJB6IlF727YWssTRpXitR+tKSLyA5VAdBi3SOvLf5gtizHgxf241YHPWocnAO/fAhVrB/68tPHDw==} + peerDependencies: + typescript: '>= 3.0.0' + dependencies: + typescript: 5.2.2 + dev: true + + /nlcst-to-string@3.1.1: + resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==} + dependencies: + '@types/nlcst': 1.0.1 + dev: true + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /ora@6.3.1: + resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.0 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + stdin-discarder: 0.1.0 + strip-ansi: 7.1.0 + wcwidth: 1.0.1 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + dependencies: + '@types/unist': 2.0.7 + character-entities: 2.0.2 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.2 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + dev: true + + /parse-latin@5.0.1: + resolution: {integrity: sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==} + dependencies: + nlcst-to-string: 3.1.1 + unist-util-modify-children: 3.1.1 + unist-util-visit-children: 2.0.2 + dev: true + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + dev: true + + /periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + dependencies: + '@types/estree': 1.0.1 + estree-walker: 3.0.3 + is-reference: 3.0.1 + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /postcss-import@15.1.0(postcss@8.4.28): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.28 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.4 + dev: true + + /postcss-js@4.0.1(postcss@8.4.28): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.28 + dev: true + + /postcss-load-config@4.0.1(postcss@8.4.28): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.28 + yaml: 2.3.2 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.28): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.28 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.28: + resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /preferred-pm@3.0.3: + resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: true + + /prettier-plugin-astro@0.12.0: + resolution: {integrity: sha512-8E+9YQR6/5CPZJs8XsfBw579zrwZkc0Wb7x0fRVm/51JC8Iys4lBw4ecV8fHwpbQnzve86TUa4fJ08BJzqfWnA==} + engines: {node: ^14.15.0 || >=16.0.0} + dependencies: + '@astrojs/compiler': 1.8.2 + prettier: 3.0.2 + sass-formatter: 0.7.7 + dev: true + + /prettier-plugin-astro@0.9.1: + resolution: {integrity: sha512-pYZXSbdq0eElvzoIMArzv1SBn1NUXzopjlcnt6Ql8VW32PjC12NovwBjXJ6rh8qQLi7vF8jNqAbraKW03UPfag==} + engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'} + dependencies: + '@astrojs/compiler': 1.8.2 + prettier: 2.8.8 + sass-formatter: 0.7.7 + synckit: 0.8.5 + dev: true + + /prettier-plugin-tailwindcss@0.5.3(prettier-plugin-astro@0.12.0)(prettier@3.0.2): + resolution: {integrity: sha512-M5K80V21yM+CTm/FEFYRv9/9LyInYbCSXpIoPAKMm8zy89IOwdiA2e4JVbcO7tvRtAQWz32zdj7/WKcsmFyAVg==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@shufo/prettier-plugin-blade': '*' + '@trivago/prettier-plugin-sort-imports': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + prettier-plugin-twig-melody: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@shufo/prettier-plugin-blade': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier-plugin-twig-melody: + optional: true + dependencies: + prettier: 3.0.2 + prettier-plugin-astro: 0.12.0 + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier@3.0.2: + resolution: {integrity: sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /property-information@6.2.0: + resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: true + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: true + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /rehype-parse@8.0.5: + resolution: {integrity: sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A==} + dependencies: + '@types/hast': 2.3.5 + hast-util-from-parse5: 7.1.2 + parse5: 6.0.1 + unified: 10.1.2 + dev: true + + /rehype-raw@6.1.1: + resolution: {integrity: sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==} + dependencies: + '@types/hast': 2.3.5 + hast-util-raw: 7.2.3 + unified: 10.1.2 + dev: true + + /rehype-stringify@9.0.4: + resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==} + dependencies: + '@types/hast': 2.3.5 + hast-util-to-html: 8.0.4 + unified: 10.1.2 + dev: true + + /rehype@12.0.1: + resolution: {integrity: sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==} + dependencies: + '@types/hast': 2.3.5 + rehype-parse: 8.0.5 + rehype-stringify: 9.0.4 + unified: 10.1.2 + dev: true + + /remark-frontmatter@4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.1 + unified: 10.1.2 + dev: true + + /remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-gfm: 2.0.2 + micromark-extension-gfm: 2.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-mdx@2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + dependencies: + mdast-util-mdx: 2.0.1 + micromark-extension-mdxjs: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + dependencies: + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + mdast-util-to-hast: 12.3.0 + unified: 10.1.2 + dev: true + + /remark-smartypants@2.0.0: + resolution: {integrity: sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + retext: 8.1.0 + retext-smartypants: 5.2.0 + unist-util-visit: 4.1.2 + dev: true + + /resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /retext-latin@3.1.0: + resolution: {integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==} + dependencies: + '@types/nlcst': 1.0.1 + parse-latin: 5.0.1 + unherit: 3.0.1 + unified: 10.1.2 + dev: true + + /retext-smartypants@5.2.0: + resolution: {integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==} + dependencies: + '@types/nlcst': 1.0.1 + nlcst-to-string: 3.1.1 + unified: 10.1.2 + unist-util-visit: 4.1.2 + dev: true + + /retext-stringify@3.1.0: + resolution: {integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==} + dependencies: + '@types/nlcst': 1.0.1 + nlcst-to-string: 3.1.1 + unified: 10.1.2 + dev: true + + /retext@8.1.0: + resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==} + dependencies: + '@types/nlcst': 1.0.1 + retext-latin: 3.1.0 + retext-stringify: 3.1.0 + unified: 10.1.2 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rollup@3.28.1: + resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /s.color@0.0.15: + resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} + dev: true + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /sass-formatter@0.7.7: + resolution: {integrity: sha512-axtQ7c7Cf4UgHsD8e4okhIkkc90+tdgBIfUMx69+qJuMNq9EOo2k+RH/mDKj0XeA5z3nC1Ca5TCntuxRhI+1MA==} + dependencies: + suf-log: 2.5.3 + dev: true + + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: true + + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /server-destroy@1.0.1: + resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /shiki@0.14.3: + resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} + dependencies: + ansi-sequence-parser: 1.1.1 + jsonc-parser: 3.2.0 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /stdin-discarder@0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + bl: 5.1.0 + dev: true + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /style-to-object@0.4.2: + resolution: {integrity: sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==} + dependencies: + inline-style-parser: 0.1.1 + dev: true + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: true + + /suf-log@2.5.3: + resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==} + dependencies: + s.color: 0.0.15 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.19.3 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.28 + postcss-import: 15.1.0(postcss@8.4.28) + postcss-js: 4.0.1(postcss@8.4.28) + postcss-load-config: 4.0.1(postcss@8.4.28) + postcss-nested: 6.0.1(postcss@8.4.28) + postcss-selector-parser: 6.0.13 + resolve: 1.22.4 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: true + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: true + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: true + + /trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true + + /tsconfig-resolver@3.0.1: + resolution: {integrity: sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==} + dependencies: + '@types/json5': 0.0.30 + '@types/resolve': 1.20.2 + json5: 2.2.3 + resolve: 1.22.4 + strip-bom: 4.0.0 + type-fest: 0.13.1 + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /ultrahtml@1.3.0: + resolution: {integrity: sha512-xmXvE8tC8t4PVqy0/g1fe7H9USY/Brr425q4dD/0QbQMQit7siCtb06+SCqE4GfU24nwsZz8Th1g7L7mm1lL5g==} + dev: true + + /undici@5.23.0: + resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} + engines: {node: '>=14.0'} + dependencies: + busboy: 1.6.0 + dev: true + + /unherit@3.0.1: + resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==} + dev: true + + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.7 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.7 + dev: true + + /unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + dev: true + + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.7 + dev: true + + /unist-util-modify-children@3.1.1: + resolution: {integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==} + dependencies: + '@types/unist': 2.0.7 + array-iterate: 2.0.1 + dev: true + + /unist-util-position-from-estree@1.1.2: + resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + dependencies: + '@types/unist': 2.0.7 + dev: true + + /unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + dependencies: + '@types/unist': 2.0.7 + dev: true + + /unist-util-remove-position@4.0.2: + resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + dependencies: + '@types/unist': 2.0.7 + unist-util-visit: 4.1.2 + dev: true + + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.7 + dev: true + + /unist-util-visit-children@2.0.2: + resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==} + dependencies: + '@types/unist': 2.0.7 + dev: true + + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.7 + unist-util-is: 5.2.1 + dev: true + + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.7 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: true + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /update-browserslist-db@1.0.11(browserslist@4.21.10): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.10 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: true + + /vfile-location@4.1.0: + resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + dependencies: + '@types/unist': 2.0.7 + vfile: 5.3.7 + dev: true + + /vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + dependencies: + '@types/unist': 2.0.7 + unist-util-stringify-position: 3.0.3 + dev: true + + /vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + dependencies: + '@types/unist': 2.0.7 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + dev: true + + /vite@4.4.9(@types/node@20.5.7): + resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.5.7 + esbuild: 0.18.20 + postcss: 8.4.28 + rollup: 3.28.1 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitefu@0.2.4(vite@4.4.9): + resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + vite: 4.4.9(@types/node@20.5.7) + dev: true + + /vscode-css-languageservice@6.2.6: + resolution: {integrity: sha512-SA2WkeOecIpUiEbZnjOsP/fI5CRITZEiQGSHXKiDQDwLApfKcnLhZwMtOBbIifSzESVcQa7b/shX/nbnF4NoCg==} + dependencies: + '@vscode/l10n': 0.0.14 + vscode-languageserver-textdocument: 1.0.8 + vscode-languageserver-types: 3.17.3 + vscode-uri: 3.0.7 + dev: true + + /vscode-html-languageservice@5.0.6: + resolution: {integrity: sha512-gCixNg6fjPO7+kwSMBAVXcwDRHdjz1WOyNfI0n5Wx0J7dfHG8ggb3zD1FI8E2daTZrwS1cooOiSoc1Xxph4qRQ==} + dependencies: + '@vscode/l10n': 0.0.14 + vscode-languageserver-textdocument: 1.0.8 + vscode-languageserver-types: 3.17.3 + vscode-uri: 3.0.7 + dev: true + + /vscode-jsonrpc@8.1.0: + resolution: {integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==} + engines: {node: '>=14.0.0'} + dev: true + + /vscode-languageserver-protocol@3.17.3: + resolution: {integrity: sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==} + dependencies: + vscode-jsonrpc: 8.1.0 + vscode-languageserver-types: 3.17.3 + dev: true + + /vscode-languageserver-textdocument@1.0.8: + resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} + dev: true + + /vscode-languageserver-types@3.17.3: + resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} + dev: true + + /vscode-languageserver@8.1.0: + resolution: {integrity: sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==} + hasBin: true + dependencies: + vscode-languageserver-protocol: 3.17.3 + dev: true + + /vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + dev: true + + /vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + dev: true + + /vscode-uri@2.1.2: + resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} + dev: true + + /vscode-uri@3.0.7: + resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} + dev: true + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: true + + /which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + dev: true + + /which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml@2.3.2: + resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + + /zod@3.22.2: + resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} + dev: true + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: true diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000000..a50f97f206 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +module.exports = { + plugins: { + tailwindcss: {}, + "@tailwindcss/typography": {}, + autoprefixer: {}, + }, +}; diff --git a/public/fonts/Inter.var.woff2 b/public/fonts/Inter.var.woff2 new file mode 100644 index 0000000000..365eedc50c Binary files /dev/null and b/public/fonts/Inter.var.woff2 differ diff --git a/assets/fonts/Lato-Italic.woff b/public/fonts/Lato-Italic.woff similarity index 100% rename from assets/fonts/Lato-Italic.woff rename to public/fonts/Lato-Italic.woff diff --git a/assets/fonts/Lato-Regular.woff b/public/fonts/Lato-Regular.woff similarity index 100% rename from assets/fonts/Lato-Regular.woff rename to public/fonts/Lato-Regular.woff diff --git a/assets/images/clap-full-logo-black.png b/public/images/clap-full-logo-black.png similarity index 100% rename from assets/images/clap-full-logo-black.png rename to public/images/clap-full-logo-black.png diff --git a/public/images/clap-full-logo-white.png b/public/images/clap-full-logo-white.png new file mode 100644 index 0000000000..e2d896e11a Binary files /dev/null and b/public/images/clap-full-logo-white.png differ diff --git a/assets/images/DAW Project.jpg b/public/images/content-creators.jpg similarity index 100% rename from assets/images/DAW Project.jpg rename to public/images/content-creators.jpg diff --git a/assets/images/Figma Skin Editing.jpg b/public/images/designers.jpg similarity index 100% rename from assets/images/Figma Skin Editing.jpg rename to public/images/designers.jpg diff --git a/assets/images/Dev Workflow.jpg b/public/images/developers.jpg similarity index 100% rename from assets/images/Dev Workflow.jpg rename to public/images/developers.jpg diff --git a/assets/images/Mockup.png b/public/images/digital.png similarity index 100% rename from assets/images/Mockup.png rename to public/images/digital.png diff --git a/assets/images/FX.jpg b/public/images/effects.jpg similarity index 100% rename from assets/images/FX.jpg rename to public/images/effects.jpg diff --git a/assets/images/favicon.svg b/public/images/favicon.svg similarity index 100% rename from assets/images/favicon.svg rename to public/images/favicon.svg diff --git a/assets/images/Oscillator.jpg b/public/images/filter.jpg similarity index 100% rename from assets/images/Oscillator.jpg rename to public/images/filter.jpg diff --git a/public/images/hero.png b/public/images/hero.png new file mode 100644 index 0000000000..3b3df154f4 Binary files /dev/null and b/public/images/hero.png differ diff --git a/public/images/hero_dark.png b/public/images/hero_dark.png new file mode 100644 index 0000000000..767548da77 Binary files /dev/null and b/public/images/hero_dark.png differ diff --git a/public/images/hero_light.png b/public/images/hero_light.png new file mode 100644 index 0000000000..7b66e86172 Binary files /dev/null and b/public/images/hero_light.png differ diff --git a/manual/images/Pictures/EGs.png b/public/images/manual-xt/Pictures/EGs.png similarity index 100% rename from manual/images/Pictures/EGs.png rename to public/images/manual-xt/Pictures/EGs.png diff --git a/manual/images/Pictures/EGs_orange_fields.png b/public/images/manual-xt/Pictures/EGs_orange_fields.png similarity index 100% rename from manual/images/Pictures/EGs_orange_fields.png rename to public/images/manual-xt/Pictures/EGs_orange_fields.png diff --git a/manual/images/Pictures/FM2.png b/public/images/manual-xt/Pictures/FM2.png similarity index 100% rename from manual/images/Pictures/FM2.png rename to public/images/manual-xt/Pictures/FM2.png diff --git a/manual/images/Pictures/FM3.png b/public/images/manual-xt/Pictures/FM3.png similarity index 100% rename from manual/images/Pictures/FM3.png rename to public/images/manual-xt/Pictures/FM3.png diff --git a/manual/images/Pictures/Typein.png b/public/images/manual-xt/Pictures/Typein.png similarity index 100% rename from manual/images/Pictures/Typein.png rename to public/images/manual-xt/Pictures/Typein.png diff --git a/manual/images/Pictures/alias_additive_editor.png b/public/images/manual-xt/Pictures/alias_additive_editor.png similarity index 100% rename from manual/images/Pictures/alias_additive_editor.png rename to public/images/manual-xt/Pictures/alias_additive_editor.png diff --git a/manual_xt/images/Pictures/clear_modulation.png b/public/images/manual-xt/Pictures/clear_modulation.png similarity index 100% rename from manual_xt/images/Pictures/clear_modulation.png rename to public/images/manual-xt/Pictures/clear_modulation.png diff --git a/manual/images/Pictures/cutoff_warp.png b/public/images/manual-xt/Pictures/cutoff_warp.png similarity index 100% rename from manual/images/Pictures/cutoff_warp.png rename to public/images/manual-xt/Pictures/cutoff_warp.png diff --git a/manual_xt/images/Pictures/default_mseg.png b/public/images/manual-xt/Pictures/default_mseg.png similarity index 100% rename from manual_xt/images/Pictures/default_mseg.png rename to public/images/manual-xt/Pictures/default_mseg.png diff --git a/manual_xt/images/Pictures/discrete_values.png b/public/images/manual-xt/Pictures/discrete_values.png similarity index 100% rename from manual_xt/images/Pictures/discrete_values.png rename to public/images/manual-xt/Pictures/discrete_values.png diff --git a/manual_xt/images/Pictures/filter_analysis.png b/public/images/manual-xt/Pictures/filter_analysis.png similarity index 100% rename from manual_xt/images/Pictures/filter_analysis.png rename to public/images/manual-xt/Pictures/filter_analysis.png diff --git a/manual_xt/images/Pictures/formula_modulator.png b/public/images/manual-xt/Pictures/formula_modulator.png similarity index 100% rename from manual_xt/images/Pictures/formula_modulator.png rename to public/images/manual-xt/Pictures/formula_modulator.png diff --git a/manual/images/Pictures/fx_bypass.png b/public/images/manual-xt/Pictures/fx_bypass.png similarity index 100% rename from manual/images/Pictures/fx_bypass.png rename to public/images/manual-xt/Pictures/fx_bypass.png diff --git a/manual_xt/images/Pictures/fxsection.png b/public/images/manual-xt/Pictures/fxsection.png similarity index 100% rename from manual_xt/images/Pictures/fxsection.png rename to public/images/manual-xt/Pictures/fxsection.png diff --git a/manual/images/Pictures/gru.png b/public/images/manual-xt/Pictures/gru.png similarity index 100% rename from manual/images/Pictures/gru.png rename to public/images/manual-xt/Pictures/gru.png diff --git a/manual_xt/images/Pictures/hamburger_menu_modsource.png b/public/images/manual-xt/Pictures/hamburger_menu_modsource.png similarity index 100% rename from manual_xt/images/Pictures/hamburger_menu_modsource.png rename to public/images/manual-xt/Pictures/hamburger_menu_modsource.png diff --git a/manual_xt/images/Pictures/header.png b/public/images/manual-xt/Pictures/header.png similarity index 100% rename from manual_xt/images/Pictures/header.png rename to public/images/manual-xt/Pictures/header.png diff --git a/manual/images/Pictures/illu10.png b/public/images/manual-xt/Pictures/illu10.png similarity index 100% rename from manual/images/Pictures/illu10.png rename to public/images/manual-xt/Pictures/illu10.png diff --git a/manual/images/Pictures/illu11.png b/public/images/manual-xt/Pictures/illu11.png similarity index 100% rename from manual/images/Pictures/illu11.png rename to public/images/manual-xt/Pictures/illu11.png diff --git a/manual/images/Pictures/illu12.png b/public/images/manual-xt/Pictures/illu12.png similarity index 100% rename from manual/images/Pictures/illu12.png rename to public/images/manual-xt/Pictures/illu12.png diff --git a/manual/images/Pictures/illu14.png b/public/images/manual-xt/Pictures/illu14.png similarity index 100% rename from manual/images/Pictures/illu14.png rename to public/images/manual-xt/Pictures/illu14.png diff --git a/manual/images/Pictures/illu15.png b/public/images/manual-xt/Pictures/illu15.png similarity index 100% rename from manual/images/Pictures/illu15.png rename to public/images/manual-xt/Pictures/illu15.png diff --git a/manual/images/Pictures/illu16.png b/public/images/manual-xt/Pictures/illu16.png similarity index 100% rename from manual/images/Pictures/illu16.png rename to public/images/manual-xt/Pictures/illu16.png diff --git a/manual/images/Pictures/illu17.png b/public/images/manual-xt/Pictures/illu17.png similarity index 100% rename from manual/images/Pictures/illu17.png rename to public/images/manual-xt/Pictures/illu17.png diff --git a/manual_xt/images/Pictures/illu18.png b/public/images/manual-xt/Pictures/illu18.png similarity index 100% rename from manual_xt/images/Pictures/illu18.png rename to public/images/manual-xt/Pictures/illu18.png diff --git a/manual_xt/images/Pictures/illu19.png b/public/images/manual-xt/Pictures/illu19.png similarity index 100% rename from manual_xt/images/Pictures/illu19.png rename to public/images/manual-xt/Pictures/illu19.png diff --git a/manual/images/Pictures/illu2.png b/public/images/manual-xt/Pictures/illu2.png similarity index 100% rename from manual/images/Pictures/illu2.png rename to public/images/manual-xt/Pictures/illu2.png diff --git a/manual/images/Pictures/illu20.png b/public/images/manual-xt/Pictures/illu20.png similarity index 100% rename from manual/images/Pictures/illu20.png rename to public/images/manual-xt/Pictures/illu20.png diff --git a/manual_xt/images/Pictures/illu7.png b/public/images/manual-xt/Pictures/illu7.png similarity index 100% rename from manual_xt/images/Pictures/illu7.png rename to public/images/manual-xt/Pictures/illu7.png diff --git a/manual/images/Pictures/illu8.png b/public/images/manual-xt/Pictures/illu8.png similarity index 100% rename from manual/images/Pictures/illu8.png rename to public/images/manual-xt/Pictures/illu8.png diff --git a/manual/images/Pictures/illu9_5.png b/public/images/manual-xt/Pictures/illu9_5.png similarity index 100% rename from manual/images/Pictures/illu9_5.png rename to public/images/manual-xt/Pictures/illu9_5.png diff --git a/manual/images/Pictures/lfo_editor.png b/public/images/manual-xt/Pictures/lfo_editor.png similarity index 100% rename from manual/images/Pictures/lfo_editor.png rename to public/images/manual-xt/Pictures/lfo_editor.png diff --git a/manual/images/Pictures/lfo_eg.png b/public/images/manual-xt/Pictures/lfo_eg.png similarity index 100% rename from manual/images/Pictures/lfo_eg.png rename to public/images/manual-xt/Pictures/lfo_eg.png diff --git a/manual_xt/images/Pictures/lfo_shapes.png b/public/images/manual-xt/Pictures/lfo_shapes.png similarity index 100% rename from manual_xt/images/Pictures/lfo_shapes.png rename to public/images/manual-xt/Pictures/lfo_shapes.png diff --git a/manual/images/Pictures/mod_source_buttons.png b/public/images/manual-xt/Pictures/mod_source_buttons.png similarity index 100% rename from manual/images/Pictures/mod_source_buttons.png rename to public/images/manual-xt/Pictures/mod_source_buttons.png diff --git a/manual_xt/images/Pictures/modlist.png b/public/images/manual-xt/Pictures/modlist.png similarity index 100% rename from manual_xt/images/Pictures/modlist.png rename to public/images/manual-xt/Pictures/modlist.png diff --git a/manual_xt/images/Pictures/modsource_context_menu.png b/public/images/manual-xt/Pictures/modsource_context_menu.png similarity index 100% rename from manual_xt/images/Pictures/modsource_context_menu.png rename to public/images/manual-xt/Pictures/modsource_context_menu.png diff --git a/manual/images/Pictures/modsource_labels.png b/public/images/manual-xt/Pictures/modsource_labels.png similarity index 100% rename from manual/images/Pictures/modsource_labels.png rename to public/images/manual-xt/Pictures/modsource_labels.png diff --git a/manual_xt/images/Pictures/modulation_routing.png b/public/images/manual-xt/Pictures/modulation_routing.png similarity index 100% rename from manual_xt/images/Pictures/modulation_routing.png rename to public/images/manual-xt/Pictures/modulation_routing.png diff --git a/manual_xt/images/Pictures/modulationsourceselectionbar.png b/public/images/manual-xt/Pictures/modulationsourceselectionbar.png similarity index 100% rename from manual_xt/images/Pictures/modulationsourceselectionbar.png rename to public/images/manual-xt/Pictures/modulationsourceselectionbar.png diff --git a/manual/images/Pictures/mseg.png b/public/images/manual-xt/Pictures/mseg.png similarity index 100% rename from manual/images/Pictures/mseg.png rename to public/images/manual-xt/Pictures/mseg.png diff --git a/manual/images/Pictures/open_mseg.png b/public/images/manual-xt/Pictures/open_mseg.png similarity index 100% rename from manual/images/Pictures/open_mseg.png rename to public/images/manual-xt/Pictures/open_mseg.png diff --git a/manual_xt/images/Pictures/oscilloscope.png b/public/images/manual-xt/Pictures/oscilloscope.png similarity index 100% rename from manual_xt/images/Pictures/oscilloscope.png rename to public/images/manual-xt/Pictures/oscilloscope.png diff --git a/manual_xt/images/Pictures/patchbrowser.png b/public/images/manual-xt/Pictures/patchbrowser.png similarity index 100% rename from manual_xt/images/Pictures/patchbrowser.png rename to public/images/manual-xt/Pictures/patchbrowser.png diff --git a/manual/images/Pictures/reso_warp.png b/public/images/manual-xt/Pictures/reso_warp.png similarity index 100% rename from manual/images/Pictures/reso_warp.png rename to public/images/manual-xt/Pictures/reso_warp.png diff --git a/manual/images/Pictures/routing_1.png b/public/images/manual-xt/Pictures/routing_1.png similarity index 100% rename from manual/images/Pictures/routing_1.png rename to public/images/manual-xt/Pictures/routing_1.png diff --git a/manual/images/Pictures/routing_2.png b/public/images/manual-xt/Pictures/routing_2.png similarity index 100% rename from manual/images/Pictures/routing_2.png rename to public/images/manual-xt/Pictures/routing_2.png diff --git a/manual/images/Pictures/routing_3.png b/public/images/manual-xt/Pictures/routing_3.png similarity index 100% rename from manual/images/Pictures/routing_3.png rename to public/images/manual-xt/Pictures/routing_3.png diff --git a/manual/images/Pictures/routing_3_unipolar.png b/public/images/manual-xt/Pictures/routing_3_unipolar.png similarity index 100% rename from manual/images/Pictures/routing_3_unipolar.png rename to public/images/manual-xt/Pictures/routing_3_unipolar.png diff --git a/manual_xt/images/Pictures/routingbar.png b/public/images/manual-xt/Pictures/routingbar.png similarity index 100% rename from manual_xt/images/Pictures/routingbar.png rename to public/images/manual-xt/Pictures/routingbar.png diff --git a/manual/images/Pictures/routingbar_sections.png b/public/images/manual-xt/Pictures/routingbar_sections.png similarity index 100% rename from manual/images/Pictures/routingbar_sections.png rename to public/images/manual-xt/Pictures/routingbar_sections.png diff --git a/manual_xt/images/Pictures/scene_sections.png b/public/images/manual-xt/Pictures/scene_sections.png similarity index 100% rename from manual_xt/images/Pictures/scene_sections.png rename to public/images/manual-xt/Pictures/scene_sections.png diff --git a/manual/images/Pictures/scene_select.png b/public/images/manual-xt/Pictures/scene_select.png similarity index 100% rename from manual/images/Pictures/scene_select.png rename to public/images/manual-xt/Pictures/scene_select.png diff --git a/manual_xt/images/Pictures/sections.png b/public/images/manual-xt/Pictures/sections.png similarity index 100% rename from manual_xt/images/Pictures/sections.png rename to public/images/manual-xt/Pictures/sections.png diff --git a/manual_xt/images/Pictures/signal_flow.png b/public/images/manual-xt/Pictures/signal_flow.png similarity index 100% rename from manual_xt/images/Pictures/signal_flow.png rename to public/images/manual-xt/Pictures/signal_flow.png diff --git a/manual_xt/images/Pictures/slider_context_menu.png b/public/images/manual-xt/Pictures/slider_context_menu.png similarity index 100% rename from manual_xt/images/Pictures/slider_context_menu.png rename to public/images/manual-xt/Pictures/slider_context_menu.png diff --git a/manual/images/Pictures/sound_generation.png b/public/images/manual-xt/Pictures/sound_generation.png similarity index 100% rename from manual/images/Pictures/sound_generation.png rename to public/images/manual-xt/Pictures/sound_generation.png diff --git a/manual_xt/images/Pictures/sound_shaping.png b/public/images/manual-xt/Pictures/sound_shaping.png similarity index 100% rename from manual_xt/images/Pictures/sound_shaping.png rename to public/images/manual-xt/Pictures/sound_shaping.png diff --git a/manual_xt/images/Pictures/spectrum.png b/public/images/manual-xt/Pictures/spectrum.png similarity index 100% rename from manual_xt/images/Pictures/spectrum.png rename to public/images/manual-xt/Pictures/spectrum.png diff --git a/manual/images/Pictures/status.png b/public/images/manual-xt/Pictures/status.png similarity index 100% rename from manual/images/Pictures/status.png rename to public/images/manual-xt/Pictures/status.png diff --git a/manual/images/Pictures/stepseq.png b/public/images/manual-xt/Pictures/stepseq.png similarity index 100% rename from manual/images/Pictures/stepseq.png rename to public/images/manual-xt/Pictures/stepseq.png diff --git a/manual/images/Pictures/stepseq_deform1.png b/public/images/manual-xt/Pictures/stepseq_deform1.png similarity index 100% rename from manual/images/Pictures/stepseq_deform1.png rename to public/images/manual-xt/Pictures/stepseq_deform1.png diff --git a/manual/images/Pictures/stepseq_deform2.png b/public/images/manual-xt/Pictures/stepseq_deform2.png similarity index 100% rename from manual/images/Pictures/stepseq_deform2.png rename to public/images/manual-xt/Pictures/stepseq_deform2.png diff --git a/manual_xt/images/Pictures/store_dialog.png b/public/images/manual-xt/Pictures/store_dialog.png similarity index 100% rename from manual_xt/images/Pictures/store_dialog.png rename to public/images/manual-xt/Pictures/store_dialog.png diff --git a/manual_xt/images/Pictures/surge.png b/public/images/manual-xt/Pictures/surge.png similarity index 100% rename from manual_xt/images/Pictures/surge.png rename to public/images/manual-xt/Pictures/surge.png diff --git a/manual_xt/images/Pictures/surge_dark.png b/public/images/manual-xt/Pictures/surge_dark.png similarity index 100% rename from manual_xt/images/Pictures/surge_dark.png rename to public/images/manual-xt/Pictures/surge_dark.png diff --git a/manual_xt/images/Pictures/surge_royal.png b/public/images/manual-xt/Pictures/surge_royal.png similarity index 100% rename from manual_xt/images/Pictures/surge_royal.png rename to public/images/manual-xt/Pictures/surge_royal.png diff --git a/manual_xt/images/Pictures/surge_xt_logo.png b/public/images/manual-xt/Pictures/surge_xt_logo.png similarity index 100% rename from manual_xt/images/Pictures/surge_xt_logo.png rename to public/images/manual-xt/Pictures/surge_xt_logo.png diff --git a/manual/images/Pictures/tech_conditioner.png b/public/images/manual-xt/Pictures/tech_conditioner.png similarity index 100% rename from manual/images/Pictures/tech_conditioner.png rename to public/images/manual-xt/Pictures/tech_conditioner.png diff --git a/manual/images/Pictures/tech_distortion.png b/public/images/manual-xt/Pictures/tech_distortion.png similarity index 100% rename from manual/images/Pictures/tech_distortion.png rename to public/images/manual-xt/Pictures/tech_distortion.png diff --git a/manual/images/Pictures/tech_lfos.png b/public/images/manual-xt/Pictures/tech_lfos.png similarity index 100% rename from manual/images/Pictures/tech_lfos.png rename to public/images/manual-xt/Pictures/tech_lfos.png diff --git a/manual/images/Pictures/tech_wavetable.png b/public/images/manual-xt/Pictures/tech_wavetable.png similarity index 100% rename from manual/images/Pictures/tech_wavetable.png rename to public/images/manual-xt/Pictures/tech_wavetable.png diff --git a/manual_xt/images/Pictures/triggerlanes.png b/public/images/manual-xt/Pictures/triggerlanes.png similarity index 100% rename from manual_xt/images/Pictures/triggerlanes.png rename to public/images/manual-xt/Pictures/triggerlanes.png diff --git a/manual/images/Pictures/triggerlanes2.png b/public/images/manual-xt/Pictures/triggerlanes2.png similarity index 100% rename from manual/images/Pictures/triggerlanes2.png rename to public/images/manual-xt/Pictures/triggerlanes2.png diff --git a/manual/images/Pictures/ts_slider.png b/public/images/manual-xt/Pictures/ts_slider.png similarity index 100% rename from manual/images/Pictures/ts_slider.png rename to public/images/manual-xt/Pictures/ts_slider.png diff --git a/manual_xt/images/Pictures/tuning_html-1.png b/public/images/manual-xt/Pictures/tuning_html-1.png similarity index 100% rename from manual_xt/images/Pictures/tuning_html-1.png rename to public/images/manual-xt/Pictures/tuning_html-1.png diff --git a/manual_xt/images/Pictures/tuning_html-2.png b/public/images/manual-xt/Pictures/tuning_html-2.png similarity index 100% rename from manual_xt/images/Pictures/tuning_html-2.png rename to public/images/manual-xt/Pictures/tuning_html-2.png diff --git a/manual_xt/images/Pictures/tuning_html-3.png b/public/images/manual-xt/Pictures/tuning_html-3.png similarity index 100% rename from manual_xt/images/Pictures/tuning_html-3.png rename to public/images/manual-xt/Pictures/tuning_html-3.png diff --git a/manual_xt/images/Pictures/tuning_html-4.png b/public/images/manual-xt/Pictures/tuning_html-4.png similarity index 100% rename from manual_xt/images/Pictures/tuning_html-4.png rename to public/images/manual-xt/Pictures/tuning_html-4.png diff --git a/manual_xt/images/Pictures/tuning_html-5.png b/public/images/manual-xt/Pictures/tuning_html-5.png similarity index 100% rename from manual_xt/images/Pictures/tuning_html-5.png rename to public/images/manual-xt/Pictures/tuning_html-5.png diff --git a/manual_xt/images/Pictures/tuning_interval.png b/public/images/manual-xt/Pictures/tuning_interval.png similarity index 100% rename from manual_xt/images/Pictures/tuning_interval.png rename to public/images/manual-xt/Pictures/tuning_interval.png diff --git a/manual_xt/images/Pictures/tuning_menu.png b/public/images/manual-xt/Pictures/tuning_menu.png similarity index 100% rename from manual_xt/images/Pictures/tuning_menu.png rename to public/images/manual-xt/Pictures/tuning_menu.png diff --git a/manual_xt/images/Pictures/tuning_menu_2.png b/public/images/manual-xt/Pictures/tuning_menu_2.png similarity index 100% rename from manual_xt/images/Pictures/tuning_menu_2.png rename to public/images/manual-xt/Pictures/tuning_menu_2.png diff --git a/manual_xt/images/Pictures/tuning_mts-esp.png b/public/images/manual-xt/Pictures/tuning_mts-esp.png similarity index 100% rename from manual_xt/images/Pictures/tuning_mts-esp.png rename to public/images/manual-xt/Pictures/tuning_mts-esp.png diff --git a/manual_xt/images/Pictures/tuning_radial.png b/public/images/manual-xt/Pictures/tuning_radial.png similarity index 100% rename from manual_xt/images/Pictures/tuning_radial.png rename to public/images/manual-xt/Pictures/tuning_radial.png diff --git a/manual_xt/images/Pictures/tuning_rotation.png b/public/images/manual-xt/Pictures/tuning_rotation.png similarity index 100% rename from manual_xt/images/Pictures/tuning_rotation.png rename to public/images/manual-xt/Pictures/tuning_rotation.png diff --git a/manual_xt/images/Pictures/tuning_scala.png b/public/images/manual-xt/Pictures/tuning_scala.png similarity index 100% rename from manual_xt/images/Pictures/tuning_scala.png rename to public/images/manual-xt/Pictures/tuning_scala.png diff --git a/manual_xt/images/Pictures/tuning_toequal.png b/public/images/manual-xt/Pictures/tuning_toequal.png similarity index 100% rename from manual_xt/images/Pictures/tuning_toequal.png rename to public/images/manual-xt/Pictures/tuning_toequal.png diff --git a/manual/images/Pictures/typein_window.png b/public/images/manual-xt/Pictures/typein_window.png similarity index 100% rename from manual/images/Pictures/typein_window.png rename to public/images/manual-xt/Pictures/typein_window.png diff --git a/manual_xt/images/Pictures/waveshaper.png b/public/images/manual-xt/Pictures/waveshaper.png similarity index 100% rename from manual_xt/images/Pictures/waveshaper.png rename to public/images/manual-xt/Pictures/waveshaper.png diff --git a/manual_xt/images/Pictures/waveshaper_analysis.png b/public/images/manual-xt/Pictures/waveshaper_analysis.png similarity index 100% rename from manual_xt/images/Pictures/waveshaper_analysis.png rename to public/images/manual-xt/Pictures/waveshaper_analysis.png diff --git a/manual/images/Source/20000007000035BD000003096683A842.svm b/public/images/manual-xt/Source/20000007000035BD000003096683A842.svm similarity index 100% rename from manual/images/Source/20000007000035BD000003096683A842.svm rename to public/images/manual-xt/Source/20000007000035BD000003096683A842.svm diff --git a/manual/images/Source/Surge Signal Flow.sketch b/public/images/manual-xt/Source/Surge Signal Flow.sketch similarity index 100% rename from manual/images/Source/Surge Signal Flow.sketch rename to public/images/manual-xt/Source/Surge Signal Flow.sketch diff --git a/manual/images/Source/fxsection.odg b/public/images/manual-xt/Source/fxsection.odg similarity index 100% rename from manual/images/Source/fxsection.odg rename to public/images/manual-xt/Source/fxsection.odg diff --git a/manual/images/Source/illu10.odg b/public/images/manual-xt/Source/illu10.odg similarity index 100% rename from manual/images/Source/illu10.odg rename to public/images/manual-xt/Source/illu10.odg diff --git a/manual/images/Source/illu10_1.svm b/public/images/manual-xt/Source/illu10_1.svm similarity index 100% rename from manual/images/Source/illu10_1.svm rename to public/images/manual-xt/Source/illu10_1.svm diff --git a/manual/images/Source/illu11.odg b/public/images/manual-xt/Source/illu11.odg similarity index 100% rename from manual/images/Source/illu11.odg rename to public/images/manual-xt/Source/illu11.odg diff --git a/manual/images/Source/illu11_1.svm b/public/images/manual-xt/Source/illu11_1.svm similarity index 100% rename from manual/images/Source/illu11_1.svm rename to public/images/manual-xt/Source/illu11_1.svm diff --git a/manual/images/Source/illu12.odg b/public/images/manual-xt/Source/illu12.odg similarity index 100% rename from manual/images/Source/illu12.odg rename to public/images/manual-xt/Source/illu12.odg diff --git a/manual/images/Source/illu14.svm b/public/images/manual-xt/Source/illu14.svm similarity index 100% rename from manual/images/Source/illu14.svm rename to public/images/manual-xt/Source/illu14.svm diff --git a/manual/images/Source/illu15.odg b/public/images/manual-xt/Source/illu15.odg similarity index 100% rename from manual/images/Source/illu15.odg rename to public/images/manual-xt/Source/illu15.odg diff --git a/manual/images/Source/illu16.odg b/public/images/manual-xt/Source/illu16.odg similarity index 100% rename from manual/images/Source/illu16.odg rename to public/images/manual-xt/Source/illu16.odg diff --git a/manual/images/Source/illu17.odg b/public/images/manual-xt/Source/illu17.odg similarity index 100% rename from manual/images/Source/illu17.odg rename to public/images/manual-xt/Source/illu17.odg diff --git a/manual/images/Source/illu18.odg b/public/images/manual-xt/Source/illu18.odg similarity index 100% rename from manual/images/Source/illu18.odg rename to public/images/manual-xt/Source/illu18.odg diff --git a/manual/images/Source/illu2.odg b/public/images/manual-xt/Source/illu2.odg similarity index 100% rename from manual/images/Source/illu2.odg rename to public/images/manual-xt/Source/illu2.odg diff --git a/manual/images/Source/illu20.odg b/public/images/manual-xt/Source/illu20.odg similarity index 100% rename from manual/images/Source/illu20.odg rename to public/images/manual-xt/Source/illu20.odg diff --git a/manual/images/Source/illu3.odg b/public/images/manual-xt/Source/illu3.odg similarity index 100% rename from manual/images/Source/illu3.odg rename to public/images/manual-xt/Source/illu3.odg diff --git a/manual/images/Source/illu8.svm b/public/images/manual-xt/Source/illu8.svm similarity index 100% rename from manual/images/Source/illu8.svm rename to public/images/manual-xt/Source/illu8.svm diff --git a/manual/images/Source/illu8_6.svm b/public/images/manual-xt/Source/illu8_6.svm similarity index 100% rename from manual/images/Source/illu8_6.svm rename to public/images/manual-xt/Source/illu8_6.svm diff --git a/manual/images/Source/illu9_2.svm b/public/images/manual-xt/Source/illu9_2.svm similarity index 100% rename from manual/images/Source/illu9_2.svm rename to public/images/manual-xt/Source/illu9_2.svm diff --git a/manual/images/Source/modulationsourceselectionbar.odg b/public/images/manual-xt/Source/modulationsourceselectionbar.odg similarity index 100% rename from manual/images/Source/modulationsourceselectionbar.odg rename to public/images/manual-xt/Source/modulationsourceselectionbar.odg diff --git a/manual/images/Source/tech_conditioner.odg b/public/images/manual-xt/Source/tech_conditioner.odg similarity index 100% rename from manual/images/Source/tech_conditioner.odg rename to public/images/manual-xt/Source/tech_conditioner.odg diff --git a/manual/images/Source/tech_distortion.odg b/public/images/manual-xt/Source/tech_distortion.odg similarity index 100% rename from manual/images/Source/tech_distortion.odg rename to public/images/manual-xt/Source/tech_distortion.odg diff --git a/manual/images/Source/tech_lfos.odg b/public/images/manual-xt/Source/tech_lfos.odg similarity index 100% rename from manual/images/Source/tech_lfos.odg rename to public/images/manual-xt/Source/tech_lfos.odg diff --git a/manual/images/Source/tech_wavetable.odg b/public/images/manual-xt/Source/tech_wavetable.odg similarity index 100% rename from manual/images/Source/tech_wavetable.odg rename to public/images/manual-xt/Source/tech_wavetable.odg diff --git a/manual/images/Pictures/10000000000004BE0000012727D0CC6B.gif b/public/images/manual/Pictures/10000000000004BE0000012727D0CC6B.gif similarity index 100% rename from manual/images/Pictures/10000000000004BE0000012727D0CC6B.gif rename to public/images/manual/Pictures/10000000000004BE0000012727D0CC6B.gif diff --git a/manual/images/Pictures/100002010000017D000000E831C359AF12FB1E78.png b/public/images/manual/Pictures/100002010000017D000000E831C359AF12FB1E78.png similarity index 100% rename from manual/images/Pictures/100002010000017D000000E831C359AF12FB1E78.png rename to public/images/manual/Pictures/100002010000017D000000E831C359AF12FB1E78.png diff --git a/manual/images/Pictures/10000201000002F10000011A6A9F9518FC81E03D.png b/public/images/manual/Pictures/10000201000002F10000011A6A9F9518FC81E03D.png similarity index 100% rename from manual/images/Pictures/10000201000002F10000011A6A9F9518FC81E03D.png rename to public/images/manual/Pictures/10000201000002F10000011A6A9F9518FC81E03D.png diff --git a/manual/images/Pictures/100002010000033C00000297C306F8297543213C.png b/public/images/manual/Pictures/100002010000033C00000297C306F8297543213C.png similarity index 100% rename from manual/images/Pictures/100002010000033C00000297C306F8297543213C.png rename to public/images/manual/Pictures/100002010000033C00000297C306F8297543213C.png diff --git a/manual/images/Pictures/10000201000003FB000003A371AD8E15B665FD73.png b/public/images/manual/Pictures/10000201000003FB000003A371AD8E15B665FD73.png similarity index 100% rename from manual/images/Pictures/10000201000003FB000003A371AD8E15B665FD73.png rename to public/images/manual/Pictures/10000201000003FB000003A371AD8E15B665FD73.png diff --git a/manual/images/Pictures/100002010000040B000000E98D19CA7CD906A2A8.png b/public/images/manual/Pictures/100002010000040B000000E98D19CA7CD906A2A8.png similarity index 100% rename from manual/images/Pictures/100002010000040B000000E98D19CA7CD906A2A8.png rename to public/images/manual/Pictures/100002010000040B000000E98D19CA7CD906A2A8.png diff --git a/manual/images/Pictures/10000201000004AD0000031A6310C4E66CC00331.png b/public/images/manual/Pictures/10000201000004AD0000031A6310C4E66CC00331.png similarity index 100% rename from manual/images/Pictures/10000201000004AD0000031A6310C4E66CC00331.png rename to public/images/manual/Pictures/10000201000004AD0000031A6310C4E66CC00331.png diff --git a/manual/images/Pictures/20000007000035BD000003096683A842.png b/public/images/manual/Pictures/20000007000035BD000003096683A842.png similarity index 100% rename from manual/images/Pictures/20000007000035BD000003096683A842.png rename to public/images/manual/Pictures/20000007000035BD000003096683A842.png diff --git a/manual_xt/images/Pictures/EGs.png b/public/images/manual/Pictures/EGs.png similarity index 100% rename from manual_xt/images/Pictures/EGs.png rename to public/images/manual/Pictures/EGs.png diff --git a/manual_xt/images/Pictures/EGs_orange_fields.png b/public/images/manual/Pictures/EGs_orange_fields.png similarity index 100% rename from manual_xt/images/Pictures/EGs_orange_fields.png rename to public/images/manual/Pictures/EGs_orange_fields.png diff --git a/manual_xt/images/Pictures/FM2.png b/public/images/manual/Pictures/FM2.png similarity index 100% rename from manual_xt/images/Pictures/FM2.png rename to public/images/manual/Pictures/FM2.png diff --git a/manual_xt/images/Pictures/FM3.png b/public/images/manual/Pictures/FM3.png similarity index 100% rename from manual_xt/images/Pictures/FM3.png rename to public/images/manual/Pictures/FM3.png diff --git a/manual_xt/images/Pictures/Typein.png b/public/images/manual/Pictures/Typein.png similarity index 100% rename from manual_xt/images/Pictures/Typein.png rename to public/images/manual/Pictures/Typein.png diff --git a/manual_xt/images/Pictures/alias_additive_editor.png b/public/images/manual/Pictures/alias_additive_editor.png similarity index 100% rename from manual_xt/images/Pictures/alias_additive_editor.png rename to public/images/manual/Pictures/alias_additive_editor.png diff --git a/manual/images/Pictures/clear_modulation.png b/public/images/manual/Pictures/clear_modulation.png similarity index 100% rename from manual/images/Pictures/clear_modulation.png rename to public/images/manual/Pictures/clear_modulation.png diff --git a/manual_xt/images/Pictures/cutoff_warp.png b/public/images/manual/Pictures/cutoff_warp.png similarity index 100% rename from manual_xt/images/Pictures/cutoff_warp.png rename to public/images/manual/Pictures/cutoff_warp.png diff --git a/manual/images/Pictures/default_mseg.png b/public/images/manual/Pictures/default_mseg.png similarity index 100% rename from manual/images/Pictures/default_mseg.png rename to public/images/manual/Pictures/default_mseg.png diff --git a/manual/images/Pictures/discrete_values.png b/public/images/manual/Pictures/discrete_values.png similarity index 100% rename from manual/images/Pictures/discrete_values.png rename to public/images/manual/Pictures/discrete_values.png diff --git a/manual_xt/images/Pictures/fx_bypass.png b/public/images/manual/Pictures/fx_bypass.png similarity index 100% rename from manual_xt/images/Pictures/fx_bypass.png rename to public/images/manual/Pictures/fx_bypass.png diff --git a/manual/images/Pictures/fxsection.png b/public/images/manual/Pictures/fxsection.png similarity index 100% rename from manual/images/Pictures/fxsection.png rename to public/images/manual/Pictures/fxsection.png diff --git a/manual_xt/images/Pictures/gru.png b/public/images/manual/Pictures/gru.png similarity index 100% rename from manual_xt/images/Pictures/gru.png rename to public/images/manual/Pictures/gru.png diff --git a/manual_xt/images/Pictures/illu10.png b/public/images/manual/Pictures/illu10.png similarity index 100% rename from manual_xt/images/Pictures/illu10.png rename to public/images/manual/Pictures/illu10.png diff --git a/manual_xt/images/Pictures/illu11.png b/public/images/manual/Pictures/illu11.png similarity index 100% rename from manual_xt/images/Pictures/illu11.png rename to public/images/manual/Pictures/illu11.png diff --git a/manual_xt/images/Pictures/illu12.png b/public/images/manual/Pictures/illu12.png similarity index 100% rename from manual_xt/images/Pictures/illu12.png rename to public/images/manual/Pictures/illu12.png diff --git a/manual_xt/images/Pictures/illu14.png b/public/images/manual/Pictures/illu14.png similarity index 100% rename from manual_xt/images/Pictures/illu14.png rename to public/images/manual/Pictures/illu14.png diff --git a/manual_xt/images/Pictures/illu15.png b/public/images/manual/Pictures/illu15.png similarity index 100% rename from manual_xt/images/Pictures/illu15.png rename to public/images/manual/Pictures/illu15.png diff --git a/manual_xt/images/Pictures/illu16.png b/public/images/manual/Pictures/illu16.png similarity index 100% rename from manual_xt/images/Pictures/illu16.png rename to public/images/manual/Pictures/illu16.png diff --git a/manual_xt/images/Pictures/illu17.png b/public/images/manual/Pictures/illu17.png similarity index 100% rename from manual_xt/images/Pictures/illu17.png rename to public/images/manual/Pictures/illu17.png diff --git a/manual/images/Pictures/illu18.png b/public/images/manual/Pictures/illu18.png similarity index 100% rename from manual/images/Pictures/illu18.png rename to public/images/manual/Pictures/illu18.png diff --git a/manual/images/Pictures/illu19.png b/public/images/manual/Pictures/illu19.png similarity index 100% rename from manual/images/Pictures/illu19.png rename to public/images/manual/Pictures/illu19.png diff --git a/manual_xt/images/Pictures/illu2.png b/public/images/manual/Pictures/illu2.png similarity index 100% rename from manual_xt/images/Pictures/illu2.png rename to public/images/manual/Pictures/illu2.png diff --git a/manual_xt/images/Pictures/illu20.png b/public/images/manual/Pictures/illu20.png similarity index 100% rename from manual_xt/images/Pictures/illu20.png rename to public/images/manual/Pictures/illu20.png diff --git a/manual/images/Pictures/illu3.png b/public/images/manual/Pictures/illu3.png similarity index 100% rename from manual/images/Pictures/illu3.png rename to public/images/manual/Pictures/illu3.png diff --git a/manual/images/Pictures/illu7.png b/public/images/manual/Pictures/illu7.png similarity index 100% rename from manual/images/Pictures/illu7.png rename to public/images/manual/Pictures/illu7.png diff --git a/manual_xt/images/Pictures/illu8.png b/public/images/manual/Pictures/illu8.png similarity index 100% rename from manual_xt/images/Pictures/illu8.png rename to public/images/manual/Pictures/illu8.png diff --git a/manual/images/Pictures/illu9_3.png b/public/images/manual/Pictures/illu9_3.png similarity index 100% rename from manual/images/Pictures/illu9_3.png rename to public/images/manual/Pictures/illu9_3.png diff --git a/manual_xt/images/Pictures/illu9_5.png b/public/images/manual/Pictures/illu9_5.png similarity index 100% rename from manual_xt/images/Pictures/illu9_5.png rename to public/images/manual/Pictures/illu9_5.png diff --git a/manual_xt/images/Pictures/lfo_editor.png b/public/images/manual/Pictures/lfo_editor.png similarity index 100% rename from manual_xt/images/Pictures/lfo_editor.png rename to public/images/manual/Pictures/lfo_editor.png diff --git a/manual_xt/images/Pictures/lfo_eg.png b/public/images/manual/Pictures/lfo_eg.png similarity index 100% rename from manual_xt/images/Pictures/lfo_eg.png rename to public/images/manual/Pictures/lfo_eg.png diff --git a/manual/images/Pictures/lfo_shapes.png b/public/images/manual/Pictures/lfo_shapes.png similarity index 100% rename from manual/images/Pictures/lfo_shapes.png rename to public/images/manual/Pictures/lfo_shapes.png diff --git a/manual_xt/images/Pictures/mod_source_buttons.png b/public/images/manual/Pictures/mod_source_buttons.png similarity index 100% rename from manual_xt/images/Pictures/mod_source_buttons.png rename to public/images/manual/Pictures/mod_source_buttons.png diff --git a/manual/images/Pictures/modsource_context_menu.png b/public/images/manual/Pictures/modsource_context_menu.png similarity index 100% rename from manual/images/Pictures/modsource_context_menu.png rename to public/images/manual/Pictures/modsource_context_menu.png diff --git a/manual_xt/images/Pictures/modsource_labels.png b/public/images/manual/Pictures/modsource_labels.png similarity index 100% rename from manual_xt/images/Pictures/modsource_labels.png rename to public/images/manual/Pictures/modsource_labels.png diff --git a/manual/images/Pictures/modulation_routing.png b/public/images/manual/Pictures/modulation_routing.png similarity index 100% rename from manual/images/Pictures/modulation_routing.png rename to public/images/manual/Pictures/modulation_routing.png diff --git a/manual/images/Pictures/modulationsourceselectionbar.png b/public/images/manual/Pictures/modulationsourceselectionbar.png similarity index 100% rename from manual/images/Pictures/modulationsourceselectionbar.png rename to public/images/manual/Pictures/modulationsourceselectionbar.png diff --git a/manual_xt/images/Pictures/mseg.png b/public/images/manual/Pictures/mseg.png similarity index 100% rename from manual_xt/images/Pictures/mseg.png rename to public/images/manual/Pictures/mseg.png diff --git a/manual_xt/images/Pictures/open_mseg.png b/public/images/manual/Pictures/open_mseg.png similarity index 100% rename from manual_xt/images/Pictures/open_mseg.png rename to public/images/manual/Pictures/open_mseg.png diff --git a/manual/images/Pictures/patchglobal.png b/public/images/manual/Pictures/patchglobal.png similarity index 100% rename from manual/images/Pictures/patchglobal.png rename to public/images/manual/Pictures/patchglobal.png diff --git a/manual_xt/images/Pictures/reso_warp.png b/public/images/manual/Pictures/reso_warp.png similarity index 100% rename from manual_xt/images/Pictures/reso_warp.png rename to public/images/manual/Pictures/reso_warp.png diff --git a/manual_xt/images/Pictures/routing_1.png b/public/images/manual/Pictures/routing_1.png similarity index 100% rename from manual_xt/images/Pictures/routing_1.png rename to public/images/manual/Pictures/routing_1.png diff --git a/manual_xt/images/Pictures/routing_2.png b/public/images/manual/Pictures/routing_2.png similarity index 100% rename from manual_xt/images/Pictures/routing_2.png rename to public/images/manual/Pictures/routing_2.png diff --git a/manual_xt/images/Pictures/routing_3.png b/public/images/manual/Pictures/routing_3.png similarity index 100% rename from manual_xt/images/Pictures/routing_3.png rename to public/images/manual/Pictures/routing_3.png diff --git a/manual_xt/images/Pictures/routing_3_unipolar.png b/public/images/manual/Pictures/routing_3_unipolar.png similarity index 100% rename from manual_xt/images/Pictures/routing_3_unipolar.png rename to public/images/manual/Pictures/routing_3_unipolar.png diff --git a/manual/images/Pictures/routingbar.png b/public/images/manual/Pictures/routingbar.png similarity index 100% rename from manual/images/Pictures/routingbar.png rename to public/images/manual/Pictures/routingbar.png diff --git a/manual_xt/images/Pictures/routingbar_sections.png b/public/images/manual/Pictures/routingbar_sections.png similarity index 100% rename from manual_xt/images/Pictures/routingbar_sections.png rename to public/images/manual/Pictures/routingbar_sections.png diff --git a/manual_xt/images/Pictures/scene_select.png b/public/images/manual/Pictures/scene_select.png similarity index 100% rename from manual_xt/images/Pictures/scene_select.png rename to public/images/manual/Pictures/scene_select.png diff --git a/manual/images/Pictures/sections.png b/public/images/manual/Pictures/sections.png similarity index 100% rename from manual/images/Pictures/sections.png rename to public/images/manual/Pictures/sections.png diff --git a/manual/images/Pictures/signal_flow.png b/public/images/manual/Pictures/signal_flow.png similarity index 100% rename from manual/images/Pictures/signal_flow.png rename to public/images/manual/Pictures/signal_flow.png diff --git a/manual/images/Pictures/slider_context_menu.png b/public/images/manual/Pictures/slider_context_menu.png similarity index 100% rename from manual/images/Pictures/slider_context_menu.png rename to public/images/manual/Pictures/slider_context_menu.png diff --git a/manual_xt/images/Pictures/sound_generation.png b/public/images/manual/Pictures/sound_generation.png similarity index 100% rename from manual_xt/images/Pictures/sound_generation.png rename to public/images/manual/Pictures/sound_generation.png diff --git a/manual/images/Pictures/sound_shaping.png b/public/images/manual/Pictures/sound_shaping.png similarity index 100% rename from manual/images/Pictures/sound_shaping.png rename to public/images/manual/Pictures/sound_shaping.png diff --git a/manual_xt/images/Pictures/status.png b/public/images/manual/Pictures/status.png similarity index 100% rename from manual_xt/images/Pictures/status.png rename to public/images/manual/Pictures/status.png diff --git a/manual_xt/images/Pictures/stepseq.png b/public/images/manual/Pictures/stepseq.png similarity index 100% rename from manual_xt/images/Pictures/stepseq.png rename to public/images/manual/Pictures/stepseq.png diff --git a/manual_xt/images/Pictures/stepseq_deform1.png b/public/images/manual/Pictures/stepseq_deform1.png similarity index 100% rename from manual_xt/images/Pictures/stepseq_deform1.png rename to public/images/manual/Pictures/stepseq_deform1.png diff --git a/manual_xt/images/Pictures/stepseq_deform2.png b/public/images/manual/Pictures/stepseq_deform2.png similarity index 100% rename from manual_xt/images/Pictures/stepseq_deform2.png rename to public/images/manual/Pictures/stepseq_deform2.png diff --git a/manual/images/Pictures/store_dialog.png b/public/images/manual/Pictures/store_dialog.png similarity index 100% rename from manual/images/Pictures/store_dialog.png rename to public/images/manual/Pictures/store_dialog.png diff --git a/manual/images/Pictures/surge.png b/public/images/manual/Pictures/surge.png similarity index 100% rename from manual/images/Pictures/surge.png rename to public/images/manual/Pictures/surge.png diff --git a/manual/images/Pictures/surge_dark.png b/public/images/manual/Pictures/surge_dark.png similarity index 100% rename from manual/images/Pictures/surge_dark.png rename to public/images/manual/Pictures/surge_dark.png diff --git a/manual/images/Pictures/surge_royal.png b/public/images/manual/Pictures/surge_royal.png similarity index 100% rename from manual/images/Pictures/surge_royal.png rename to public/images/manual/Pictures/surge_royal.png diff --git a/manual/images/Pictures/surgelogo.png b/public/images/manual/Pictures/surgelogo.png similarity index 100% rename from manual/images/Pictures/surgelogo.png rename to public/images/manual/Pictures/surgelogo.png diff --git a/manual/images/Pictures/surgelogo_old.gif b/public/images/manual/Pictures/surgelogo_old.gif similarity index 100% rename from manual/images/Pictures/surgelogo_old.gif rename to public/images/manual/Pictures/surgelogo_old.gif diff --git a/manual_xt/images/Pictures/tech_conditioner.png b/public/images/manual/Pictures/tech_conditioner.png similarity index 100% rename from manual_xt/images/Pictures/tech_conditioner.png rename to public/images/manual/Pictures/tech_conditioner.png diff --git a/manual_xt/images/Pictures/tech_distortion.png b/public/images/manual/Pictures/tech_distortion.png similarity index 100% rename from manual_xt/images/Pictures/tech_distortion.png rename to public/images/manual/Pictures/tech_distortion.png diff --git a/manual_xt/images/Pictures/tech_lfos.png b/public/images/manual/Pictures/tech_lfos.png similarity index 100% rename from manual_xt/images/Pictures/tech_lfos.png rename to public/images/manual/Pictures/tech_lfos.png diff --git a/manual_xt/images/Pictures/tech_wavetable.png b/public/images/manual/Pictures/tech_wavetable.png similarity index 100% rename from manual_xt/images/Pictures/tech_wavetable.png rename to public/images/manual/Pictures/tech_wavetable.png diff --git a/manual/images/Pictures/triggerlanes.png b/public/images/manual/Pictures/triggerlanes.png similarity index 100% rename from manual/images/Pictures/triggerlanes.png rename to public/images/manual/Pictures/triggerlanes.png diff --git a/manual_xt/images/Pictures/triggerlanes2.png b/public/images/manual/Pictures/triggerlanes2.png similarity index 100% rename from manual_xt/images/Pictures/triggerlanes2.png rename to public/images/manual/Pictures/triggerlanes2.png diff --git a/manual_xt/images/Pictures/ts_slider.png b/public/images/manual/Pictures/ts_slider.png similarity index 100% rename from manual_xt/images/Pictures/ts_slider.png rename to public/images/manual/Pictures/ts_slider.png diff --git a/manual/images/Pictures/typein_modulation.png b/public/images/manual/Pictures/typein_modulation.png similarity index 100% rename from manual/images/Pictures/typein_modulation.png rename to public/images/manual/Pictures/typein_modulation.png diff --git a/manual_xt/images/Pictures/typein_window.png b/public/images/manual/Pictures/typein_window.png similarity index 100% rename from manual_xt/images/Pictures/typein_window.png rename to public/images/manual/Pictures/typein_window.png diff --git a/manual_xt/images/Source/20000007000035BD000003096683A842.svm b/public/images/manual/Source/20000007000035BD000003096683A842.svm similarity index 100% rename from manual_xt/images/Source/20000007000035BD000003096683A842.svm rename to public/images/manual/Source/20000007000035BD000003096683A842.svm diff --git a/manual_xt/images/Source/Surge Signal Flow.sketch b/public/images/manual/Source/Surge Signal Flow.sketch similarity index 100% rename from manual_xt/images/Source/Surge Signal Flow.sketch rename to public/images/manual/Source/Surge Signal Flow.sketch diff --git a/manual_xt/images/Source/fxsection.odg b/public/images/manual/Source/fxsection.odg similarity index 100% rename from manual_xt/images/Source/fxsection.odg rename to public/images/manual/Source/fxsection.odg diff --git a/manual_xt/images/Source/illu10.odg b/public/images/manual/Source/illu10.odg similarity index 100% rename from manual_xt/images/Source/illu10.odg rename to public/images/manual/Source/illu10.odg diff --git a/manual_xt/images/Source/illu10_1.svm b/public/images/manual/Source/illu10_1.svm similarity index 100% rename from manual_xt/images/Source/illu10_1.svm rename to public/images/manual/Source/illu10_1.svm diff --git a/manual_xt/images/Source/illu11.odg b/public/images/manual/Source/illu11.odg similarity index 100% rename from manual_xt/images/Source/illu11.odg rename to public/images/manual/Source/illu11.odg diff --git a/manual_xt/images/Source/illu11_1.svm b/public/images/manual/Source/illu11_1.svm similarity index 100% rename from manual_xt/images/Source/illu11_1.svm rename to public/images/manual/Source/illu11_1.svm diff --git a/manual_xt/images/Source/illu12.odg b/public/images/manual/Source/illu12.odg similarity index 100% rename from manual_xt/images/Source/illu12.odg rename to public/images/manual/Source/illu12.odg diff --git a/manual_xt/images/Source/illu14.svm b/public/images/manual/Source/illu14.svm similarity index 100% rename from manual_xt/images/Source/illu14.svm rename to public/images/manual/Source/illu14.svm diff --git a/manual_xt/images/Source/illu15.odg b/public/images/manual/Source/illu15.odg similarity index 100% rename from manual_xt/images/Source/illu15.odg rename to public/images/manual/Source/illu15.odg diff --git a/manual_xt/images/Source/illu16.odg b/public/images/manual/Source/illu16.odg similarity index 100% rename from manual_xt/images/Source/illu16.odg rename to public/images/manual/Source/illu16.odg diff --git a/manual_xt/images/Source/illu17.odg b/public/images/manual/Source/illu17.odg similarity index 100% rename from manual_xt/images/Source/illu17.odg rename to public/images/manual/Source/illu17.odg diff --git a/manual_xt/images/Source/illu18.odg b/public/images/manual/Source/illu18.odg similarity index 100% rename from manual_xt/images/Source/illu18.odg rename to public/images/manual/Source/illu18.odg diff --git a/manual_xt/images/Source/illu2.odg b/public/images/manual/Source/illu2.odg similarity index 100% rename from manual_xt/images/Source/illu2.odg rename to public/images/manual/Source/illu2.odg diff --git a/manual_xt/images/Source/illu20.odg b/public/images/manual/Source/illu20.odg similarity index 100% rename from manual_xt/images/Source/illu20.odg rename to public/images/manual/Source/illu20.odg diff --git a/manual_xt/images/Source/illu3.odg b/public/images/manual/Source/illu3.odg similarity index 100% rename from manual_xt/images/Source/illu3.odg rename to public/images/manual/Source/illu3.odg diff --git a/manual/images/Source/illu7.svm b/public/images/manual/Source/illu7.svm similarity index 100% rename from manual/images/Source/illu7.svm rename to public/images/manual/Source/illu7.svm diff --git a/manual_xt/images/Source/illu8.svm b/public/images/manual/Source/illu8.svm similarity index 100% rename from manual_xt/images/Source/illu8.svm rename to public/images/manual/Source/illu8.svm diff --git a/manual_xt/images/Source/illu8_6.svm b/public/images/manual/Source/illu8_6.svm similarity index 100% rename from manual_xt/images/Source/illu8_6.svm rename to public/images/manual/Source/illu8_6.svm diff --git a/manual_xt/images/Source/illu9_2.svm b/public/images/manual/Source/illu9_2.svm similarity index 100% rename from manual_xt/images/Source/illu9_2.svm rename to public/images/manual/Source/illu9_2.svm diff --git a/manual_xt/images/Source/modulationsourceselectionbar.odg b/public/images/manual/Source/modulationsourceselectionbar.odg similarity index 100% rename from manual_xt/images/Source/modulationsourceselectionbar.odg rename to public/images/manual/Source/modulationsourceselectionbar.odg diff --git a/manual_xt/images/Source/tech_conditioner.odg b/public/images/manual/Source/tech_conditioner.odg similarity index 100% rename from manual_xt/images/Source/tech_conditioner.odg rename to public/images/manual/Source/tech_conditioner.odg diff --git a/manual_xt/images/Source/tech_distortion.odg b/public/images/manual/Source/tech_distortion.odg similarity index 100% rename from manual_xt/images/Source/tech_distortion.odg rename to public/images/manual/Source/tech_distortion.odg diff --git a/manual_xt/images/Source/tech_lfos.odg b/public/images/manual/Source/tech_lfos.odg similarity index 100% rename from manual_xt/images/Source/tech_lfos.odg rename to public/images/manual/Source/tech_lfos.odg diff --git a/manual_xt/images/Source/tech_wavetable.odg b/public/images/manual/Source/tech_wavetable.odg similarity index 100% rename from manual_xt/images/Source/tech_wavetable.odg rename to public/images/manual/Source/tech_wavetable.odg diff --git a/assets/images/Modulation.jpg b/public/images/modulation.jpg similarity index 100% rename from assets/images/Modulation.jpg rename to public/images/modulation.jpg diff --git a/assets/images/og_image.png b/public/images/og_image.png similarity index 100% rename from assets/images/og_image.png rename to public/images/og_image.png diff --git a/public/images/oscillator.jpg b/public/images/oscillator.jpg new file mode 100644 index 0000000000..b7b9f68d02 Binary files /dev/null and b/public/images/oscillator.jpg differ diff --git a/assets/images/Patches.jpg b/public/images/patches.jpg similarity index 100% rename from assets/images/Patches.jpg rename to public/images/patches.jpg diff --git a/rack_manual/images/SurgeChorus.png b/public/images/rack-manual/SurgeChorus.png similarity index 100% rename from rack_manual/images/SurgeChorus.png rename to public/images/rack-manual/SurgeChorus.png diff --git a/rack_manual/images/SurgeDelay.png b/public/images/rack-manual/SurgeDelay.png similarity index 100% rename from rack_manual/images/SurgeDelay.png rename to public/images/rack-manual/SurgeDelay.png diff --git a/rack_manual/images/SurgeLFO.png b/public/images/rack-manual/SurgeLFO.png similarity index 100% rename from rack_manual/images/SurgeLFO.png rename to public/images/rack-manual/SurgeLFO.png diff --git a/rack_manual/images/SurgeOSC.png b/public/images/rack-manual/SurgeOSC.png similarity index 100% rename from rack_manual/images/SurgeOSC.png rename to public/images/rack-manual/SurgeOSC.png diff --git a/rack_manual/images/SurgePatchPlayer.png b/public/images/rack-manual/SurgePatchPlayer.png similarity index 100% rename from rack_manual/images/SurgePatchPlayer.png rename to public/images/rack-manual/SurgePatchPlayer.png diff --git a/rack_manual/images/SurgeWTOSC.png b/public/images/rack-manual/SurgeWTOSC.png similarity index 100% rename from rack_manual/images/SurgeWTOSC.png rename to public/images/rack-manual/SurgeWTOSC.png diff --git a/rack_manual/images/eq.png b/public/images/rack-manual/eq.png similarity index 100% rename from rack_manual/images/eq.png rename to public/images/rack-manual/eq.png diff --git a/rack_manual/images/lfo_freq.png b/public/images/rack-manual/lfo_freq.png similarity index 100% rename from rack_manual/images/lfo_freq.png rename to public/images/rack-manual/lfo_freq.png diff --git a/rack_manual/images/lfo_ts.png b/public/images/rack-manual/lfo_ts.png similarity index 100% rename from rack_manual/images/lfo_ts.png rename to public/images/rack-manual/lfo_ts.png diff --git a/rack_manual/images/output.png b/public/images/rack-manual/output.png similarity index 100% rename from rack_manual/images/output.png rename to public/images/rack-manual/output.png diff --git a/rack_manual/images/param.png b/public/images/rack-manual/param.png similarity index 100% rename from rack_manual/images/param.png rename to public/images/rack-manual/param.png diff --git a/rack_xt_manual/images/EGxVCA.png b/public/images/rack-xt-manual/EGxVCA.png similarity index 100% rename from rack_xt_manual/images/EGxVCA.png rename to public/images/rack-xt-manual/EGxVCA.png diff --git a/rack_xt_manual/images/Quad AD.png b/public/images/rack-xt-manual/Quad AD.png similarity index 100% rename from rack_xt_manual/images/Quad AD.png rename to public/images/rack-xt-manual/Quad AD.png diff --git a/rack_xt_manual/images/Quad LFO.png b/public/images/rack-xt-manual/Quad LFO.png similarity index 100% rename from rack_xt_manual/images/Quad LFO.png rename to public/images/rack-xt-manual/Quad LFO.png diff --git a/rack_xt_manual/images/Tuned Delay+.png b/public/images/rack-xt-manual/Tuned Delay+.png similarity index 100% rename from rack_xt_manual/images/Tuned Delay+.png rename to public/images/rack-xt-manual/Tuned Delay+.png diff --git a/rack_xt_manual/images/basic_module.png b/public/images/rack-xt-manual/basic_module.png similarity index 100% rename from rack_xt_manual/images/basic_module.png rename to public/images/rack-xt-manual/basic_module.png diff --git a/rack_xt_manual/images/chorus.PNG b/public/images/rack-xt-manual/chorus.PNG similarity index 100% rename from rack_xt_manual/images/chorus.PNG rename to public/images/rack-xt-manual/chorus.PNG diff --git a/rack_xt_manual/images/darktheme.PNG b/public/images/rack-xt-manual/darktheme.PNG similarity index 100% rename from rack_xt_manual/images/darktheme.PNG rename to public/images/rack-xt-manual/darktheme.PNG diff --git a/rack_xt_manual/images/delay.PNG b/public/images/rack-xt-manual/delay.PNG similarity index 100% rename from rack_xt_manual/images/delay.PNG rename to public/images/rack-xt-manual/delay.PNG diff --git a/rack_xt_manual/images/filter.png b/public/images/rack-xt-manual/filter.png similarity index 100% rename from rack_xt_manual/images/filter.png rename to public/images/rack-xt-manual/filter.png diff --git a/rack_xt_manual/images/flanger_basic.png b/public/images/rack-xt-manual/flanger_basic.png similarity index 100% rename from rack_xt_manual/images/flanger_basic.png rename to public/images/rack-xt-manual/flanger_basic.png diff --git a/rack_xt_manual/images/lfo.PNG b/public/images/rack-xt-manual/lfo.PNG similarity index 100% rename from rack_xt_manual/images/lfo.PNG rename to public/images/rack-xt-manual/lfo.PNG diff --git a/rack_xt_manual/images/lfoxeg.PNG b/public/images/rack-xt-manual/lfoxeg.PNG similarity index 100% rename from rack_xt_manual/images/lfoxeg.PNG rename to public/images/rack-xt-manual/lfoxeg.PNG diff --git a/rack_xt_manual/images/lighttheme.PNG b/public/images/rack-xt-manual/lighttheme.PNG similarity index 100% rename from rack_xt_manual/images/lighttheme.PNG rename to public/images/rack-xt-manual/lighttheme.PNG diff --git a/rack_xt_manual/images/mediumtheme.PNG b/public/images/rack-xt-manual/mediumtheme.PNG similarity index 100% rename from rack_xt_manual/images/mediumtheme.PNG rename to public/images/rack-xt-manual/mediumtheme.PNG diff --git a/rack_xt_manual/images/mixer.PNG b/public/images/rack-xt-manual/mixer.PNG similarity index 100% rename from rack_xt_manual/images/mixer.PNG rename to public/images/rack-xt-manual/mixer.PNG diff --git a/rack_xt_manual/images/modern.PNG b/public/images/rack-xt-manual/modern.PNG similarity index 100% rename from rack_xt_manual/images/modern.PNG rename to public/images/rack-xt-manual/modern.PNG diff --git a/rack_xt_manual/images/modmatrix.PNG b/public/images/rack-xt-manual/modmatrix.PNG similarity index 100% rename from rack_xt_manual/images/modmatrix.PNG rename to public/images/rack-xt-manual/modmatrix.PNG diff --git a/rack_xt_manual/images/overview.png b/public/images/rack-xt-manual/overview.png similarity index 100% rename from rack_xt_manual/images/overview.png rename to public/images/rack-xt-manual/overview.png diff --git a/rack_xt_manual/images/polyphony.PNG b/public/images/rack-xt-manual/polyphony.PNG similarity index 100% rename from rack_xt_manual/images/polyphony.PNG rename to public/images/rack-xt-manual/polyphony.PNG diff --git a/rack_xt_manual/images/skins.PNG b/public/images/rack-xt-manual/skins.PNG similarity index 100% rename from rack_xt_manual/images/skins.PNG rename to public/images/rack-xt-manual/skins.PNG diff --git a/rack_xt_manual/images/treemonster.PNG b/public/images/rack-xt-manual/treemonster.PNG similarity index 100% rename from rack_xt_manual/images/treemonster.PNG rename to public/images/rack-xt-manual/treemonster.PNG diff --git a/rack_xt_manual/images/twist.PNG b/public/images/rack-xt-manual/twist.PNG similarity index 100% rename from rack_xt_manual/images/twist.PNG rename to public/images/rack-xt-manual/twist.PNG diff --git a/rack_xt_manual/images/waveshaper.PNG b/public/images/rack-xt-manual/waveshaper.PNG similarity index 100% rename from rack_xt_manual/images/waveshaper.PNG rename to public/images/rack-xt-manual/waveshaper.PNG diff --git a/rack_xt_manual/images/wavetable.PNG b/public/images/rack-xt-manual/wavetable.PNG similarity index 100% rename from rack_xt_manual/images/wavetable.PNG rename to public/images/rack-xt-manual/wavetable.PNG diff --git a/rack_xt_manual/images/wavetable_menu.png b/public/images/rack-xt-manual/wavetable_menu.png similarity index 100% rename from rack_xt_manual/images/wavetable_menu.png rename to public/images/rack-xt-manual/wavetable_menu.png diff --git a/public/images/skin-library/andromeda.png b/public/images/skin-library/andromeda.png new file mode 100644 index 0000000000..201573282d Binary files /dev/null and b/public/images/skin-library/andromeda.png differ diff --git a/public/images/skin-library/classic-delux.png b/public/images/skin-library/classic-delux.png new file mode 100644 index 0000000000..d4960d597e Binary files /dev/null and b/public/images/skin-library/classic-delux.png differ diff --git a/public/images/skin-library/dark-purple.png b/public/images/skin-library/dark-purple.png new file mode 100644 index 0000000000..a43c0a269f Binary files /dev/null and b/public/images/skin-library/dark-purple.png differ diff --git a/public/images/skin-library/funtime.png b/public/images/skin-library/funtime.png new file mode 100644 index 0000000000..e08da34576 Binary files /dev/null and b/public/images/skin-library/funtime.png differ diff --git a/public/images/skin-library/modern-dark-blue.png b/public/images/skin-library/modern-dark-blue.png new file mode 100644 index 0000000000..020fdb6a66 Binary files /dev/null and b/public/images/skin-library/modern-dark-blue.png differ diff --git a/public/images/skin-library/modern-dark.png b/public/images/skin-library/modern-dark.png new file mode 100644 index 0000000000..4f49c2a550 Binary files /dev/null and b/public/images/skin-library/modern-dark.png differ diff --git a/public/images/skin-library/royal-surge-xt.png b/public/images/skin-library/royal-surge-xt.png new file mode 100644 index 0000000000..d4eb294111 Binary files /dev/null and b/public/images/skin-library/royal-surge-xt.png differ diff --git a/public/images/skin-library/snake-charmer.png b/public/images/skin-library/snake-charmer.png new file mode 100644 index 0000000000..0d7a356c76 Binary files /dev/null and b/public/images/skin-library/snake-charmer.png differ diff --git a/public/images/skin-library/sober.png b/public/images/skin-library/sober.png new file mode 100644 index 0000000000..6e0b76b259 Binary files /dev/null and b/public/images/skin-library/sober.png differ diff --git a/assets/images/SurgeXTLogo.svg b/public/images/surge-xt-logo.svg similarity index 99% rename from assets/images/SurgeXTLogo.svg rename to public/images/surge-xt-logo.svg index bd3edf80c2..6f4c36c91c 100644 --- a/assets/images/SurgeXTLogo.svg +++ b/public/images/surge-xt-logo.svg @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/surge_xt_logo_black.png b/public/images/surge_xt_logo_black.png new file mode 100644 index 0000000000..9062480f6f Binary files /dev/null and b/public/images/surge_xt_logo_black.png differ diff --git a/public/images/surge_xt_logo_black.svg b/public/images/surge_xt_logo_black.svg new file mode 100644 index 0000000000..fe02c336a4 --- /dev/null +++ b/public/images/surge_xt_logo_black.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/public/images/surge_xt_logo_white.png b/public/images/surge_xt_logo_white.png new file mode 100644 index 0000000000..c2a6037925 Binary files /dev/null and b/public/images/surge_xt_logo_white.png differ diff --git a/public/images/surge_xt_logo_white.svg b/public/images/surge_xt_logo_white.svg new file mode 100644 index 0000000000..47d8905774 --- /dev/null +++ b/public/images/surge_xt_logo_white.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/images/Modlist.jpg b/public/images/testers.jpg similarity index 100% rename from assets/images/Modlist.jpg rename to public/images/testers.jpg diff --git a/tuning_guide/Images/Draw_Lines_SEQ_Steps_1.png b/public/images/tuning-guide/Draw_Lines_SEQ_Steps_1.png similarity index 100% rename from tuning_guide/Images/Draw_Lines_SEQ_Steps_1.png rename to public/images/tuning-guide/Draw_Lines_SEQ_Steps_1.png diff --git a/tuning_guide/Images/Draw_Lines_SEQ_Steps_2.png b/public/images/tuning-guide/Draw_Lines_SEQ_Steps_2.png similarity index 100% rename from tuning_guide/Images/Draw_Lines_SEQ_Steps_2.png rename to public/images/tuning-guide/Draw_Lines_SEQ_Steps_2.png diff --git a/tuning_guide/Images/Tuning-Claps-1.png b/public/images/tuning-guide/Tuning-Claps-1.png similarity index 100% rename from tuning_guide/Images/Tuning-Claps-1.png rename to public/images/tuning-guide/Tuning-Claps-1.png diff --git a/tuning_guide/Images/Tuning-Claps-2.png b/public/images/tuning-guide/Tuning-Claps-2.png similarity index 100% rename from tuning_guide/Images/Tuning-Claps-2.png rename to public/images/tuning-guide/Tuning-Claps-2.png diff --git a/tuning_guide/Images/Tuning-Claps-3.png b/public/images/tuning-guide/Tuning-Claps-3.png similarity index 100% rename from tuning_guide/Images/Tuning-Claps-3.png rename to public/images/tuning-guide/Tuning-Claps-3.png diff --git a/tuning_guide/Images/Tuning-Guide-1.png b/public/images/tuning-guide/Tuning-Guide-1.png similarity index 100% rename from tuning_guide/Images/Tuning-Guide-1.png rename to public/images/tuning-guide/Tuning-Guide-1.png diff --git a/tuning_guide/Images/after_modulation.png b/public/images/tuning-guide/after_modulation.png similarity index 100% rename from tuning_guide/Images/after_modulation.png rename to public/images/tuning-guide/after_modulation.png diff --git a/tuning_guide/Images/assign.png b/public/images/tuning-guide/assign.png similarity index 100% rename from tuning_guide/Images/assign.png rename to public/images/tuning-guide/assign.png diff --git a/tuning_guide/Images/assign_two_octaves.png b/public/images/tuning-guide/assign_two_octaves.png similarity index 100% rename from tuning_guide/Images/assign_two_octaves.png rename to public/images/tuning-guide/assign_two_octaves.png diff --git a/tuning_guide/Images/extend_range.png b/public/images/tuning-guide/extend_range.png similarity index 100% rename from tuning_guide/Images/extend_range.png rename to public/images/tuning-guide/extend_range.png diff --git a/tuning_guide/Images/osc_pitch.png b/public/images/tuning-guide/osc_pitch.png similarity index 100% rename from tuning_guide/Images/osc_pitch.png rename to public/images/tuning-guide/osc_pitch.png diff --git a/tuning_guide/Images/scene_pitch.png b/public/images/tuning-guide/scene_pitch.png similarity index 100% rename from tuning_guide/Images/scene_pitch.png rename to public/images/tuning-guide/scene_pitch.png diff --git a/tuning_guide/Images/steps_one_octave.png b/public/images/tuning-guide/steps_one_octave.png similarity index 100% rename from tuning_guide/Images/steps_one_octave.png rename to public/images/tuning-guide/steps_one_octave.png diff --git a/tuning_guide/Images/steps_two_octaves.png b/public/images/tuning-guide/steps_two_octaves.png similarity index 100% rename from tuning_guide/Images/steps_two_octaves.png rename to public/images/tuning-guide/steps_two_octaves.png diff --git a/tuning_guide/Images/tuning_html-1.png b/public/images/tuning-guide/tuning_html-1.png similarity index 100% rename from tuning_guide/Images/tuning_html-1.png rename to public/images/tuning-guide/tuning_html-1.png diff --git a/tuning_guide/Images/tuning_html-2.png b/public/images/tuning-guide/tuning_html-2.png similarity index 100% rename from tuning_guide/Images/tuning_html-2.png rename to public/images/tuning-guide/tuning_html-2.png diff --git a/tuning_guide/Images/tuning_html-3.png b/public/images/tuning-guide/tuning_html-3.png similarity index 100% rename from tuning_guide/Images/tuning_html-3.png rename to public/images/tuning-guide/tuning_html-3.png diff --git a/tuning_guide/Images/tuning_html-4.png b/public/images/tuning-guide/tuning_html-4.png similarity index 100% rename from tuning_guide/Images/tuning_html-4.png rename to public/images/tuning-guide/tuning_html-4.png diff --git a/tuning_guide/Images/tuning_html-5.png b/public/images/tuning-guide/tuning_html-5.png similarity index 100% rename from tuning_guide/Images/tuning_html-5.png rename to public/images/tuning-guide/tuning_html-5.png diff --git a/tuning_guide/Images/tuning_interval.png b/public/images/tuning-guide/tuning_interval.png similarity index 100% rename from tuning_guide/Images/tuning_interval.png rename to public/images/tuning-guide/tuning_interval.png diff --git a/tuning_guide/Images/tuning_radial.png b/public/images/tuning-guide/tuning_radial.png similarity index 100% rename from tuning_guide/Images/tuning_radial.png rename to public/images/tuning-guide/tuning_radial.png diff --git a/tuning_guide/Images/tuning_rotation.png b/public/images/tuning-guide/tuning_rotation.png similarity index 100% rename from tuning_guide/Images/tuning_rotation.png rename to public/images/tuning-guide/tuning_rotation.png diff --git a/tuning_guide/Images/tuning_scala.png b/public/images/tuning-guide/tuning_scala.png similarity index 100% rename from tuning_guide/Images/tuning_scala.png rename to public/images/tuning-guide/tuning_scala.png diff --git a/tuning_guide/Images/tuning_toequal.png b/public/images/tuning-guide/tuning_toequal.png similarity index 100% rename from tuning_guide/Images/tuning_toequal.png rename to public/images/tuning-guide/tuning_toequal.png diff --git a/tuning_guide/Images/typein.png b/public/images/tuning-guide/typein.png similarity index 100% rename from tuning_guide/Images/typein.png rename to public/images/tuning-guide/typein.png diff --git a/assets/manual/Surge XT User Manual.pdf b/public/manual/Surge XT User Manual.pdf similarity index 100% rename from assets/manual/Surge XT User Manual.pdf rename to public/manual/Surge XT User Manual.pdf diff --git a/public/tuning-guide/Draw_Lines_SEQ_Steps_1.png b/public/tuning-guide/Draw_Lines_SEQ_Steps_1.png new file mode 100644 index 0000000000..b2dbbb1286 Binary files /dev/null and b/public/tuning-guide/Draw_Lines_SEQ_Steps_1.png differ diff --git a/public/tuning-guide/Draw_Lines_SEQ_Steps_2.png b/public/tuning-guide/Draw_Lines_SEQ_Steps_2.png new file mode 100644 index 0000000000..6581adef3f Binary files /dev/null and b/public/tuning-guide/Draw_Lines_SEQ_Steps_2.png differ diff --git a/public/tuning-guide/Tuning-Claps-1.png b/public/tuning-guide/Tuning-Claps-1.png new file mode 100644 index 0000000000..9da5c6127f Binary files /dev/null and b/public/tuning-guide/Tuning-Claps-1.png differ diff --git a/public/tuning-guide/Tuning-Claps-2.png b/public/tuning-guide/Tuning-Claps-2.png new file mode 100644 index 0000000000..a02d2111f4 Binary files /dev/null and b/public/tuning-guide/Tuning-Claps-2.png differ diff --git a/public/tuning-guide/Tuning-Claps-3.png b/public/tuning-guide/Tuning-Claps-3.png new file mode 100644 index 0000000000..ade58033c1 Binary files /dev/null and b/public/tuning-guide/Tuning-Claps-3.png differ diff --git a/public/tuning-guide/Tuning-Guide-1.png b/public/tuning-guide/Tuning-Guide-1.png new file mode 100644 index 0000000000..cd2549556f Binary files /dev/null and b/public/tuning-guide/Tuning-Guide-1.png differ diff --git a/public/tuning-guide/after_modulation.png b/public/tuning-guide/after_modulation.png new file mode 100644 index 0000000000..03b456a81b Binary files /dev/null and b/public/tuning-guide/after_modulation.png differ diff --git a/public/tuning-guide/assign.png b/public/tuning-guide/assign.png new file mode 100644 index 0000000000..3f93e4e7e9 Binary files /dev/null and b/public/tuning-guide/assign.png differ diff --git a/public/tuning-guide/assign_two_octaves.png b/public/tuning-guide/assign_two_octaves.png new file mode 100644 index 0000000000..fb142a9ccc Binary files /dev/null and b/public/tuning-guide/assign_two_octaves.png differ diff --git a/public/tuning-guide/extend_range.png b/public/tuning-guide/extend_range.png new file mode 100644 index 0000000000..ead9895722 Binary files /dev/null and b/public/tuning-guide/extend_range.png differ diff --git a/public/tuning-guide/osc_pitch.png b/public/tuning-guide/osc_pitch.png new file mode 100644 index 0000000000..e7ede9beb2 Binary files /dev/null and b/public/tuning-guide/osc_pitch.png differ diff --git a/public/tuning-guide/scene_pitch.png b/public/tuning-guide/scene_pitch.png new file mode 100644 index 0000000000..8bb03ed686 Binary files /dev/null and b/public/tuning-guide/scene_pitch.png differ diff --git a/public/tuning-guide/steps_one_octave.png b/public/tuning-guide/steps_one_octave.png new file mode 100644 index 0000000000..4fd001f387 Binary files /dev/null and b/public/tuning-guide/steps_one_octave.png differ diff --git a/public/tuning-guide/steps_two_octaves.png b/public/tuning-guide/steps_two_octaves.png new file mode 100644 index 0000000000..c3fd233775 Binary files /dev/null and b/public/tuning-guide/steps_two_octaves.png differ diff --git a/public/tuning-guide/tuning_html-1.png b/public/tuning-guide/tuning_html-1.png new file mode 100644 index 0000000000..89281922d4 Binary files /dev/null and b/public/tuning-guide/tuning_html-1.png differ diff --git a/public/tuning-guide/tuning_html-2.png b/public/tuning-guide/tuning_html-2.png new file mode 100644 index 0000000000..e617e7c446 Binary files /dev/null and b/public/tuning-guide/tuning_html-2.png differ diff --git a/public/tuning-guide/tuning_html-3.png b/public/tuning-guide/tuning_html-3.png new file mode 100644 index 0000000000..11f4b062a3 Binary files /dev/null and b/public/tuning-guide/tuning_html-3.png differ diff --git a/public/tuning-guide/tuning_html-4.png b/public/tuning-guide/tuning_html-4.png new file mode 100644 index 0000000000..395f21eeca Binary files /dev/null and b/public/tuning-guide/tuning_html-4.png differ diff --git a/public/tuning-guide/tuning_html-5.png b/public/tuning-guide/tuning_html-5.png new file mode 100644 index 0000000000..c6f9a046ac Binary files /dev/null and b/public/tuning-guide/tuning_html-5.png differ diff --git a/public/tuning-guide/tuning_interval.png b/public/tuning-guide/tuning_interval.png new file mode 100644 index 0000000000..7f3e8cf961 Binary files /dev/null and b/public/tuning-guide/tuning_interval.png differ diff --git a/public/tuning-guide/tuning_radial.png b/public/tuning-guide/tuning_radial.png new file mode 100644 index 0000000000..2e823cbbea Binary files /dev/null and b/public/tuning-guide/tuning_radial.png differ diff --git a/public/tuning-guide/tuning_rotation.png b/public/tuning-guide/tuning_rotation.png new file mode 100644 index 0000000000..74078edf08 Binary files /dev/null and b/public/tuning-guide/tuning_rotation.png differ diff --git a/public/tuning-guide/tuning_scala.png b/public/tuning-guide/tuning_scala.png new file mode 100644 index 0000000000..941499d868 Binary files /dev/null and b/public/tuning-guide/tuning_scala.png differ diff --git a/public/tuning-guide/tuning_toequal.png b/public/tuning-guide/tuning_toequal.png new file mode 100644 index 0000000000..9e2b335be8 Binary files /dev/null and b/public/tuning-guide/tuning_toequal.png differ diff --git a/public/tuning-guide/typein.png b/public/tuning-guide/typein.png new file mode 100644 index 0000000000..5f003f025c Binary files /dev/null and b/public/tuning-guide/typein.png differ diff --git a/scripts/manual.js b/scripts/manual.js deleted file mode 100644 index a763585f3d..0000000000 --- a/scripts/manual.js +++ /dev/null @@ -1,28 +0,0 @@ -function toggleToc() { - if (document.getElementById("toc").style.display !== "initial") { - document.getElementById("toc").style.display = "initial"; - document.getElementById("toggle").setAttribute('aria-expanded', 'true'); - } else if (document.getElementById("toc").style.display === "initial") { - document.getElementById("toc").style.display = "none"; - document.getElementById("toggle").setAttribute('aria-expanded', 'false'); - } -} - -var size = window.matchMedia("(max-width: 800px)"); - -if (size.matches) { - document.getElementById("toc").addEventListener("click", toggleToc); -} - -size.onchange = (e) => { - if (e.matches) { - document.getElementById("toc").style.display = "none"; - document.getElementById("toggle").style.display = "initial"; - document.getElementById("toc").addEventListener("click", toggleToc); - } - if (!e.matches) { - document.getElementById("toc").removeEventListener("click", toggleToc); - document.getElementById("toc").style.display = "initial"; - document.getElementById("toggle").style.display = "none"; - } -}; diff --git a/scripts/os.js b/scripts/os.js deleted file mode 100644 index 9395bd66ab..0000000000 --- a/scripts/os.js +++ /dev/null @@ -1,44 +0,0 @@ ---- ---- -function getOS() { - var userAgent = window.navigator.userAgent, - platform = window.navigator.platform, - macosPlatforms = ["Macintosh", "MacIntel", "MacPPC", "Mac68K"], - windowsPlatforms = ["Win32", "Win64", "Windows", "WinCE"], - iosPlatforms = ["iPhone", "iPad", "iPod"], - bsdPlatforms = ["FreeBSD", "FreeBSD amd64"], - os = null; - - if (macosPlatforms.indexOf(platform) !== -1) { - os = "Download for macOS"; - document.getElementById("downloadButton").href = `{% include stable_xt_macos_url %}`; - } else if (iosPlatforms.indexOf(platform) !== -1) { - os = "iOS"; - document.getElementById("downloadButton").href = "#"; - document.getElementById("downloadButton").style.display = "none"; - } else if (windowsPlatforms.indexOf(platform) !== -1) { - os = "Download for Windows"; - document.getElementById("downloadButton").href = `{% include stable_xt_win_x64_url %}`; - } else if (bsdPlatforms.indexOf(platform) !== -1) { - os = "FreeBSD"; - document.getElementById("downloadButton").href = "https://github.com/surge-synthesizer/surge/blob/main/doc/Linux-and-other-Unix-like-distributions.md#surge-on-freebsd"; - } else if (/Android/.test(userAgent)) { - os = "Android"; - document.getElementById("downloadButton").href = "#"; - document.getElementById("downloadButton").style.display = "none"; - } else if (!os && /Linux/.test(platform)) { - os = "Download for Linux"; - document.getElementById("downloadButton").href = "https://github.com/surge-synthesizer/releases-xt/releases"; - } else { - os = "No Installer, Click for Details"; - document.getElementById("downloadButton").href = `#systemrequirements`; - } - - return os; -} - -function labelUpdate() { - document.getElementById("downloadButton").innerHTML = getOS(); -} - -labelUpdate() diff --git a/skin-library.md b/skin-library.md index dee8f9900b..79658f31a8 100644 --- a/skin-library.md +++ b/skin-library.md @@ -1,110 +1,3 @@ ---- -layout: page -title: Surge XT Skin Library -noheader: true -permalink: skin-library ---- - -Many folks in the Surge XT community make skins beyond the few we ship with. This page contains a set of curated -skins from community designers available for you to download. - -Installing a skin in Surge XT is very simple - simply drag the downloaded ZIP file onto a running instance of Surge XT, and you're done! - -Although we endeavour to make sure these skins are working, and also try to make sure they contain no inappropriate content, -please use them at your own risk and understand that support for errors in them may be less available than for the factory skins. - -
- - - -
- - Royal Surge XT - -
- - - - - -
- - Andromeda - -
-
-⬇ Andromeda
-Contains a set of 9 color theme variations. Shown above is Andromeda - Dub. Skins by Leo Nordmann
-
- - - - -
- - Snake Charmer - -
-
-⬇ Snake Charmer
-by Hello Eye
-
- - - - -
- - Sober - -
- - - - - -
- - Funtime - -
- - - - - -
- - Classic Delux - -
-
-⬇ Classic Delux
-by Slowboat
-
- -
🔍︎ Full Preview diff --git a/_includes/discord_invite_link b/src/assets/includes/discord_invite_link similarity index 100% rename from _includes/discord_invite_link rename to src/assets/includes/discord_invite_link diff --git a/_includes/git_nightly_log_display b/src/assets/includes/git_nightly_log_display similarity index 100% rename from _includes/git_nightly_log_display rename to src/assets/includes/git_nightly_log_display diff --git a/_includes/git_nightly_log_hash b/src/assets/includes/git_nightly_log_hash similarity index 100% rename from _includes/git_nightly_log_hash rename to src/assets/includes/git_nightly_log_hash diff --git a/_includes/git_nightly_log_long_display b/src/assets/includes/git_nightly_log_long_display similarity index 99% rename from _includes/git_nightly_log_long_display rename to src/assets/includes/git_nightly_log_long_display index 4d064c8cdf..fcda82e5f2 100644 --- a/_includes/git_nightly_log_long_display +++ b/src/assets/includes/git_nightly_log_long_display @@ -4,5 +4,5 @@ Paul The DSP Test Fix from XT into the main branch also (#4397) -Basically: Make sure the test is specific about its +Basically: Make sure the test is specific about its file \ No newline at end of file diff --git a/_includes/git_nightly_recent_five b/src/assets/includes/git_nightly_recent_five similarity index 100% rename from _includes/git_nightly_recent_five rename to src/assets/includes/git_nightly_recent_five diff --git a/_includes/git_nightly_xt_log_display b/src/assets/includes/git_nightly_xt_log_display similarity index 100% rename from _includes/git_nightly_xt_log_display rename to src/assets/includes/git_nightly_xt_log_display diff --git a/_includes/git_nightly_xt_log_hash b/src/assets/includes/git_nightly_xt_log_hash similarity index 100% rename from _includes/git_nightly_xt_log_hash rename to src/assets/includes/git_nightly_xt_log_hash diff --git a/_includes/git_nightly_xt_log_long_display b/src/assets/includes/git_nightly_xt_log_long_display similarity index 100% rename from _includes/git_nightly_xt_log_long_display rename to src/assets/includes/git_nightly_xt_log_long_display diff --git a/_includes/git_nightly_xt_recent_five b/src/assets/includes/git_nightly_xt_recent_five similarity index 100% rename from _includes/git_nightly_xt_recent_five rename to src/assets/includes/git_nightly_xt_recent_five diff --git a/_includes/latest_build_time b/src/assets/includes/latest_build_time similarity index 100% rename from _includes/latest_build_time rename to src/assets/includes/latest_build_time diff --git a/_includes/latest_linux_x64_url b/src/assets/includes/latest_linux_x64_url similarity index 100% rename from _includes/latest_linux_x64_url rename to src/assets/includes/latest_linux_x64_url diff --git a/_includes/latest_macos_url b/src/assets/includes/latest_macos_url similarity index 100% rename from _includes/latest_macos_url rename to src/assets/includes/latest_macos_url diff --git a/_includes/latest_version b/src/assets/includes/latest_version similarity index 100% rename from _includes/latest_version rename to src/assets/includes/latest_version diff --git a/_includes/latest_win_x64_url b/src/assets/includes/latest_win_x64_url similarity index 100% rename from _includes/latest_win_x64_url rename to src/assets/includes/latest_win_x64_url diff --git a/_includes/latest_win_x64_zip_url b/src/assets/includes/latest_win_x64_zip_url similarity index 100% rename from _includes/latest_win_x64_zip_url rename to src/assets/includes/latest_win_x64_zip_url diff --git a/_includes/latest_win_x86_url b/src/assets/includes/latest_win_x86_url similarity index 100% rename from _includes/latest_win_x86_url rename to src/assets/includes/latest_win_x86_url diff --git a/_includes/latest_win_x86_zip_url b/src/assets/includes/latest_win_x86_zip_url similarity index 100% rename from _includes/latest_win_x86_zip_url rename to src/assets/includes/latest_win_x86_zip_url diff --git a/_includes/latest_xt_build_time b/src/assets/includes/latest_xt_build_time similarity index 100% rename from _includes/latest_xt_build_time rename to src/assets/includes/latest_xt_build_time diff --git a/_includes/latest_xt_linux_x64_url b/src/assets/includes/latest_xt_linux_x64_url similarity index 100% rename from _includes/latest_xt_linux_x64_url rename to src/assets/includes/latest_xt_linux_x64_url diff --git a/_includes/latest_xt_macos_url b/src/assets/includes/latest_xt_macos_url similarity index 100% rename from _includes/latest_xt_macos_url rename to src/assets/includes/latest_xt_macos_url diff --git a/_includes/latest_xt_version b/src/assets/includes/latest_xt_version similarity index 100% rename from _includes/latest_xt_version rename to src/assets/includes/latest_xt_version diff --git a/_includes/latest_xt_win_x64_url b/src/assets/includes/latest_xt_win_x64_url similarity index 100% rename from _includes/latest_xt_win_x64_url rename to src/assets/includes/latest_xt_win_x64_url diff --git a/_includes/latest_xt_win_x64_zip_url b/src/assets/includes/latest_xt_win_x64_zip_url similarity index 100% rename from _includes/latest_xt_win_x64_zip_url rename to src/assets/includes/latest_xt_win_x64_zip_url diff --git a/_includes/latest_xt_win_x86_url b/src/assets/includes/latest_xt_win_x86_url similarity index 100% rename from _includes/latest_xt_win_x86_url rename to src/assets/includes/latest_xt_win_x86_url diff --git a/_includes/latest_xt_win_x86_zip_url b/src/assets/includes/latest_xt_win_x86_zip_url similarity index 100% rename from _includes/latest_xt_win_x86_zip_url rename to src/assets/includes/latest_xt_win_x86_zip_url diff --git a/_includes/skin_autodoc.md b/src/assets/includes/skin_autodoc.md similarity index 100% rename from _includes/skin_autodoc.md rename to src/assets/includes/skin_autodoc.md diff --git a/_includes/slack_invite_link b/src/assets/includes/slack_invite_link similarity index 100% rename from _includes/slack_invite_link rename to src/assets/includes/slack_invite_link diff --git a/_includes/stable_build_time b/src/assets/includes/stable_build_time similarity index 100% rename from _includes/stable_build_time rename to src/assets/includes/stable_build_time diff --git a/_includes/stable_build_version b/src/assets/includes/stable_build_version similarity index 100% rename from _includes/stable_build_version rename to src/assets/includes/stable_build_version diff --git a/_includes/stable_linux_x64_url b/src/assets/includes/stable_linux_x64_url similarity index 100% rename from _includes/stable_linux_x64_url rename to src/assets/includes/stable_linux_x64_url diff --git a/_includes/stable_macos_url b/src/assets/includes/stable_macos_url similarity index 100% rename from _includes/stable_macos_url rename to src/assets/includes/stable_macos_url diff --git a/_includes/stable_win_x64_url b/src/assets/includes/stable_win_x64_url similarity index 100% rename from _includes/stable_win_x64_url rename to src/assets/includes/stable_win_x64_url diff --git a/_includes/stable_win_x64_zip_url b/src/assets/includes/stable_win_x64_zip_url similarity index 100% rename from _includes/stable_win_x64_zip_url rename to src/assets/includes/stable_win_x64_zip_url diff --git a/_includes/stable_win_x86_url b/src/assets/includes/stable_win_x86_url similarity index 100% rename from _includes/stable_win_x86_url rename to src/assets/includes/stable_win_x86_url diff --git a/_includes/stable_win_x86_zip_url b/src/assets/includes/stable_win_x86_zip_url similarity index 100% rename from _includes/stable_win_x86_zip_url rename to src/assets/includes/stable_win_x86_zip_url diff --git a/_includes/stable_xt_build_time b/src/assets/includes/stable_xt_build_time similarity index 100% rename from _includes/stable_xt_build_time rename to src/assets/includes/stable_xt_build_time diff --git a/_includes/stable_xt_linux_x64_url b/src/assets/includes/stable_xt_linux_x64_url similarity index 100% rename from _includes/stable_xt_linux_x64_url rename to src/assets/includes/stable_xt_linux_x64_url diff --git a/_includes/stable_xt_macos_url b/src/assets/includes/stable_xt_macos_url similarity index 100% rename from _includes/stable_xt_macos_url rename to src/assets/includes/stable_xt_macos_url diff --git a/_includes/stable_xt_other.url b/src/assets/includes/stable_xt_other.url similarity index 100% rename from _includes/stable_xt_other.url rename to src/assets/includes/stable_xt_other.url diff --git a/_includes/stable_xt_release_url b/src/assets/includes/stable_xt_release_url similarity index 100% rename from _includes/stable_xt_release_url rename to src/assets/includes/stable_xt_release_url diff --git a/_includes/stable_xt_version b/src/assets/includes/stable_xt_version similarity index 100% rename from _includes/stable_xt_version rename to src/assets/includes/stable_xt_version diff --git a/_includes/stable_xt_win_x64_url b/src/assets/includes/stable_xt_win_x64_url similarity index 100% rename from _includes/stable_xt_win_x64_url rename to src/assets/includes/stable_xt_win_x64_url diff --git a/_includes/stable_xt_win_x64_zip_url b/src/assets/includes/stable_xt_win_x64_zip_url similarity index 100% rename from _includes/stable_xt_win_x64_zip_url rename to src/assets/includes/stable_xt_win_x64_zip_url diff --git a/_includes/stable_xt_win_x86_url b/src/assets/includes/stable_xt_win_x86_url similarity index 100% rename from _includes/stable_xt_win_x86_url rename to src/assets/includes/stable_xt_win_x86_url diff --git a/_includes/stable_xt_win_x86_zip_url b/src/assets/includes/stable_xt_win_x86_zip_url similarity index 100% rename from _includes/stable_xt_win_x86_zip_url rename to src/assets/includes/stable_xt_win_x86_zip_url diff --git a/src/components/button.astro b/src/components/button.astro new file mode 100644 index 0000000000..f7dcec0b53 --- /dev/null +++ b/src/components/button.astro @@ -0,0 +1,9 @@ +--- +const { text, url } = Astro.props; +--- + + + {text} + diff --git a/src/components/clap_logo.astro b/src/components/clap_logo.astro new file mode 100644 index 0000000000..c38101ebd2 --- /dev/null +++ b/src/components/clap_logo.astro @@ -0,0 +1,27 @@ +--- +const {} = Astro.props; +import Thumbnail from "@components/thumbnail.astro"; +--- + + + + + + diff --git a/src/components/downloads.astro b/src/components/downloads.astro new file mode 100644 index 0000000000..440fbb8a98 --- /dev/null +++ b/src/components/downloads.astro @@ -0,0 +1,37 @@ +--- +const {} = Astro.props; + +import stable_xt_win_x64_url from "@includes/stable_xt_win_x64_url?raw"; +import stable_xt_win_x86_url from "@includes/stable_xt_win_x86_url?raw"; +import stable_xt_macos_url from "@includes/stable_xt_macos_url?raw"; +import stable_xt_linux_x64_url from "@includes/stable_xt_linux_x64_url?raw"; +import stable_xt_other_url from "@includes/stable_xt_other.url?raw"; +--- + + + + Want an RPM for Linux? Want a ZIP file? Need the source code bundle? Check our other available formats! diff --git a/src/components/downloads_nightly.astro b/src/components/downloads_nightly.astro new file mode 100644 index 0000000000..511f04fbee --- /dev/null +++ b/src/components/downloads_nightly.astro @@ -0,0 +1,26 @@ +--- +const {} = Astro.props; + +import latest_xt_win_x64_url from "@includes/stable_xt_win_x64_url?raw"; +import latest_xt_macos_url from "@includes/stable_xt_macos_url?raw"; +import latest_xt_linux_x64_url from "@includes/stable_xt_linux_x64_url?raw"; +--- + + diff --git a/src/components/home/community.astro b/src/components/home/community.astro new file mode 100644 index 0000000000..7e8c338c25 --- /dev/null +++ b/src/components/home/community.astro @@ -0,0 +1,26 @@ +--- +const {} = Astro.props; +import PanelSingle from "@components/home/panel_single.astro"; +import CommunityButton from "@components/home/community_button.astro"; +--- + + +

Community

+

+ We love Surge XT. We also love people. +

+

+ Community is a big thing to us on this + project. We want an inclusive, positive, and happy community with + contributions from a large set of differing viewpoints and backgrounds. +

+

+ Let's be kind to each other and treat each other with respect. It takes + all of us working together to make the community great. +

+

We are looking forward to your insights and contributions.

+

Let's make something amazing!

+

~Surge Synth Team

+ + +
diff --git a/src/components/home/community_button.astro b/src/components/home/community_button.astro new file mode 100644 index 0000000000..4eb28c4322 --- /dev/null +++ b/src/components/home/community_button.astro @@ -0,0 +1,12 @@ +--- +const {} = Astro.props; + +import discord_invite_link from "@includes/discord_invite_link?raw"; +--- + + + diff --git a/src/components/home/content_creators.astro b/src/components/home/content_creators.astro new file mode 100644 index 0000000000..ea546803f9 --- /dev/null +++ b/src/components/home/content_creators.astro @@ -0,0 +1,47 @@ +--- +const {} = Astro.props; +import Panel from "@components/home/panel.astro"; +import PanelItem from "@components/home/panel_item.astro"; +import PanelText from "@components/home/panel_text.astro"; +import Button from "@components/button.astro"; + +import discord_invite_link from "@includes/discord_invite_link?raw"; +--- + + + +
+
+ + +

Content Creators

+

+ If you love to use Surge XT and make amazing presets or music, + we want to hear from you! +

+

+ In fact, we would love to have you pitch in and help out with + the project! +

+

+ We are looking for people that have content which showcases + Surge XT in all of its glory. +

+

+ If you make patches, write entire songs using only Surge XT or + anything in between, we would love for you to be involved! +

+ + + + diff --git a/src/components/home/footer.astro b/src/components/home/footer.astro new file mode 100644 index 0000000000..dcea314db7 --- /dev/null +++ b/src/components/home/footer.astro @@ -0,0 +1,16 @@ +--- +const {} = Astro.props; + +import PanelSingle from "@components/home/panel_single.astro"; +--- + + +
+ This project is maintained by the community at the surge-synthesizer open source project on GitHub.
+ Tweet #Surge +
+
diff --git a/src/components/home/hero.astro b/src/components/home/hero.astro new file mode 100644 index 0000000000..f6792fe6a2 --- /dev/null +++ b/src/components/home/hero.astro @@ -0,0 +1,55 @@ +--- +const {} = Astro.props; + +import Panel from "@components/home/panel.astro"; +import PanelItem from "@components/home/panel_item.astro"; +import HeroImage from "@components/home/hero_image.astro"; +import PanelText from "@components/home/panel_text.astro"; +import SurgeLogo from "@components/surge_logo.astro"; +import DownloadButton from "@components/home/download_button.astro"; + +import stable_xt_version from "@includes/stable_xt_version?raw"; +import stable_xt_build_time from "@includes/stable_xt_build_time?raw"; +--- + + + + + + A sound designer's dream. + A friendly, open community. +

+ Featuring many synthesis techniques, a great selection of + filters, a flexible modulation engine, a smorgasbord of effects, + and modern features like MPE and microtuning. +

+

+ Surge XT is a wonderful tool. We love it. We think you will, + too! +

+ + Latest Release: XT {stable_xt_version} ({ + stable_xt_build_time + }) + Downloads for other platforms and installers + Learn more about the CLAP standard + Read the manual + Surge XT ports maintained by other projects +
+
+ + + + +
diff --git a/src/components/home/hero_image.astro b/src/components/home/hero_image.astro new file mode 100644 index 0000000000..cda0ea2f69 --- /dev/null +++ b/src/components/home/hero_image.astro @@ -0,0 +1,26 @@ +--- +const {} = Astro.props; +--- + + + + diff --git a/src/components/home/osc.astro b/src/components/home/osc.astro new file mode 100644 index 0000000000..6742124696 --- /dev/null +++ b/src/components/home/osc.astro @@ -0,0 +1,64 @@ +--- +const {} = Astro.props; +import Panel from "@components/home/panel.astro"; +import PanelItem from "@components/home/panel_item.astro"; +import PanelText from "@components/home/panel_text.astro"; +--- + + + + +

One Synth Challenge,

+

❤️❤️❤️

+

Thank YOU!

+

+ We think it's pretty cool that you picked Surge for the One + Synth Challenge. And then did it again a few more times! +

+

+ Surge was in the spotlight of OSC #122, #138 and most recently, + #159. A talented group of musicians created all these tracks + using Surge as the only sound generating device. Or - in some + exceptional cases - only Surge Effects plugin was used, much to + our awe and amazement! +

+

+ Do give these tracks a listen, as we think they are a brilliant + showcase of flexibility and amazing range of sounds that Surge + offers. +

+
+
+ + + + +
diff --git a/src/components/home/panel.astro b/src/components/home/panel.astro new file mode 100644 index 0000000000..d2281d32d4 --- /dev/null +++ b/src/components/home/panel.astro @@ -0,0 +1,7 @@ +--- +const { style } = Astro.props; +--- + +
+ +
diff --git a/src/components/home/panel_item.astro b/src/components/home/panel_item.astro new file mode 100644 index 0000000000..09c946e7df --- /dev/null +++ b/src/components/home/panel_item.astro @@ -0,0 +1,7 @@ +--- +const {} = Astro.props; +--- + +
+ +
diff --git a/src/components/home/panel_single.astro b/src/components/home/panel_single.astro new file mode 100644 index 0000000000..3f89210ab1 --- /dev/null +++ b/src/components/home/panel_single.astro @@ -0,0 +1,9 @@ +--- +const { style } = Astro.props; +--- + +
+
+ +
+
diff --git a/src/components/home/panel_text.astro b/src/components/home/panel_text.astro new file mode 100644 index 0000000000..6beea5e3f0 --- /dev/null +++ b/src/components/home/panel_text.astro @@ -0,0 +1,8 @@ +--- +const {} = Astro.props; +--- + +
+ +
diff --git a/src/components/home/specs.astro b/src/components/home/specs.astro new file mode 100644 index 0000000000..2004c68706 --- /dev/null +++ b/src/components/home/specs.astro @@ -0,0 +1,241 @@ +--- +const {} = Astro.props; +import Panel from "@components/home/panel.astro"; +import PanelItem from "@components/home/panel_item.astro"; +import PanelText from "@components/home/panel_text.astro"; +--- + + + + + +
+
+ + +

Synthesis method: Subtractive hybrid

+

+ Each patch contains two scenes which are separate instances of + the entire synthesis engine (except effects) that can be used to + create layered or split patches. +

+

+ Quick category-based patch browser with textual search and + favorites. +

+

+ Runs on a variety of operating systems, plugin formats, and + architectures. +

+

Factory Sounds

+

Over 2800 patches

+

Over 700 wavetables

+
+
+
+ + + +
+
+ +

Oscillators

+

+ 3 oscillators per scene, with 12 versatile oscillator + algorithms: Classic, Modern, Wavetable, Window, Sine, FM2, FM3, + String, Twist, Alias, S&H Noise and Audio Input. +

+

+ Classic oscillator is a morphable pulse/saw/dual saw oscillator + with a sub-oscillator and hard sync. +

+

+ Modern oscillator is a mixable saw/pulse/triangle oscillator + with an optional sub-oscillator mode for triangle (which can + also change to sine or square) and hard sync. +

+

+ FM2/FM3 oscillators consist of a carrier and 2 or 3 modulators + and various options. +

+

+ String oscillator uses two filtered waveguides to emulate + plucked or bowed string sounds. +

+

+ Twist oscillator is based on a very famous Eurorack macro + oscillator, and it offers a myriad of synthesis options in a + very simple and quick way. +

+

+ Most algorithms (except FM2, FM3, Twist and Audio Input) offer + up to 16-voice unison at the oscillator level. +

+

+ Oscillator FM in 3 different configurations and ring modulation + between oscillators 1-2 and 2-3. +

+

+ Most oscillator algorithms (except FM2, FM3, Sine and Alias) are + strictly band-limited, yet still cover the entire audible + spectrum, delivering a clear, punchy and clean sound. +

+

+ Noise generator with variable spectrum (available directly in + the oscillator mixer). +

+
+
+ + +
+ + + + + +
+
+ +

Filter Block

+

+ Two filter units in 8 different configurations, with feedback + loop available in 7 of them. +

+

+ Available filter algorithms: Lowpass (12 and 24 dB/oct, each + with 3 variations), Legacy Ladder Lowpass (6-24 dB/oct), Vintage + Ladder Lowpass (2 variations, each with and without gain + compensation), Highpass (12 and 24 dB/oct, each with 3 + variations), Bandpass (12 and 24 dB/oct, each with 3 + variations), Notch (12 and 24 dB/oct, each with 2 variations), + Allpass (3 variations), Comb (positive and negative), S&H. +

+

+ Open-source additions to our filter algorithms include: K35 and + Diode Ladder filter types from Odin 2 synthesizer, 12 and 24 + dB/oct multimode filters from OB-Xd, and weird but fascinating + Cutoff Warp, Resonance Warp and Tri-Pole filters by Jatin + Chowdhury! +

+

+ Filters can self-oscillate (with excitation) and respond + amazingly fast to cutoff frequency changes. +

+

Waveshaper (43 shapes)

+
+
+
+ + + +
+
+ +

Modulation

+

+ 12 LFO units available, 6 are per voice and 6 are global for the + whole scene. +

+

DAHDSR envelope generators on every LFO.

+

+ LFO shapes consist of 7 deformable LFO waveforms, step + sequencer, a fully-fledged multi-segment envelope generator + (MSEG) with various curves and up to 128 nodes, and last but not + the least - a formula modulator which utilizes Lua scripting + language to provide completely custom modulator output. +

+

+ Voice LFOs allow envelope retriggering in step sequencer mode. +

+

+ Extremely fast and flexible modulation routing. Almost every + continuous parameter can be modulated! +

+
+
+ + +
+ + + +
+
+ +

Effects

+

+ 16 effect units arranged as 4 inserts per scene, 4 sends and 4 + master effects. +

+

27 effect algorithms:

+

Filtering:

+
    +
  • 3-band fully parametric EQ
  • +
  • 11-band graphic EQ
  • +
  • Exciter
  • +
  • Resonator
  • +
+

Distortion:

+ +

Mangling:

+
    +
  • Combulator
  • +
  • Frequency Shifter
  • +
  • Nimbus
  • +
  • Ring Modulator
  • +
  • Treemonster
  • +
  • Vocoder
  • +
+

Modulation:

+
    +
  • Chorus
  • +
  • Ensemble
  • +
  • Flanger
  • +
  • Phaser
  • +
  • Rotary Speaker
  • +
+

Time & Space:

+
    +
  • Delay
  • +
  • Reverb 1
  • +
  • Reverb 2
  • +
  • Spring Reverb
  • +
+

Multieffects:

+
    +
  • Airwindows (itself containing 56 effects!)
  • +
  • Conditioner
  • +
  • Mid-Side Tool
  • +
+
+
+ + +
diff --git a/src/components/home/system_requirements.astro b/src/components/home/system_requirements.astro new file mode 100644 index 0000000000..14dfaa0ec2 --- /dev/null +++ b/src/components/home/system_requirements.astro @@ -0,0 +1,114 @@ +--- +const {} = Astro.props; +import PanelItem from "@components/home/panel_item.astro"; +import PanelText from "@components/home/panel_text.astro"; + +import stable_xt_version from "@includes/stable_xt_version?raw"; +import stable_xt_win_x64_url from "@includes/stable_xt_win_x64_url?raw"; +import stable_xt_win_x86_url from "@includes/stable_xt_win_x86_url?raw"; +import stable_xt_macos_url from "@includes/stable_xt_macos_url?raw"; +import stable_xt_linux_x64_url from "@includes/stable_xt_linux_x64_url?raw"; +import stable_xt_release_url from "@includes/stable_xt_release_url?raw"; +import latest_xt_win_x64_url from "@includes/latest_xt_win_x64_url?raw"; +import latest_xt_macos_url from "@includes/latest_xt_macos_url?raw"; +import latest_xt_linux_x64_url from "@includes/latest_xt_linux_x64_url?raw"; +import latest_xt_build_time from "@includes/latest_xt_build_time?raw"; +--- + +
+ + +

System Requirements

+ +

Windows

+
    +
  • + Minimum: Windows 7 and Intel or AMD + processor featuring SSE2 instructions +
  • +
  • + Recommended: 64-bit Windows 7 or newer, 3 + GHz quad-core processor featuring SSE2 instructions or + better +
  • +
  • Minimum of 4 GB of RAM
  • +
  • VST3 or CLAP compatible host application
  • +
  • + x64-compatible CPU, OS and host is required to use the + 64-bit version +
  • +
+ +

macOS

+
    +
  • + Surge XT is an Intel/Apple Silicon universal binary. Intel + Mac requires macOS 10.11 or later, Apple Silicon Mac will + run Surge XT with any Apple Silicon version of macOS +
  • +
  • Minimum of 4 GB of RAM
  • +
  • VST3, AU or CLAP compatible host application
  • +
+ +

Linux

+
    +
  • PC or ARM system running a Linux distribution
  • +
  • + x64-compatible CPU, OS and host is required to use the + 64-bit version; for ARM processors you can build Surge XT + for ARM on Raspberry Pi and similar (tested with RPi4/arm64) +
  • +
  • Minimum of 4 GB of RAM
  • +
  • VST3, CLAP or LV2 compatible host application
  • +
+
+
+ + + +

Download Surge XT

+ +

Release Version {stable_xt_version}

+ + + +

Nightly Builds

+ + + + + +
(Updated on {latest_xt_build_time})
+
+
+
diff --git a/src/components/home/testers.astro b/src/components/home/testers.astro new file mode 100644 index 0000000000..bb8eea551a --- /dev/null +++ b/src/components/home/testers.astro @@ -0,0 +1,40 @@ +--- +const {} = Astro.props; +import Panel from "@components/home/panel.astro"; +import PanelItem from "@components/home/panel_item.astro"; +import PanelText from "@components/home/panel_text.astro"; +import Button from "@components/button.astro"; +--- + + + + + +
+
+ + +

Testers

+

Know any testers? Umm, asking for a friend.

+

+ Testing is a way that everyone can help contribute. All you + would need to do is install a copy of Surge XT and use it in + your own workflow. +

+

+ There are so many combinations of operating systems and DAWs + that it is really difficult to make sure everything + gets tested under all contexts. +

+

If you would like to get involved, jump in over here:

+