diff --git a/.github/assets/sponsors/sponsor-trendpop.png b/.github/assets/sponsors/sponsor-trendpop.png new file mode 100644 index 000000000..4c2cd8a1a Binary files /dev/null and b/.github/assets/sponsors/sponsor-trendpop.png differ diff --git a/CHANGELOG b/CHANGELOG index d074de987..e8a774966 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,46 @@ +mkdocs-material-9.4.12+insiders-4.45.0 (2023-11-24) + + * Added support for sorting blog categories by post count or custom function + * Improved tags plugin to generate Unicode-aware slugs by default + * Fixed non-deterministic order of multiple authors in blog plugin + +mkdocs-material-9.4.12 (2023-11-24) + + * Improved blog plugin to generate Unicode-aware slugs by default + * Fixed non-deterministic order of categories in blog plugin + +mkdocs-material-9.4.11+insiders-4.44.0 (2023-11-23) + + * Added pagination settings for archive pages in blog plugin + * Added pagination settings for category pages in blog plugin + +mkdocs-material-9.4.11 (2023-11-23) + + * Fixed #6364: Search plugin crashing when enabling theme while serving + * Fixed blog plugin crashing when disabling pagination + +mkdocs-material-9.4.10+insiders-4.43.1 (2023-11-19) + + * Added third-party theme support in projects plugin, improving editing + * Fixed #6360: Projects plugin crashes when theme is not Material for MkDocs + * Fixed #6306: Projects plugin not reloading nested project configuration + +mkdocs-material-9.4.10 (2023-11-19) + + * Fixed #6356: Version selector can't be disabled via mike's configuration + * Fixed #6281: Navigation not rendering due to Safari bug (9.4.2 regression) + * Fixed #6261: Navigation expansion animates on first load (9.4.2 regression) + +mkdocs-material-9.4.9 (2023-11-17) + + * Fixed #6344: Long entries cutoff in table of contents + * Fixed #6336: Custom template for glob archive not working with pagination + * Fixed #6328: Blog plugin crashes for locales with dashes, e.g. pt-BR + * Fixed #6327: Copy-to-clipboard button doesn't trim trailing line feed + * Fixed #6302: Version strings not matched when using mike, only aliases + * Fixed instant navigation progress indicator for gzipped content in Chrome + * Fixed rendering bug on details marker rotation in Firefox + mkdocs-material-9.4.8+insiders-4.43.0 (2023-11-05) * Added support for GitLab committers (document contributors) diff --git a/README.md b/README.md index b7ac4bb8f..30f1a5d30 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,9 @@ +

 

Bronze sponsors

diff --git a/docs/changelog/index.md b/docs/changelog/index.md index f7b4096d8..bcd362f3a 100644 --- a/docs/changelog/index.md +++ b/docs/changelog/index.md @@ -2,6 +2,32 @@ ## Material for MkDocs +### 9.4.12 November 24, 2023 { id="9.4.12" } + +- Improved blog plugin to generate Unicode-aware slugs by default +- Fixed non-deterministic order of categories in blog plugin + +### 9.4.11 November 23, 2023 { id="9.4.11" } + +- Fixed #6364: Search plugin crashing when enabling theme while serving +- Fixed blog plugin crashing when disabling pagination + +### 9.4.10 November 19, 2023 { id="9.4.10" } + +- Fixed #6356: Version selector can't be disabled via mike's configuration +- Fixed #6281: Navigation not rendering due to Safari bug (9.4.2 regression) +- Fixed #6261: Navigation expansion animates on first load (9.4.2 regression) + +### 9.4.9 November 17, 2023 { id="9.4.9" } + +- Fixed #6344: Long entries cutoff in table of contents +- Fixed #6336: Custom template for glob archive not working with pagination +- Fixed #6328: Blog plugin crashes for locales with dashes, e.g. `pt-BR` +- Fixed #6327: Copy-to-clipboard button doesn't trim trailing line feed +- Fixed #6302: Version strings not matched when using mike, only aliases +- Fixed instant navigation progress indicator for gzipped content in Chrome +- Fixed rendering bug on details marker rotation in Firefox + ### 9.4.8 November 5, 2023 { id="9.4.8" } - Fixed invalid local address replacement when using instant loading diff --git a/docs/conventions.md b/docs/conventions.md index 07bb5e9df..f7773cc5e 100644 --- a/docs/conventions.md +++ b/docs/conventions.md @@ -33,7 +33,7 @@ explicitly define them. The default value of the property is always included. #### – Default value is computed { #default data-toc-label="is computed" } -Some default values are not set to static values but computed form other values, +Some default values are not set to static values but computed from other values, like the site language, repository provider, or other settings. #### – Default value is empty { #default data-toc-label="is empty" } diff --git a/docs/creating-your-site.md b/docs/creating-your-site.md index 0b1ada2a6..1168109b0 100644 --- a/docs/creating-your-site.md +++ b/docs/creating-your-site.md @@ -66,6 +66,7 @@ theme: "yaml.customTags": [ // (1)! "!ENV scalar", "!ENV sequence", + "!relative scalar", "tag:yaml.org,2002:python/name:material.extensions.emoji.to_svg", "tag:yaml.org,2002:python/name:material.extensions.emoji.twemoji", "tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format" diff --git a/docs/enterprise-support.md b/docs/enterprise-support.md index af1f40984..bd027ffe9 100644 --- a/docs/enterprise-support.md +++ b/docs/enterprise-support.md @@ -1,5 +1,32 @@ --- -template: redirect.html -location: https://calendly.com/squidfunk/enterprise status: new --- + +# Enterprise Feedback + +We highly value the insights of our enterprise users, and we're eager to hear +from you. Your feedback is immensely valuable to us. If you're utilizing +Material for MkDocs in an enterprise context and would like to share your +experiences with us, we'd love to connect and discuss: + +- What you are building with it +- What aspects you like about it +- What challenges you are facing +- What could be improved + +## Let's Connect + +To schedule a convenient appointment, please reach out to us via email at +contact@squidfunk.com and provide us with the following details: + +- Your company's name +- How you are using Material for MkDocs +- Any specific questions or topics you'd like to address + +Once we have this information, we'll promptly get in touch with you to arrange +a 30-minute call. Please note that this call is exclusively intended for +enterprise users and is not meant for technical support. Instead, it's an +opportunity for us to engage in a casual conversation to better understand your +unique needs. + +We look forward to our discussion! diff --git a/docs/insiders/changelog/index.md b/docs/insiders/changelog/index.md index 5eab20712..32a525bf3 100644 --- a/docs/insiders/changelog/index.md +++ b/docs/insiders/changelog/index.md @@ -2,6 +2,23 @@ ## Material for MkDocs Insiders +### 4.45.0 November 24, 2023 { id="4.45.0" } + +- Added support for sorting blog categories by post count or custom function +- Improved tags plugin to generate Unicode-aware slugs by default +- Fixed non-deterministic order of multiple authors in blog plugin + +### 4.44.0 November 23, 2023 { id="4.44.0" } + +- Added pagination settings for archive pages in blog plugin +- Added pagination settings for category pages in blog plugin + +### 4.43.1 November 19, 2023 { id="4.43.1" } + +- Added third-party theme support in projects plugin, improving editing +- Fixed #6360: Projects plugin crashes when theme is not Material for MkDocs +- Fixed #6306: Projects plugin not reloading nested project configuration + ### 4.43.0 November 5, 2023 { id="4.43.0" } - Added support for GitLab committers (document contributors) diff --git a/docs/insiders/community-experts-program/index.md b/docs/insiders/community-experts-program/index.md new file mode 100644 index 000000000..52a5b34c2 --- /dev/null +++ b/docs/insiders/community-experts-program/index.md @@ -0,0 +1,148 @@ +--- +title: Community Experts Program +status: new +--- + +# Calling for Community Experts + +Interested in joining the Material for MkDocs team as a Community Expert? +We're on the lookout for individuals who are passionate about supporting our +awesome community. In return for your valuable contributions, time, and +insights, __you'll gain free access to the Insiders edition__. + +## Why we need you + +As our project and community continue to grow, so do the questions and needs of +our users on our discussion board. Our discussion board is a vital part of our +project, serving as a hub for our community to connect and a valuable knowledge +base to complement our documentation. + +We're eager to keeping it well-maintained, organized, easy to search and address +all queries which is why we need extra hands to keep up with the demand. + +That's why we're bulding a team of Community Experts! + +## Your role + +As a Community Expert, your role primarily involves active participation on +our [discussion board], where we'd expect you to be: + +- Answering discussions to help users with their questions +- Providing guidance regarding implementations +- Sharing insights into customizations and workarounds +- Optimizing searchability by adjusting discussion titles with relevant keywords + +## Your benefits + +Here is a list of the benefits we offer to our Community Experts: + +- __Free access to Material for MkDocs Insiders__ – Exclusive Access to all of + our Material for MkDocs Insiders features for _non-commercial use_.[^1] + +- __Close communication with the team__ – Stay connected with us through various + channels, including calls and internal project management tools. + +- __GitHub profile boost__ – Enhance your GitHub profile's visibility and + credibility as your activity increases, earning you valuable badges that can + enhance your credibility. + + [^1]: + Access to Insiders is granted to your primary account, i.e., the account + with which you're contributing to the project. It cannot be transferred to + another account. Additionally, it cannot be used for commercial purposes. + +## Your knowledge & skills + +To be a successful Community Expert, your skills should include the following: + +- __Material and MkDocs allrounder__ – You have an understanding of Material + for MkDocs and the MkDocs ecosystem, including many of its extensions and + plugins. + +- __Great communicator__ – You enjoy helping others in a productive, + constructive and friendly manner and use inclusive and welcoming language. + +- __Independent worker__ – You are self-motivated, stay up-to-date with + project developments, regularly check the discussion board, and respond to + notifications in reasonable time. + + [discussion board]: https://github.com/squidfunk/mkdocs-material/discussions + [documentation]: https://squidfunk.github.io/mkdocs-material/ + [contribution guides]: ../contributing/index.md + +## Your time commitment + +We don't require a fixed number of hours each week; instead, we ask for a +minimum of __five answered discussions per month[^2]__, which amounts to +slightly more than one per week. Your active interaction within the community is +highly valued. + +To do this effectively, it's best to regularly check the discussion board to see +where you can offer help. The time you invest may vary depending on the +complexity of the topics and questions. + +Upon joining, you'll receive access to the Insiders' edition for as long as you +continue to assist us. Access will be renewed every three months, allowing you +the flexibility to continue your contributions or take a break as needed. + + [^2]: + An answered discussion is a collaborative interaction where knowledge and + expertise are shared, resulting in resolutions or clarifications that benefit + the user and our entire community. In essence, it embodies the spirit of + cooperation and support within our community, highlighting the power of + collective wisdom and the willingness to assist and uplift one another. + +## Ready to get started? + +Since we have a limited number of seats for these roles[^3], we would like to +get to know you before you become one of our Community Experts. Here's how to +get started: + + [^3]: + Please note that we're currently limiting the number of seats on the + Community Experts program to three. We will update this page when we'll + expand the team, which is when we'll be accepting new applications. + +### Step 1: Get in touch + +Send us an email introducing yourself, sharing a bit about your background, and +include a link to your GitHub profile. Additionally, provide links to three +previous discussions you've answered on the discussion board, where you've +assisted another community member. + +Please use the following email template to reach out to us at +community@squidfunk.com: + +``` +Subject: Community Expert + +Intro: Tell us a bit about yourself. + - Name: + - Background: + - Profession: + - GitHub profile: + +Answered discussions + - Link 1: + - Link 2: + - Link 3: +``` + +### Step 2: Evaluation + +After receiving and reviewing your application, we will get in touch with you +to discuss everything you need to know to get started. If you get selected, we +will set you up as a collaborator and provide you immediate access to the +Insiders edition for three months. + +### Step 3: Dive in + +Let's get started! You can actively begin participating in five discussions per +month. We trust you to take the lead, and we won't do strict monitoring. Simply +ensure that you are consistently listed on the _Most Helpful_ list, located on +the discussion board's left side, under the categories. +--- + +__Ready to join us?__ + +Sounds good? Let's give it a try! diff --git a/docs/faq/sponsoring.md b/docs/insiders/faq/sponsoring.md similarity index 84% rename from docs/faq/sponsoring.md rename to docs/insiders/faq/sponsoring.md index 9f90139dd..7f23c2281 100644 --- a/docs/faq/sponsoring.md +++ b/docs/insiders/faq/sponsoring.md @@ -1,12 +1,12 @@ # Sponsoring FAQs Do you have questions about Material for MkDocs Insiders? We do our best to -answer all of your questions on this page. If you can't find your question +answer all of your questions on this page. If you can't find your question below, ask it on our [discussion board]! [discussion board]: https://github.com/squidfunk/mkdocs-material/discussions/new/chooses -## General +## General [__Why is the Insiders edition offered as a subscription model?__](#insiders-subscription){ #insiders-subscription } @@ -19,23 +19,23 @@ In order to sustain the project and add new and useful features more frequently, we decided to create the [Insiders] edition, with early access to the latest and greatest features of Material for MkDocs. The subscription-based model of the Insiders edition allows us to dedicate more time and resources to the project, -which benefits all -users of Material for MkDocs. Once our funding goals based on monthly -subscriptions are hit, the Insiders features of those^ funding goals are released -to the community edition, letting everyone benefit from them. +which benefits all +users of Material for MkDocs. Once our funding goals based on monthly +subscriptions are hit, the Insiders features of those^ funding goals are released +to the community edition, letting everyone benefit from them. -Maintaining both the community and Insiders editions is an ongoing process, and -we rely on our sponsors to support us on a monthly basis, which makes this whole +Maintaining both the community and Insiders editions is an ongoing process, and +we rely on our sponsors to support us on a monthly basis, which makes this whole project possible. [__What features are included in the Insiders edition?__](#insiders-features){ #insiders-features } -The Insiders edition includes more than 20 additional features. You can find an +The Insiders edition includes more than 20 additional features. You can find an overview of these features on our [Insiders page], which is updated when new features are added and released. - [Insiders]: ../insiders/index.md - [Insiders page]: ../insiders/index.md#whats-in-it-for-me + [Insiders]: ../index.md + [Insiders page]: ../index.md#whats-in-it-for-me [__How often is the Insiders edition updated?__](#insiders-updates){ #insiders-updates } @@ -43,7 +43,7 @@ We try to keep our open issue count low, fixing known bugs quickly. Both our repositories, the community and Insiders edition, are constantly updated with bug fixes and new features. -## Sponsorship +## Sponsorship [__Can I sponsor the project without a GitHub account?__](#sponsorship-account){ #sponsorship-account } @@ -57,11 +57,11 @@ Insiders repository in your environment once you have access. [__Which sponsoring tier should I choose?__](#sponsorship-tier){ #sponsorship-tier } -The sponsoring tiers are divided into non-commercial and commercial tiers. If +The sponsoring tiers are divided into non-commercial and commercial tiers. If you are an individual or organization using Material for MkDocs for private or -__non-commercial__ Open Source projects, you have two tiers to choose from, -depending on the number of sites you want to build. For companies using -Material for MkDocs, we offer three different __commercial__ tiers, from which +__non-commercial__ Open Source projects, you have two tiers to choose from, +depending on the number of sites you want to build. For companies using +Material for MkDocs, we offer three different __commercial__ tiers, from which you can choose depending on your requirements. Also, please read what is considered [commercial use]. @@ -108,7 +108,7 @@ No, there are no limitations on the number of sponsors for any tier. You can sponsor the project at any tier regardless of how many other sponsors are already there. -## Payment & billing +## Payment & billing [__Is there a trial period for the Insiders edition?__](#insiders-trial){ #insiders-trial } @@ -118,16 +118,16 @@ first give the Insiders edition a try, you can sponsor on the [$15] tier with a personal account for non-commercial evaluation purposes. Additionally, our subscription model allows you to cancel your sponsorship -anytime. If you decide to cancel, your sponsorship will remain active until +anytime. If you decide to cancel, your sponsorship will remain active until the end of your billing cycle. [__What payment options do you accept?__](#insiders-payment){ #insiders-payment } -We manage all our transactions and sponsorships through [GitHub Sponsors] and -[Ko-fi]. To become a sponsor of Material for MkDocs on GitHub, visit -[our sponsors' page]. On there, you can choose from five different sponsorship -tiers and pay by credit card. Please note that as of the beginning of 2023, -[GitHub no longer supports PayPal] payments. If you wish to pay with PayPal, +We manage all our transactions and sponsorships through [GitHub Sponsors] and +[Ko-fi]. To become a sponsor of Material for MkDocs on GitHub, visit +[our sponsors' page]. On there, you can choose from five different sponsorship +tiers and pay by credit card. Please note that as of the beginning of 2023, +[GitHub no longer supports PayPal] payments. If you wish to pay with PayPal, you can find a selection of our sponsorship tiers on [Ko-fi]. Both platforms provide you with a payment receipt once your purchase is successful. @@ -141,34 +141,34 @@ please don't hesitate to reach out to sponsors@squidfunk.com. [__Are discounts available for the Insiders edition, such as student discounts?__](#insiders-discounts){ #insiders-discounts } -Unfortunately, we are not able to offer any discounts for the Material for -MkDocs Insiders program. To ensure that everyone can afford the Insiders program +Unfortunately, we are not able to offer any discounts for the Material for +MkDocs Insiders program. To ensure that everyone can afford the Insiders program and keep the barrier as low as possible, we have set prices as low as [$15] a month for non-commercial use. [__Do you offer free access to Insiders for Open Source projects?__](#insiders-open-source){ #insiders-open-source } -No, we do not offer free access to our Material for MkDocs Insiders edition. -We understand that non-profit organizations may have limited budgets and may +No, we do not offer free access to our Material for MkDocs Insiders edition. +We understand that non-profit organizations may have limited budgets and may need to prioritize their spending on other projects or organizations. However, -it's important to note that Material for MkDocs is maintained by a small team, -investing a lot of time and resources into constantly improving this project. -Material for MkDocs and its core features are free to the community through our +it's important to note that Material for MkDocs is maintained by a small team, +investing a lot of time and resources into constantly improving this project. +Material for MkDocs and its core features are free to the community through our Open Source model. Therefore, Material for MkDocs itself is already free. -However, we do offer an affordable sponsorship tier starting at [$15] a month, -which is meant for individuals and non-profit organizations using Material for -MkDocs to build 1-2 sites for non-commercial purposes. This tier provides access +However, we do offer an affordable sponsorship tier starting at [$15] a month, +which is meant for individuals and non-profit organizations using Material for +MkDocs to build 1-2 sites for non-commercial purposes. This tier provides access to all new features, benefiting you from our ongoing development efforts. [__Is Insiders free for those who contribute to this project?__](#insiders-contributors){ #insiders-contributors } -Great question! We can not offer free access to "drive-by" contributors that -only fix minor issues like typos or add new languages. These contributions are -always welcome, but as we need to review them, they result in a higher time -investment from our side and don't compensate for this work. However, as this -project keeps growing, we always seek for individuals to support us. In return, -we offer financial compensation or/and Insiders access. If you are interested +Great question! We can not offer free access to "drive-by" contributors that +only fix minor issues like typos or add new languages. These contributions are +always welcome, but as we need to review them, they result in a higher time +investment from our side and don't compensate for this work. However, as this +project keeps growing, we always seek for individuals to support us. In return, +we offer financial compensation or/and Insiders access. If you are interested and have experience in the technologies and paradigms listed below, please get in touch with us at sponsors@squidfunk.com: @@ -184,12 +184,12 @@ users with access to Insiders. [__How can I set my billing to monthly or yearly?__](#insiders-billing-cycle){ #insiders-billing-cycle } -You can sponsor Material for MkDocs on a monthly or yearly basis. Depending on -your billing cycle you automatically become a monthly or yearly sponsor. Your -[billing cycle] is an account-level setting that you can easily change in your -account. If, for some reason, you cannot make this change, you can create a -dedicated bot account with a yearly billing cycle on GitHub, which you only use -for sponsoring (some sponsors already do that). If you have any problems or +You can sponsor Material for MkDocs on a monthly or yearly basis. Depending on +your billing cycle you automatically become a monthly or yearly sponsor. Your +[billing cycle] is an account-level setting that you can easily change in your +account. If, for some reason, you cannot make this change, you can create a +dedicated bot account with a yearly billing cycle on GitHub, which you only use +for sponsoring (some sponsors already do that). If you have any problems or further questions, please contact us at sponsors@squidfunk.com. [billing cycle]: https://docs.github.com/en/github/setting-up-and-managing-billing-and-payments-on-github/changing-the-duration-of-your-billing-cycle @@ -198,7 +198,7 @@ further questions, please contact us at sponsors@squidfunk.com. Right now, we can't provide you with an invoice for your sponsoring transaction, as [GitHub Sponsors] handles all transactions for us. However, both payment -platforms, [GitHub] and [Ko-Fi], automatically send you a payment receipt +platforms, [GitHub] and [Ko-Fi], automatically send you a payment receipt via mail once the sponsorship is active. Furthermore, we are working on a solution to optimize access management and more @@ -210,8 +210,8 @@ reach out as soon as we are live. [__Can I switch between different sponsoring tiers?__](#insiders-switch-tiers){ #insiders-switch-tiers } -Yes, you can switch between different sponsoring tiers at any time. Simply go -to the [GitHub Sponsors] page and change your sponsoring tier. Once you make +Yes, you can switch between different sponsoring tiers at any time. Simply go +to the [GitHub Sponsors] page and change your sponsoring tier. Once you make that change, you will immediately change to the new tier. If you change to a higher tier, the amount will be prorated according to your @@ -220,62 +220,62 @@ billing cycle. [__Can I sponsor the project for a specific feature or development goal?__](#insiders-goals){ #insiders-goals } While sponsoring specific goals directly is not possible, our sponsoring goals -are connected to specific features or development goals aligned with the -project's roadmap. You can find an [overview of these sponsoring goals] and their -associated features on our website. Insider users have early access to all -already developed features, including those associated with higher funding goals -that will be reached at a later stage. If you're interested in accessing these -features, becoming a sponsor is the way to go. If you have a feature in mind -that you would like to see on the list, we encourage you to +are connected to specific features or development goals aligned with the +project's roadmap. You can find an [overview of these sponsoring goals] and their +associated features on our website. Insider users have early access to all +already developed features, including those associated with higher funding goals +that will be reached at a later stage. If you're interested in accessing these +features, becoming a sponsor is the way to go. If you have a feature in mind +that you would like to see on the list, we encourage you to [initiate a new discussion] to evaluate it with others. - [overview of these sponsoring goals]: ../insiders/index.md#goals + [overview of these sponsoring goals]: ../index.md#goals [initiate a new discussion]: https://github.com/squidfunk/mkdocs-material/discussions/new/chooses [__What happens if I reach my sponsoring limit for my current tier?__](#insiders-limit){ #insiders-limit } -If you extend the number of sites that are in your current sponsoring limit, -please [upgrade your sponsorship] to a higher tier to continue using the +If you extend the number of sites that are in your current sponsoring limit, +please [upgrade your sponsorship] to a higher tier to continue using the Insiders version and build more sites. The change will be effective immediately. [upgrade your sponsorship]: https://docs.github.com/en/billing/managing-billing-for-github-sponsors/upgrading-a-sponsorship [__Do you offer refunds for sponsoring payments?__](#insiders-refunds){ #insiders-refunds } -Unfortunately, we cannot offer any refund for sponsorship payments. -[GitHub Sponsors] and [Ko-Fi] manage all sponsoring transactions. Because of -that, we do not have any insights into the details of the funds and cannot access -them. If you have any payment issues, please get in touch with the GitHub +Unfortunately, we cannot offer any refund for sponsorship payments. +[GitHub Sponsors] and [Ko-Fi] manage all sponsoring transactions. Because of +that, we do not have any insights into the details of the funds and cannot access +them. If you have any payment issues, please get in touch with the GitHub or Ko-Fi support team, as they can help you. -## Access management +## Access management [__How do I gain access to the private Insiders repository?__](#access-account){ #access-account } -If you sponsored with your __individual account__, you should have received an -email invitation to the private Material for MkDocs Insiders repository right -after you initiated your sponsorship. Simply accept the invitation within seven +If you sponsored with your __individual account__, you should have received an +email invitation to the private Material for MkDocs Insiders repository right +after you initiated your sponsorship. Simply accept the invitation within seven days to gain access. -If you sponsored using an __organization account__, please note we need -an individual account that we can list as a collaborator of the private Insiders -repository. After you initiate your sponsorship, please email us at -sponsors@squidfunk.com with the name of the individual or bot account. Once you -provide us with this information, we will add the account as a collaborator, and +If you sponsored using an __organization account__, please note we need +an individual account that we can list as a collaborator of the private Insiders +repository. After you initiate your sponsorship, please email us at +sponsors@squidfunk.com with the name of the individual or bot account. Once you +provide us with this information, we will add the account as a collaborator, and after you accept the invitation, you will gain access to the repository. -If you have yet to receive the email or the invitation link has expired, please +If you have yet to receive the email or the invitation link has expired, please contact us, the maintainers, at sponsors@squidfunk.com. We're working on a solution that will allow you to manage collaborator status yourself. [__Why can't our whole organization get access to Insiders?__](#access-organization){ #access-organization } -Currently, it is not possible to grant access to an organizational account, as -GitHub only allows for adding individual user accounts. We are working on a -solution ourselves to simplify access for organizations. For now, to ensure that -access is not tied to a particular individual, we recommend creating a bot -account, i.e., a GitHub account that does not belong to a specific individual -but is listed as the owner of the organizational account and using this account +Currently, it is not possible to grant access to an organizational account, as +GitHub only allows for adding individual user accounts. We are working on a +solution ourselves to simplify access for organizations. For now, to ensure that +access is not tied to a particular individual, we recommend creating a bot +account, i.e., a GitHub account that does not belong to a specific individual +but is listed as the owner of the organizational account and using this account for sponsorship. [__Do I need to fork the repository to use it?__](#access-fork){ #access-fork } @@ -289,12 +289,12 @@ your fork. [__Can I share my Insiders access with others?__](#access-share){ #access-share } -At the moment, it is not possible to directly share your collaborator status -for the private Insiders repository with other accounts. However, if you are -working with a team and would like them to access Insiders, you can share the -Insiders repository by utilizing options such as [cloning], [forking], or -[mirroring]. By doing so, you can start collaborating with your team members on -the new repository you have shared. This way, you can collectively benefit +At the moment, it is not possible to directly share your collaborator status +for the private Insiders repository with other accounts. However, if you are +working with a team and would like them to access Insiders, you can share the +Insiders repository by utilizing options such as [cloning], [forking], or +[mirroring]. By doing so, you can start collaborating with your team members on +the new repository you have shared. This way, you can collectively benefit from the Insiders features and work together on the project. [cloning]: https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository @@ -302,30 +302,30 @@ from the Insiders features and work together on the project. [mirroring]: https://docs.github.com/en/repositories/creating-and-managing-repositories/duplicating-a-repository -## Runtime & cancellation +## Runtime & cancellation [__How long is my sponsorship valid?__](#sponsorship-runtime){ #sponsorship-runtime } Your sponsorship is valid for as long as your monthly or yearly subscription -is valid. If you choose to cancel your sponsorship, you will lose access to -the Insiders edition once your cancelation is active and will be automatically -removed by GitHub as a collaborator from the private repository. +is valid. If you choose to cancel your sponsorship, you will lose access to +the Insiders edition once your cancelation is active and will be automatically +removed by GitHub as a collaborator from the private repository. [__How do I cancel my sponsorship?__](#sponsorship-cancellation){ #sponsorship-cancellation } -To cancel your sponsorship, follow the [step-by-step guide] provided by GitHub. -If you sponsored using an organizational account, please ensure that you cancel -your sponsorship using the same organizational account rather than your +To cancel your sponsorship, follow the [step-by-step guide] provided by GitHub. +If you sponsored using an organizational account, please ensure that you cancel +your sponsorship using the same organizational account rather than your individual account. [step-by-step guide]: https://docs.github.com/en/billing/managing-billing-for-github-sponsors/downgrading-a-sponsorship [__What happens when I cancel my sponsorship?__](#sponsorship-cancellation-effective){ #sponsorship-cancellation-effective } -If you choose to cancel your subscription to Insiders, you will be -automatically removed by GitHub as a collaborator on the day your cancellation is -effective. From that day on, you will no longer receive future updates. However, -you are __welcome to continue using the latest version__ that was available to +If you choose to cancel your subscription to Insiders, you will be +automatically removed by GitHub as a collaborator on the day your cancellation is +effective. From that day on, you will no longer receive future updates. However, +you are __welcome to continue using the latest version__ that was available to you at the time of your cancellation for as long as you like. Please note that [GitHub deletes private forks], so you may want to take steps to ensure @@ -333,15 +333,15 @@ that you have a backup of the software if necessary and use the locally installe [GitHub deletes private forks]: https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/removing-a-collaborator-from-a-personal-repository#deleting-forks-of-private-repositories -## Licensing +## Licensing [__What constitutes commercial use of the Insiders version?__](#commercial-use){ #commercial-use } -Commercial use refers to any use of the software for a business or for-profit -purpose. This includes any use by a corporation or other organization, whether -or not they generate revenue directly from the software. We offer different -pricing tiers for commercial use, each tailored to the needs of different -businesses. It's important to note that internal use of the software within your +Commercial use refers to any use of the software for a business or for-profit +purpose. This includes any use by a corporation or other organization, whether +or not they generate revenue directly from the software. We offer different +pricing tiers for commercial use, each tailored to the needs of different +businesses. It's important to note that internal use of the software within your organization is also considered commercial use, as with all commercial software. [__What constitutes non-commercial use of the Insiders version?__](#non-commercial-use){ #non-commercial-use } @@ -349,62 +349,62 @@ organization is also considered commercial use, as with all commercial software. Non-commercial use of our Material for MkDocs refers to private use. This includes individuals using the Insiders edition for private or purely non-commercial Open Source projects. We offer two different tiers for -non-commercial use, depending on the number of sites you want to build. +non-commercial use, depending on the number of sites you want to build. [__What is your fair use policy?__](#fair-use-policy){ #fair-use-policy } Our fair use policy includes the following guidelines: -- Please refrain from __distributing the source code__ of Insiders. While you -may use the software for public, private, or commercial projects and may -privately fork or mirror it, we ask that you keep the source code private. This -is important to our sponsorware strategy, which helps us fund ongoing +- Please refrain from __distributing the source code__ of Insiders. While you +may use the software for public, private, or commercial projects and may +privately fork or mirror it, we ask that you keep the source code private. This +is important to our sponsorware strategy, which helps us fund ongoing development and support of the software. If this guidelines is violated, everybody loses, as it will reduce the time of us maintainers we can set aside to push this project forward. -- As our sponsoring tiers are based on the number of sites you want to build, -please make sure to [upgrade your sponsorship] once your current sponsoring tier -limit has been reached. +- As our sponsoring tiers are based on the number of sites you want to build, +please make sure to [upgrade your sponsorship] once your current sponsoring tier +limit has been reached. [__Does the Insiders version have a different license?__](#insiders-license){ #insiders-license } -No. Whether you're an individual or a company, you may use Material for -MkDocs Insiders precisely under the same terms as Material for MkDocs, which are +No. Whether you're an individual or a company, you may use Material for +MkDocs Insiders precisely under the same terms as Material for MkDocs, which are given by the [MIT license]. -[MIT license]: ../license.md +[MIT license]: ../../license.md [__Can outside collaborators build and run the documentation locally without access to Insiders?__](#insiders-outside-collaborators){ #insiders-outside-collaborators } Yes. Insiders is compatible with Material for MkDocs. Almost all new features and configuration options are either backward-compatible or implemented behind -feature flags. When working with outside collaborators, changing the general -appearance of your site should be optional. Most Insiders features enhance the -overall experience, e.g., by adding icons to pages or providing a feedback -widget. While these features add value for your site's users, they should be -optional for previewing when making changes to content. Currently, the only -content-related feature in Insiders that non-Insiders users can't properly +feature flags. When working with outside collaborators, changing the general +appearance of your site should be optional. Most Insiders features enhance the +overall experience, e.g., by adding icons to pages or providing a feedback +widget. While these features add value for your site's users, they should be +optional for previewing when making changes to content. Currently, the only +content-related feature in Insiders that non-Insiders users can't properly preview are [Card grids]. -This means that outside collaborators can build the documentation locally with -Material for MkDocs, and when they push their changes, your CI pipeline will -build it with Insiders. When using built-in plugins exclusive to Insiders, it's -recommended to split configuration into a base `mkdocs.yml` and one with plugin +This means that outside collaborators can build the documentation locally with +Material for MkDocs, and when they push their changes, your CI pipeline will +build it with Insiders. When using built-in plugins exclusive to Insiders, it's +recommended to split configuration into a base `mkdocs.yml` and one with plugin overrides via [configuration inheritance]. See the [getting started guide] for more information. [configuration inheritance]: https://www.mkdocs.org/user-guide/configuration/#configuration-inheritance - [getting started guide]: ../insiders/getting-started.md#caveats - [Card grids]: ../reference/grids.md?h=grids#using-card-grids + [getting started guide]: ../getting-started.md#caveats + [Card grids]: ../../reference/grids.md?h=grids#using-card-grids -## Support +## Support [__How can I contact support if I have questions about becoming a sponsor?__ ](#support-contact){ #support-contact } -If you have any questions and would like to contact us before starting your -sponsorship, we are happy to answer all your non-technical questions about the +If you have any questions and would like to contact us before starting your +sponsorship, we are happy to answer all your non-technical questions about the Insiders program via email at sponsors@squidfunk.com. All technical questions should be asked openly on our [discussion board]. @@ -414,15 +414,15 @@ All technical questions should be asked openly on our [discussion board]. [__Is additional support available for Material for MkDocs Insiders users?__](#support-additional){ #support-additional } Yes, we provide non-technical support related to sponsoring at -sponsors@squidfunk.com. For technical questions, please submit an issue openly -on our [issue tracker] or start a discussion on our [discussion board]. Issues -and discussions from our organizational sponsors, sponsoring on +sponsors@squidfunk.com. For technical questions, please submit an issue openly +on our [issue tracker] or start a discussion on our [discussion board]. Issues +and discussions from our organizational sponsors, sponsoring on __The Organization__ tier or higher will be prioritized.[^1] [^1]: - Priority support means we will prioritize your issue, meaning we will look - into it and do our best to solve your issue asap. However, the prioritized bug - support does not mean that we can solve your issue before any others since + Priority support means we will prioritize your issue, meaning we will look + into it and do our best to solve your issue asap. However, the prioritized bug + support does not mean that we can solve your issue before any others since some issues might take more time to solve. [issue tracker]: https://github.com/squidfunk/mkdocs-material/issues @@ -433,49 +433,75 @@ If your sponsorship tier includes logo placement, and you would like us to display your logo in the [list of premium sponsors] and have it linked to your site, please contact us via mail. Simply send us a horizontal SVG or PNG version of your logo making sure it displays the name of your company and the logo to -sponsors@squidfunk.com. +sponsors@squidfunk.com. [list of premium sponsors]: https://github.com/squidfunk/mkdocs-material#user-content-premium-sponsors [__Is logo placement optional?__](#sponsorship-logo-placement-optional){ #sponsorship-logo-placement-optional } -Yes, all of our commercial benefits, such as logo placement and backlinks, are +Yes, all of our commercial benefits, such as logo placement and backlinks, are optional and can be opted in or out at any time. You can keep your sponsorship completely private. [__How can I report a bug in the Insiders version?__](#insiders-bugs){ #insiders-bugs } -If you encounter a bug in the Insiders edition, we kindly request that you -report it on our [issue tracker] in the public community repository. When -submitting the bug report, please ensure that you do not include any private -Insiders' source code, as we want to uphold our fair use policy. +If you encounter a bug in the Insiders edition, we kindly request that you +report it on our [issue tracker] in the public community repository. When +submitting the bug report, please ensure that you do not include any private +Insiders' source code, as we want to uphold our fair use policy. +[__How can I report an issue in my customizations?__](#customizations-issues){ #costumisations-issues } -## Privacy +Please note, that we do not offer support for customizations as they vary +widely and are specific to individual cases. Our support is primarily focused on +assisting with our core features. When reporting an issue, please remove all +customizations to ensure effective problem diagnosis with a minimal reproduction +[.zip file], as described in our bug reporting guide. Our [built-in info plugin], +which is essential when creating a reproduction, will not function correctly +with customizations in place. For questions and issues with customizations, +please use our [discussion board] to engage with the community. + + [.zip file]: ../../guides/creating-a-reproduction.md + [built-in info plugin]: https://squidfunk.github.io/mkdocs-material/guides/creating-a-reproduction/#creating-a-zip-file + +## Privacy [__Will you sign an NDA for sponsorships?__](#nda){ #nda } Unfortunately, we cannot sign any NDA or vendor agreement form. As a small team -working on Material for MkDocs, we have limited resources and cannot review +working on Material for MkDocs, we have limited resources and cannot review and sign agreements. +[__Will you fill out our companys forms?__](#forms){ #forms } + +To dedicate more time and resources to the development of our projects, we have +implemented measures to minimize administrative overhead for our small team. As +part of this approach, we have adopted GitHub Sponsors to efficiently handle all +transactions for us. Consequently, we have decided to introduce a setup fee for +any additional administrative tasks other than those handled by GitHub Sponsors +that require our attention and involve the completion of forms or adherence to +company processes when purchasing Material for MkDocs Insiders. If your purchase +departmenz requires additional time and effort from our team, please be aware +that the setup fee will apply. For detailed information and specific inquiries, +please reach out to us at sponsors@squidfunk.com. + [__Can I sponsor privately?__](#sponsorship-private){ #sponsorship-private } -Yes, you can. GitHub gives you the option to set your sponsorship to [private] -when you set up your sponsorship. Additionally, we have a recommended workflow -for you: We suggest you create a new GitHub bot account. This bot account should -not be tied to a particular individual and should be privately listed as an -owner of your GitHub organization. This account can then be used to sponsor -Material for MkDocs privately. As a bot account, it will automatically be listed -as a collaborator of the private Insiders repository. You can clone, fork, or -mirror using this account. All information will be kept confidential; only the -bot account and us maintainers will have insights into his sponsorship. +Yes, you can. GitHub gives you the option to set your sponsorship to [private] +when you set up your sponsorship. Additionally, we have a recommended workflow +for you: We suggest you create a new GitHub bot account. This bot account should +not be tied to a particular individual and should be privately listed as an +owner of your GitHub organization. This account can then be used to sponsor +Material for MkDocs privately. As a bot account, it will automatically be listed +as a collaborator of the private Insiders repository. You can clone, fork, or +mirror using this account. All information will be kept confidential; only the +bot account and us maintainers will have insights into his sponsorship. [private]: https://docs.github.com/en/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship#managing-the-privacy-setting-for-your-sponsorship [__Are there any geographical restrictions on becoming a sponsor?__](#sponsorship-geo){ #sponsorship-geo } -No, there are no geographical restrictions for becoming a sponsor. We welcome -sponsorships from individuals and organizations worldwide. As long as your -credit card is valid and accepted by GitHub or Ko-Fi, you are eligible to become -a sponsor and support the project, regardless of your location. +No, there are no geographical restrictions for becoming a sponsor. We welcome +sponsorships from individuals and organizations worldwide. As long as your +credit card is valid and accepted by GitHub or Ko-Fi, you are eligible to become +a sponsor and support the project, regardless of your location. diff --git a/docs/insiders/index.md b/docs/insiders/index.md index 27ed36612..3b7123fd4 100644 --- a/docs/insiders/index.md +++ b/docs/insiders/index.md @@ -88,15 +88,16 @@ a handful of them, [thanks to our awesome sponsors]! ## What's in it for me? The moment you [become a sponsor][how to become a sponsor], you'll get __immediate -access to 23 additional features__ that you can __start using now__, and +access to 24 additional features__ that you can __start using now__, and which are currently exclusively available to sponsors:
+- [x] [Blog plugin: advanced settings] :material-alert-decagram:{ .mdx-pulse title="Added on November 23, 2023" } - [x] [Projects plugin] :material-alert-decagram:{ .mdx-pulse title="Added on July 29, 2023" } - [x] [Instant prefetching] :material-alert-decagram:{ .mdx-pulse title="Added on June 15, 2023" } -- [x] [Social plugin: custom layouts] :material-alert-decagram:{ .mdx-pulse title="Added on May 8, 2023" } -- [x] [Social plugin: background images] :material-alert-decagram:{ .mdx-pulse title="Added on May 8, 2023" } +- [x] [Social plugin: custom layouts] +- [x] [Social plugin: background images] - [x] [Code range selection] - [x] [Code annotations: custom selectors] - [x] [Privacy plugin: optimization support] @@ -166,6 +167,7 @@ You can cancel your sponsorship anytime.[^5] **Silver sponsors**: [![FastAPI]{ style="height: 120px" }](https://fastapi.tiangolo.com/){ target=_blank title="FastAPI" } +[![Trendpop]{ style="height: 120px" }](https://www.trendpop.com/){ target=_blank title="Trendpop" } **Bronze sponsors**: @@ -206,6 +208,7 @@ You can cancel your sponsorship anytime.[^5]
[FastAPI]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/sponsor-fastapi.png + [Trendpop]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/sponsor-trendpop.png [Cirrus CI]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/sponsor-cirrus-ci.png [Basler]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/sponsor-basler.png [KX]: https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/.github/assets/sponsors/sponsor-kx.png @@ -322,13 +325,14 @@ are released for general availability. - [x] [Social plugin: background images] - [x] [Code range selection] - [x] [Code annotations: custom selectors] -- [ ] Code line wrap button +- [x] [Blog plugin: advanced settings] [Projects plugin]: ../plugins/projects.md [Social plugin: custom layouts]: ../setup/setting-up-social-cards.md#customization [Social plugin: background images]: ../setup/setting-up-social-cards.md#+social.cards_layout_params.background_image [Code range selection]: ../reference/code-blocks.md#code-selection-button [Code annotations: custom selectors]: ../reference/code-blocks.md#custom-selectors + [Blog plugin: advanced settings]: ../setup/setting-up-a-blog.md#advanced-settings ### Goals completed diff --git a/docs/plugins/blog.md b/docs/plugins/blog.md index 6eac717d7..488770799 100644 --- a/docs/plugins/blog.md +++ b/docs/plugins/blog.md @@ -406,35 +406,24 @@ If more than one category is given, they are joined with `/` after slugifying. #### - + -Use this setting to change the function to use for generating URL-compatible -slugs from post titles. [Python Markdown Extensions] comes with a Unicode-aware -[`slugify`][pymdownx.slugs.slugify] function: +Use this setting to change the function for generating URL-compatible slugs +from post titles. By default, the [`slugify`][pymdownx.slugs.slugify] function +from [Python Markdown Extensions] is used as follows: -=== "Unicode" +``` yaml +plugins: + - blog: + post_slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower +``` - ``` yaml - plugins: - - blog: - post_slugify: !!python/object/apply:pymdownx.slugs.slugify - kwds: - case: lower - ``` +The default configuration is Unicode-aware and should produce good slugs for all +languages. Of course, you can also provide a custom slugification function for +more granular control. -=== "Unicode, case-sensitive" - - ``` yaml - plugins: - - blog: - post_slugify: !!python/object/apply:pymdownx.slugs.slugify - ``` - -When your project features non-European languages, it's advisable to use this -configuration. Of course, you can also provide a custom slugification function -for more granular control. - - [toc.slugify]: https://github.com/Python-Markdown/markdown/blob/1337d0891757e192165668d2606db36cf08e65a9/markdown/extensions/toc.py#L26-L33 [pymdownx.slugs.slugify]: https://github.com/facelessuser/pymdown-extensions/blob/01c91ce79c91304c22b4e3d7a9261accc931d707/pymdownx/slugs.py#L59-L65 [Python Markdown Extensions]: https://facelessuser.github.io/pymdown-extensions/extras/slugs/ @@ -731,6 +720,42 @@ The following placeholders are available: --- +#### + + + + + +Use this setting to enable or disable pagination for archive pages. The value +of this setting is inherited from [`pagination`][config.pagination], unless it's +explicitly set. To disable pagination, use: + +``` yaml +plugins: + - blog: + archive_pagination: false +``` + +--- + +#### + + + + + +Use this setting to change the number of posts rendered per archive page. The +value of this setting is inherited from [`pagination_per_page`] +[config.pagination_per_page], unless it's explicitly set: + +``` yaml +plugins: + - blog: + archive_pagination_per_page: 5 +``` + +--- + #### @@ -738,7 +763,7 @@ The following placeholders are available: Use this setting to leverage the table of contents to display post titles on all archive pages. The value of this setting is inherited from [`blog_toc`] -[config.blog_toc], unless its explicitly set: +[config.blog_toc], unless it's explicitly set: ``` yaml plugins: @@ -820,31 +845,23 @@ The following placeholders are available: #### - + -Use this setting to change the function to use for generating URL-compatible -slugs from categories. [Python Markdown Extensions] comes with a Unicode-aware -[`slugify`][pymdownx.slugs.slugify] function: +Use this setting to change the function for generating URL-compatible slugs +from categories. By default, the [`slugify`][pymdownx.slugs.slugify] function +from [Python Markdown Extensions] is used as follows: -=== "Unicode" +``` yaml +plugins: + - blog: + post_slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower +``` - ``` yaml - plugins: - - blog: - categories_slugify: !!python/object/apply:pymdownx.slugs.slugify - kwds: - case: lower - ``` - -=== "Unicode, case-sensitive" - - ``` yaml - plugins: - - blog: - categories_slugify: !!python/object/apply:pymdownx.slugs.slugify - ``` -When your project features non-European languages, it's advisable to use this -configuration. +The default configuration is Unicode-aware and should produce good slugs for all +languages. Of course, you can also provide a custom slugification function for +more granular control. --- @@ -865,6 +882,46 @@ plugins: --- +#### + + + + + +Use this setting to specify a custom function for sorting categories. For +example, if you want to sort categories by the number of posts they contain, +use the following configuration: + +``` yaml +plugins: + - blog: + categories_sort_by: !!python/name:material.plugins.blog.view_post_count +``` + +Don't forget to enable [`categories_sort_reverse`][config.categories_sort_reverse]. +You can define your own comparison function, which must return something +that can be compared while sorting, i.e., a string or number. + +--- + +#### + + + + + +Use this setting to reverse the order in which categories are sorted. By +default, categories are sorted in ascending order, but you can reverse ordering +as follows: + +``` yaml +plugins: + - blog: + categories_sort_reverse: true +``` + +--- + #### @@ -888,6 +945,42 @@ this list. Posts can be assigned to categories by using the [`categories`] --- +#### + + + + + +Use this setting to enable or disable pagination for category pages. The value +of this setting is inherited from [`pagination`][config.pagination], unless it's +explicitly set. To disable pagination, use: + +``` yaml +plugins: + - blog: + categories_pagination: false +``` + +--- + +#### + + + + + +Use this setting to change the number of posts rendered per category page. The +value of this setting is inherited from [`pagination_per_page`] +[config.pagination_per_page], unless it's explicitly set: + +``` yaml +plugins: + - blog: + categories_pagination_per_page: 5 +``` + +--- + #### @@ -895,7 +988,7 @@ this list. Posts can be assigned to categories by using the [`categories`] Use this setting to leverage the table of contents to display post titles on all category pages. The value of this setting is inherited from [`blog_toc`] -[config.blog_toc], unless its explicitly set: +[config.blog_toc], unless it's explicitly set: ``` yaml plugins: diff --git a/docs/plugins/meta.md b/docs/plugins/meta.md index 3c4f72669..5ab849602 100644 --- a/docs/plugins/meta.md +++ b/docs/plugins/meta.md @@ -10,6 +10,13 @@ pages in a folder, i.e., a subsection of your project, which is particularly useful to ensure that a certain subset of pages features specific tags, uses a custom template, or is attributed to an author. +--- + + __Sponsors only__ – this plugin is currently reserved to +[our awesome sponsors]. + + [our awesome sponsors]: ../insiders/index.md + ## Objective ### How it works diff --git a/docs/plugins/optimize.md b/docs/plugins/optimize.md index a30f7fb39..231c31eda 100644 --- a/docs/plugins/optimize.md +++ b/docs/plugins/optimize.md @@ -10,7 +10,13 @@ The optimize plugin automatically identifies and optimizes all media files when As a result, your site loads significantly faster and yields better rankings in search engines. +--- + + __Sponsors only__ – this plugin is currently reserved to +[our awesome sponsors]. + [building your project]: ../creating-your-site.md#building-your-site + [our awesome sponsors]: ../insiders/index.md ## Objective diff --git a/docs/plugins/privacy.md b/docs/plugins/privacy.md index d4141ac25..d58d29238 100644 --- a/docs/plugins/privacy.md +++ b/docs/plugins/privacy.md @@ -11,6 +11,13 @@ external assets. With just a single line of configuration, the plugin can automatically identify and download external assets, making GDPR compliance as effortless as it can possibly be. +--- + + __Sponsors only__ – this plugin is currently reserved to +[our awesome sponsors]. + + [our awesome sponsors]: ../insiders/index.md + ## Objective ### How it works diff --git a/docs/plugins/projects.md b/docs/plugins/projects.md index e989e7d7d..d1d22e737 100644 --- a/docs/plugins/projects.md +++ b/docs/plugins/projects.md @@ -10,6 +10,13 @@ distinct projects, build them concurrently and preview them together as one. This is particularly useful when creating a multi-language project, but can also be used to split very large projects into smaller parts. +--- + + __Sponsors only__ – this plugin is currently reserved to +[our awesome sponsors]. + + [our awesome sponsors]: ../insiders/index.md + ## Objective ### How it works diff --git a/docs/plugins/tags.md b/docs/plugins/tags.md index 176918d7a..24a73ff54 100644 --- a/docs/plugins/tags.md +++ b/docs/plugins/tags.md @@ -176,35 +176,24 @@ The provided path is resolved from the [`docs` directory][mkdocs.docs_dir]. - + -Use this setting to change the function to use for generating URL-compatible -slugs from tags. [Python Markdown Extensions] comes with a Unicode-aware -[`slugify`][pymdownx.slugs.slugify] function: +Use this setting to change the function for generating URL-compatible slugs +from post titles. By default, the [`slugify`][pymdownx.slugs.slugify] function +from [Python Markdown Extensions] is used as follows: -=== "Unicode" +``` yaml +plugins: + - blog: + post_slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower +``` - ``` yaml - plugins: - - tags: - tags_slugify: !!python/object/apply:pymdownx.slugs.slugify - kwds: - case: lower - ``` +The default configuration is Unicode-aware and should produce good slugs for all +languages. Of course, you can also provide a custom slugification function for +more granular control. -=== "Unicode, case-sensitive" - - ``` yaml - plugins: - - tags: - tags_slugify: !!python/object/apply:pymdownx.slugs.slugify - ``` - -When your project features non-European languages, it's advisable to use this -configuration. Of course, you can also provide a custom slugification function -for more granular control. - - [toc.slugify]: https://github.com/Python-Markdown/markdown/blob/1337d0891757e192165668d2606db36cf08e65a9/markdown/extensions/toc.py#L26-L33 [pymdownx.slugs.slugify]: https://github.com/facelessuser/pymdown-extensions/blob/01c91ce79c91304c22b4e3d7a9261accc931d707/pymdownx/slugs.py#L59-L65 [Python Markdown Extensions]: https://facelessuser.github.io/pymdown-extensions/extras/slugs/ diff --git a/docs/plugins/typeset.md b/docs/plugins/typeset.md index 16528d10d..3216ca669 100644 --- a/docs/plugins/typeset.md +++ b/docs/plugins/typeset.md @@ -10,6 +10,13 @@ headlines within the navigation and table of contents. This means that code blocks, icons, emojis and any other inline formatting can be rendered exactly as defined in the page's content. +--- + + __Sponsors only__ – this plugin is currently reserved to +[our awesome sponsors]. + + [our awesome sponsors]: ../insiders/index.md + ## Objective ### How it works diff --git a/docs/publishing-your-site.md b/docs/publishing-your-site.md index 37a50346d..cd9a2e5a1 100644 --- a/docs/publishing-your-site.md +++ b/docs/publishing-your-site.md @@ -35,6 +35,10 @@ contents: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com - uses: actions/setup-python@v4 with: python-version: 3.x @@ -90,6 +94,10 @@ contents: if: github.event.repository.fork == false steps: - uses: actions/checkout@v4 + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com - uses: actions/setup-python@v4 with: python-version: 3.x diff --git a/docs/schema/assets/fonts.json b/docs/schema/assets/fonts.json index 2c6dd052c..b08ca37d5 100644 --- a/docs/schema/assets/fonts.json +++ b/docs/schema/assets/fonts.json @@ -7,11069 +7,7907 @@ { "title": "ABeeZee", "markdownDescription": "https://fonts.google.com/specimen/ABeeZee", - "enum": [ - "ABeeZee" - ] + "const": "ABeeZee" }, { "title": "ADLaM Display", "markdownDescription": "https://fonts.google.com/specimen/ADLaM+Display", - "enum": [ - "ADLaM Display" - ] + "const": "ADLaM Display" }, { "title": "AR One Sans", "markdownDescription": "https://fonts.google.com/specimen/AR+One+Sans", - "enum": [ - "AR One Sans" - ] + "const": "AR One Sans" }, { "title": "Abel", "markdownDescription": "https://fonts.google.com/specimen/Abel", - "enum": [ - "Abel" - ] + "const": "Abel" }, { "title": "Abhaya Libre", "markdownDescription": "https://fonts.google.com/specimen/Abhaya+Libre", - "enum": [ - "Abhaya Libre" - ] + "const": "Abhaya Libre" }, { "title": "Aboreto", "markdownDescription": "https://fonts.google.com/specimen/Aboreto", - "enum": [ - "Aboreto" - ] + "const": "Aboreto" }, { "title": "Abril Fatface", "markdownDescription": "https://fonts.google.com/specimen/Abril+Fatface", - "enum": [ - "Abril Fatface" - ] + "const": "Abril Fatface" }, { "title": "Abyssinica SIL", "markdownDescription": "https://fonts.google.com/specimen/Abyssinica+SIL", - "enum": [ - "Abyssinica SIL" - ] + "const": "Abyssinica SIL" }, { "title": "Aclonica", "markdownDescription": "https://fonts.google.com/specimen/Aclonica", - "enum": [ - "Aclonica" - ] + "const": "Aclonica" }, { "title": "Acme", "markdownDescription": "https://fonts.google.com/specimen/Acme", - "enum": [ - "Acme" - ] + "const": "Acme" }, { "title": "Actor", "markdownDescription": "https://fonts.google.com/specimen/Actor", - "enum": [ - "Actor" - ] + "const": "Actor" }, { "title": "Adamina", "markdownDescription": "https://fonts.google.com/specimen/Adamina", - "enum": [ - "Adamina" - ] + "const": "Adamina" }, { "title": "Advent Pro", "markdownDescription": "https://fonts.google.com/specimen/Advent+Pro", - "enum": [ - "Advent Pro" - ] + "const": "Advent Pro" }, { "title": "Agdasima", "markdownDescription": "https://fonts.google.com/specimen/Agdasima", - "enum": [ - "Agdasima" - ] + "const": "Agdasima" }, { "title": "Aguafina Script", "markdownDescription": "https://fonts.google.com/specimen/Aguafina+Script", - "enum": [ - "Aguafina Script" - ] + "const": "Aguafina Script" }, { "title": "Akatab", "markdownDescription": "https://fonts.google.com/specimen/Akatab", - "enum": [ - "Akatab" - ] + "const": "Akatab" }, { "title": "Akaya Kanadaka", "markdownDescription": "https://fonts.google.com/specimen/Akaya+Kanadaka", - "enum": [ - "Akaya Kanadaka" - ] + "const": "Akaya Kanadaka" }, { "title": "Akaya Telivigala", "markdownDescription": "https://fonts.google.com/specimen/Akaya+Telivigala", - "enum": [ - "Akaya Telivigala" - ] + "const": "Akaya Telivigala" }, { "title": "Akronim", "markdownDescription": "https://fonts.google.com/specimen/Akronim", - "enum": [ - "Akronim" - ] + "const": "Akronim" }, { "title": "Akshar", "markdownDescription": "https://fonts.google.com/specimen/Akshar", - "enum": [ - "Akshar" - ] + "const": "Akshar" }, { "title": "Aladin", "markdownDescription": "https://fonts.google.com/specimen/Aladin", - "enum": [ - "Aladin" - ] + "const": "Aladin" }, { "title": "Alata", "markdownDescription": "https://fonts.google.com/specimen/Alata", - "enum": [ - "Alata" - ] + "const": "Alata" }, { "title": "Alatsi", "markdownDescription": "https://fonts.google.com/specimen/Alatsi", - "enum": [ - "Alatsi" - ] + "const": "Alatsi" }, { "title": "Albert Sans", "markdownDescription": "https://fonts.google.com/specimen/Albert+Sans", - "enum": [ - "Albert Sans" - ] + "const": "Albert Sans" }, { "title": "Aldrich", "markdownDescription": "https://fonts.google.com/specimen/Aldrich", - "enum": [ - "Aldrich" - ] + "const": "Aldrich" }, { "title": "Alef", "markdownDescription": "https://fonts.google.com/specimen/Alef", - "enum": [ - "Alef" - ] + "const": "Alef" }, { "title": "Alegreya", "markdownDescription": "https://fonts.google.com/specimen/Alegreya", - "enum": [ - "Alegreya" - ] + "const": "Alegreya" }, { "title": "Alegreya SC", "markdownDescription": "https://fonts.google.com/specimen/Alegreya+SC", - "enum": [ - "Alegreya SC" - ] + "const": "Alegreya SC" }, { "title": "Alegreya Sans", "markdownDescription": "https://fonts.google.com/specimen/Alegreya+Sans", - "enum": [ - "Alegreya Sans" - ] + "const": "Alegreya Sans" }, { "title": "Alegreya Sans SC", "markdownDescription": "https://fonts.google.com/specimen/Alegreya+Sans+SC", - "enum": [ - "Alegreya Sans SC" - ] + "const": "Alegreya Sans SC" }, { "title": "Aleo", "markdownDescription": "https://fonts.google.com/specimen/Aleo", - "enum": [ - "Aleo" - ] + "const": "Aleo" }, { "title": "Alex Brush", "markdownDescription": "https://fonts.google.com/specimen/Alex+Brush", - "enum": [ - "Alex Brush" - ] + "const": "Alex Brush" }, { "title": "Alexandria", "markdownDescription": "https://fonts.google.com/specimen/Alexandria", - "enum": [ - "Alexandria" - ] + "const": "Alexandria" }, { "title": "Alfa Slab One", "markdownDescription": "https://fonts.google.com/specimen/Alfa+Slab+One", - "enum": [ - "Alfa Slab One" - ] + "const": "Alfa Slab One" }, { "title": "Alice", "markdownDescription": "https://fonts.google.com/specimen/Alice", - "enum": [ - "Alice" - ] + "const": "Alice" }, { "title": "Alike", "markdownDescription": "https://fonts.google.com/specimen/Alike", - "enum": [ - "Alike" - ] + "const": "Alike" }, { "title": "Alike Angular", "markdownDescription": "https://fonts.google.com/specimen/Alike+Angular", - "enum": [ - "Alike Angular" - ] + "const": "Alike Angular" }, { "title": "Alkalami", "markdownDescription": "https://fonts.google.com/specimen/Alkalami", - "enum": [ - "Alkalami" - ] + "const": "Alkalami" }, { "title": "Alkatra", "markdownDescription": "https://fonts.google.com/specimen/Alkatra", - "enum": [ - "Alkatra" - ] + "const": "Alkatra" }, { "title": "Allan", "markdownDescription": "https://fonts.google.com/specimen/Allan", - "enum": [ - "Allan" - ] + "const": "Allan" }, { "title": "Allerta", "markdownDescription": "https://fonts.google.com/specimen/Allerta", - "enum": [ - "Allerta" - ] + "const": "Allerta" }, { "title": "Allerta Stencil", "markdownDescription": "https://fonts.google.com/specimen/Allerta+Stencil", - "enum": [ - "Allerta Stencil" - ] + "const": "Allerta Stencil" }, { "title": "Allison", "markdownDescription": "https://fonts.google.com/specimen/Allison", - "enum": [ - "Allison" - ] + "const": "Allison" }, { "title": "Allura", "markdownDescription": "https://fonts.google.com/specimen/Allura", - "enum": [ - "Allura" - ] + "const": "Allura" }, { "title": "Almarai", "markdownDescription": "https://fonts.google.com/specimen/Almarai", - "enum": [ - "Almarai" - ] + "const": "Almarai" }, { "title": "Almendra", "markdownDescription": "https://fonts.google.com/specimen/Almendra", - "enum": [ - "Almendra" - ] + "const": "Almendra" }, { "title": "Almendra Display", "markdownDescription": "https://fonts.google.com/specimen/Almendra+Display", - "enum": [ - "Almendra Display" - ] + "const": "Almendra Display" }, { "title": "Almendra SC", "markdownDescription": "https://fonts.google.com/specimen/Almendra+SC", - "enum": [ - "Almendra SC" - ] + "const": "Almendra SC" }, { "title": "Alumni Sans", "markdownDescription": "https://fonts.google.com/specimen/Alumni+Sans", - "enum": [ - "Alumni Sans" - ] + "const": "Alumni Sans" }, { "title": "Alumni Sans Collegiate One", "markdownDescription": "https://fonts.google.com/specimen/Alumni+Sans+Collegiate+One", - "enum": [ - "Alumni Sans Collegiate One" - ] + "const": "Alumni Sans Collegiate One" }, { "title": "Alumni Sans Inline One", "markdownDescription": "https://fonts.google.com/specimen/Alumni+Sans+Inline+One", - "enum": [ - "Alumni Sans Inline One" - ] + "const": "Alumni Sans Inline One" }, { "title": "Alumni Sans Pinstripe", "markdownDescription": "https://fonts.google.com/specimen/Alumni+Sans+Pinstripe", - "enum": [ - "Alumni Sans Pinstripe" - ] + "const": "Alumni Sans Pinstripe" }, { "title": "Amarante", "markdownDescription": "https://fonts.google.com/specimen/Amarante", - "enum": [ - "Amarante" - ] + "const": "Amarante" }, { "title": "Amaranth", "markdownDescription": "https://fonts.google.com/specimen/Amaranth", - "enum": [ - "Amaranth" - ] + "const": "Amaranth" }, { "title": "Amatic SC", "markdownDescription": "https://fonts.google.com/specimen/Amatic+SC", - "enum": [ - "Amatic SC" - ] + "const": "Amatic SC" }, { "title": "Amethysta", "markdownDescription": "https://fonts.google.com/specimen/Amethysta", - "enum": [ - "Amethysta" - ] + "const": "Amethysta" }, { "title": "Amiko", "markdownDescription": "https://fonts.google.com/specimen/Amiko", - "enum": [ - "Amiko" - ] + "const": "Amiko" }, { "title": "Amiri", "markdownDescription": "https://fonts.google.com/specimen/Amiri", - "enum": [ - "Amiri" - ] + "const": "Amiri" }, { "title": "Amiri Quran", "markdownDescription": "https://fonts.google.com/specimen/Amiri+Quran", - "enum": [ - "Amiri Quran" - ] + "const": "Amiri Quran" }, { "title": "Amita", "markdownDescription": "https://fonts.google.com/specimen/Amita", - "enum": [ - "Amita" - ] + "const": "Amita" }, { "title": "Anaheim", "markdownDescription": "https://fonts.google.com/specimen/Anaheim", - "enum": [ - "Anaheim" - ] + "const": "Anaheim" }, { "title": "Andada Pro", "markdownDescription": "https://fonts.google.com/specimen/Andada+Pro", - "enum": [ - "Andada Pro" - ] + "const": "Andada Pro" }, { "title": "Andika", "markdownDescription": "https://fonts.google.com/specimen/Andika", - "enum": [ - "Andika" - ] + "const": "Andika" }, { "title": "Anek Bangla", "markdownDescription": "https://fonts.google.com/specimen/Anek+Bangla", - "enum": [ - "Anek Bangla" - ] + "const": "Anek Bangla" }, { "title": "Anek Devanagari", "markdownDescription": "https://fonts.google.com/specimen/Anek+Devanagari", - "enum": [ - "Anek Devanagari" - ] + "const": "Anek Devanagari" }, { "title": "Anek Gujarati", "markdownDescription": "https://fonts.google.com/specimen/Anek+Gujarati", - "enum": [ - "Anek Gujarati" - ] + "const": "Anek Gujarati" }, { "title": "Anek Gurmukhi", "markdownDescription": "https://fonts.google.com/specimen/Anek+Gurmukhi", - "enum": [ - "Anek Gurmukhi" - ] + "const": "Anek Gurmukhi" }, { "title": "Anek Kannada", "markdownDescription": "https://fonts.google.com/specimen/Anek+Kannada", - "enum": [ - "Anek Kannada" - ] + "const": "Anek Kannada" }, { "title": "Anek Latin", "markdownDescription": "https://fonts.google.com/specimen/Anek+Latin", - "enum": [ - "Anek Latin" - ] + "const": "Anek Latin" }, { "title": "Anek Malayalam", "markdownDescription": "https://fonts.google.com/specimen/Anek+Malayalam", - "enum": [ - "Anek Malayalam" - ] + "const": "Anek Malayalam" }, { "title": "Anek Odia", "markdownDescription": "https://fonts.google.com/specimen/Anek+Odia", - "enum": [ - "Anek Odia" - ] + "const": "Anek Odia" }, { "title": "Anek Tamil", "markdownDescription": "https://fonts.google.com/specimen/Anek+Tamil", - "enum": [ - "Anek Tamil" - ] + "const": "Anek Tamil" }, { "title": "Anek Telugu", "markdownDescription": "https://fonts.google.com/specimen/Anek+Telugu", - "enum": [ - "Anek Telugu" - ] + "const": "Anek Telugu" }, { "title": "Angkor", "markdownDescription": "https://fonts.google.com/specimen/Angkor", - "enum": [ - "Angkor" - ] + "const": "Angkor" }, { "title": "Annie Use Your Telescope", "markdownDescription": "https://fonts.google.com/specimen/Annie+Use+Your+Telescope", - "enum": [ - "Annie Use Your Telescope" - ] + "const": "Annie Use Your Telescope" }, { "title": "Anonymous Pro", "markdownDescription": "https://fonts.google.com/specimen/Anonymous+Pro", - "enum": [ - "Anonymous Pro" - ] + "const": "Anonymous Pro" }, { "title": "Antic", "markdownDescription": "https://fonts.google.com/specimen/Antic", - "enum": [ - "Antic" - ] + "const": "Antic" }, { "title": "Antic Didone", "markdownDescription": "https://fonts.google.com/specimen/Antic+Didone", - "enum": [ - "Antic Didone" - ] + "const": "Antic Didone" }, { "title": "Antic Slab", "markdownDescription": "https://fonts.google.com/specimen/Antic+Slab", - "enum": [ - "Antic Slab" - ] + "const": "Antic Slab" }, { "title": "Anton", "markdownDescription": "https://fonts.google.com/specimen/Anton", - "enum": [ - "Anton" - ] + "const": "Anton" }, { "title": "Antonio", "markdownDescription": "https://fonts.google.com/specimen/Antonio", - "enum": [ - "Antonio" - ] + "const": "Antonio" }, { "title": "Anuphan", "markdownDescription": "https://fonts.google.com/specimen/Anuphan", - "enum": [ - "Anuphan" - ] + "const": "Anuphan" }, { "title": "Anybody", "markdownDescription": "https://fonts.google.com/specimen/Anybody", - "enum": [ - "Anybody" - ] + "const": "Anybody" }, { "title": "Aoboshi One", "markdownDescription": "https://fonts.google.com/specimen/Aoboshi+One", - "enum": [ - "Aoboshi One" - ] + "const": "Aoboshi One" }, { "title": "Arapey", "markdownDescription": "https://fonts.google.com/specimen/Arapey", - "enum": [ - "Arapey" - ] + "const": "Arapey" }, { "title": "Arbutus", "markdownDescription": "https://fonts.google.com/specimen/Arbutus", - "enum": [ - "Arbutus" - ] + "const": "Arbutus" }, { "title": "Arbutus Slab", "markdownDescription": "https://fonts.google.com/specimen/Arbutus+Slab", - "enum": [ - "Arbutus Slab" - ] + "const": "Arbutus Slab" }, { "title": "Architects Daughter", "markdownDescription": "https://fonts.google.com/specimen/Architects+Daughter", - "enum": [ - "Architects Daughter" - ] + "const": "Architects Daughter" }, { "title": "Archivo", "markdownDescription": "https://fonts.google.com/specimen/Archivo", - "enum": [ - "Archivo" - ] + "const": "Archivo" }, { "title": "Archivo Black", "markdownDescription": "https://fonts.google.com/specimen/Archivo+Black", - "enum": [ - "Archivo Black" - ] + "const": "Archivo Black" }, { "title": "Archivo Narrow", "markdownDescription": "https://fonts.google.com/specimen/Archivo+Narrow", - "enum": [ - "Archivo Narrow" - ] + "const": "Archivo Narrow" }, { "title": "Are You Serious", "markdownDescription": "https://fonts.google.com/specimen/Are+You+Serious", - "enum": [ - "Are You Serious" - ] + "const": "Are You Serious" }, { "title": "Aref Ruqaa", "markdownDescription": "https://fonts.google.com/specimen/Aref+Ruqaa", - "enum": [ - "Aref Ruqaa" - ] + "const": "Aref Ruqaa" }, { "title": "Aref Ruqaa Ink", "markdownDescription": "https://fonts.google.com/specimen/Aref+Ruqaa+Ink", - "enum": [ - "Aref Ruqaa Ink" - ] + "const": "Aref Ruqaa Ink" }, { "title": "Arima", "markdownDescription": "https://fonts.google.com/specimen/Arima", - "enum": [ - "Arima" - ] + "const": "Arima" }, { "title": "Arima Madurai", "markdownDescription": "https://fonts.google.com/specimen/Arima+Madurai", - "enum": [ - "Arima Madurai" - ] + "const": "Arima Madurai" }, { "title": "Arimo", "markdownDescription": "https://fonts.google.com/specimen/Arimo", - "enum": [ - "Arimo" - ] + "const": "Arimo" }, { "title": "Arizonia", "markdownDescription": "https://fonts.google.com/specimen/Arizonia", - "enum": [ - "Arizonia" - ] + "const": "Arizonia" }, { "title": "Armata", "markdownDescription": "https://fonts.google.com/specimen/Armata", - "enum": [ - "Armata" - ] + "const": "Armata" }, { "title": "Arsenal", "markdownDescription": "https://fonts.google.com/specimen/Arsenal", - "enum": [ - "Arsenal" - ] + "const": "Arsenal" }, { "title": "Artifika", "markdownDescription": "https://fonts.google.com/specimen/Artifika", - "enum": [ - "Artifika" - ] + "const": "Artifika" }, { "title": "Arvo", "markdownDescription": "https://fonts.google.com/specimen/Arvo", - "enum": [ - "Arvo" - ] + "const": "Arvo" }, { "title": "Arya", "markdownDescription": "https://fonts.google.com/specimen/Arya", - "enum": [ - "Arya" - ] + "const": "Arya" }, { "title": "Asap", "markdownDescription": "https://fonts.google.com/specimen/Asap", - "enum": [ - "Asap" - ] + "const": "Asap" }, { "title": "Asap Condensed", "markdownDescription": "https://fonts.google.com/specimen/Asap+Condensed", - "enum": [ - "Asap Condensed" - ] + "const": "Asap Condensed" }, { "title": "Asar", "markdownDescription": "https://fonts.google.com/specimen/Asar", - "enum": [ - "Asar" - ] + "const": "Asar" }, { "title": "Asset", "markdownDescription": "https://fonts.google.com/specimen/Asset", - "enum": [ - "Asset" - ] + "const": "Asset" }, { "title": "Assistant", "markdownDescription": "https://fonts.google.com/specimen/Assistant", - "enum": [ - "Assistant" - ] + "const": "Assistant" }, { "title": "Astloch", "markdownDescription": "https://fonts.google.com/specimen/Astloch", - "enum": [ - "Astloch" - ] + "const": "Astloch" }, { "title": "Asul", "markdownDescription": "https://fonts.google.com/specimen/Asul", - "enum": [ - "Asul" - ] + "const": "Asul" }, { "title": "Athiti", "markdownDescription": "https://fonts.google.com/specimen/Athiti", - "enum": [ - "Athiti" - ] + "const": "Athiti" }, { "title": "Atkinson Hyperlegible", "markdownDescription": "https://fonts.google.com/specimen/Atkinson+Hyperlegible", - "enum": [ - "Atkinson Hyperlegible" - ] + "const": "Atkinson Hyperlegible" }, { "title": "Atma", "markdownDescription": "https://fonts.google.com/specimen/Atma", - "enum": [ - "Atma" - ] + "const": "Atma" }, { "title": "Atomic Age", "markdownDescription": "https://fonts.google.com/specimen/Atomic+Age", - "enum": [ - "Atomic Age" - ] + "const": "Atomic Age" }, { "title": "Aubrey", "markdownDescription": "https://fonts.google.com/specimen/Aubrey", - "enum": [ - "Aubrey" - ] + "const": "Aubrey" }, { "title": "Audiowide", "markdownDescription": "https://fonts.google.com/specimen/Audiowide", - "enum": [ - "Audiowide" - ] + "const": "Audiowide" }, { "title": "Autour One", "markdownDescription": "https://fonts.google.com/specimen/Autour+One", - "enum": [ - "Autour One" - ] + "const": "Autour One" }, { "title": "Average", "markdownDescription": "https://fonts.google.com/specimen/Average", - "enum": [ - "Average" - ] + "const": "Average" }, { "title": "Average Sans", "markdownDescription": "https://fonts.google.com/specimen/Average+Sans", - "enum": [ - "Average Sans" - ] + "const": "Average Sans" }, { "title": "Averia Gruesa Libre", "markdownDescription": "https://fonts.google.com/specimen/Averia+Gruesa+Libre", - "enum": [ - "Averia Gruesa Libre" - ] + "const": "Averia Gruesa Libre" }, { "title": "Averia Libre", "markdownDescription": "https://fonts.google.com/specimen/Averia+Libre", - "enum": [ - "Averia Libre" - ] + "const": "Averia Libre" }, { "title": "Averia Sans Libre", "markdownDescription": "https://fonts.google.com/specimen/Averia+Sans+Libre", - "enum": [ - "Averia Sans Libre" - ] + "const": "Averia Sans Libre" }, { "title": "Averia Serif Libre", "markdownDescription": "https://fonts.google.com/specimen/Averia+Serif+Libre", - "enum": [ - "Averia Serif Libre" - ] + "const": "Averia Serif Libre" }, { "title": "Azeret Mono", "markdownDescription": "https://fonts.google.com/specimen/Azeret+Mono", - "enum": [ - "Azeret Mono" - ] + "const": "Azeret Mono" }, { "title": "B612", "markdownDescription": "https://fonts.google.com/specimen/B612", - "enum": [ - "B612" - ] + "const": "B612" }, { "title": "B612 Mono", "markdownDescription": "https://fonts.google.com/specimen/B612+Mono", - "enum": [ - "B612 Mono" - ] + "const": "B612 Mono" }, { "title": "BIZ UDGothic", "markdownDescription": "https://fonts.google.com/specimen/BIZ+UDGothic", - "enum": [ - "BIZ UDGothic" - ] + "const": "BIZ UDGothic" }, { "title": "BIZ UDMincho", "markdownDescription": "https://fonts.google.com/specimen/BIZ+UDMincho", - "enum": [ - "BIZ UDMincho" - ] + "const": "BIZ UDMincho" }, { "title": "BIZ UDPGothic", "markdownDescription": "https://fonts.google.com/specimen/BIZ+UDPGothic", - "enum": [ - "BIZ UDPGothic" - ] + "const": "BIZ UDPGothic" }, { "title": "BIZ UDPMincho", "markdownDescription": "https://fonts.google.com/specimen/BIZ+UDPMincho", - "enum": [ - "BIZ UDPMincho" - ] + "const": "BIZ UDPMincho" }, { "title": "Babylonica", "markdownDescription": "https://fonts.google.com/specimen/Babylonica", - "enum": [ - "Babylonica" - ] + "const": "Babylonica" }, { "title": "Bacasime Antique", "markdownDescription": "https://fonts.google.com/specimen/Bacasime+Antique", - "enum": [ - "Bacasime Antique" - ] + "const": "Bacasime Antique" }, { "title": "Bad Script", "markdownDescription": "https://fonts.google.com/specimen/Bad+Script", - "enum": [ - "Bad Script" - ] + "const": "Bad Script" }, { "title": "Bagel Fat One", "markdownDescription": "https://fonts.google.com/specimen/Bagel+Fat+One", - "enum": [ - "Bagel Fat One" - ] + "const": "Bagel Fat One" }, { "title": "Bahiana", "markdownDescription": "https://fonts.google.com/specimen/Bahiana", - "enum": [ - "Bahiana" - ] + "const": "Bahiana" }, { "title": "Bahianita", "markdownDescription": "https://fonts.google.com/specimen/Bahianita", - "enum": [ - "Bahianita" - ] + "const": "Bahianita" }, { "title": "Bai Jamjuree", "markdownDescription": "https://fonts.google.com/specimen/Bai+Jamjuree", - "enum": [ - "Bai Jamjuree" - ] + "const": "Bai Jamjuree" }, { "title": "Bakbak One", "markdownDescription": "https://fonts.google.com/specimen/Bakbak+One", - "enum": [ - "Bakbak One" - ] + "const": "Bakbak One" }, { "title": "Ballet", "markdownDescription": "https://fonts.google.com/specimen/Ballet", - "enum": [ - "Ballet" - ] + "const": "Ballet" }, { "title": "Baloo 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+2", - "enum": [ - "Baloo 2" - ] + "const": "Baloo 2" }, { "title": "Baloo Bhai 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Bhai+2", - "enum": [ - "Baloo Bhai 2" - ] + "const": "Baloo Bhai 2" }, { "title": "Baloo Bhaijaan 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Bhaijaan+2", - "enum": [ - "Baloo Bhaijaan 2" - ] + "const": "Baloo Bhaijaan 2" }, { "title": "Baloo Bhaina 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Bhaina+2", - "enum": [ - "Baloo Bhaina 2" - ] + "const": "Baloo Bhaina 2" }, { "title": "Baloo Chettan 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Chettan+2", - "enum": [ - "Baloo Chettan 2" - ] + "const": "Baloo Chettan 2" }, { "title": "Baloo Da 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Da+2", - "enum": [ - "Baloo Da 2" - ] + "const": "Baloo Da 2" }, { "title": "Baloo Paaji 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Paaji+2", - "enum": [ - "Baloo Paaji 2" - ] + "const": "Baloo Paaji 2" }, { "title": "Baloo Tamma 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Tamma+2", - "enum": [ - "Baloo Tamma 2" - ] + "const": "Baloo Tamma 2" }, { "title": "Baloo Tammudu 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Tammudu+2", - "enum": [ - "Baloo Tammudu 2" - ] + "const": "Baloo Tammudu 2" }, { "title": "Baloo Thambi 2", "markdownDescription": "https://fonts.google.com/specimen/Baloo+Thambi+2", - "enum": [ - "Baloo Thambi 2" - ] + "const": "Baloo Thambi 2" }, { "title": "Balsamiq Sans", "markdownDescription": "https://fonts.google.com/specimen/Balsamiq+Sans", - "enum": [ - "Balsamiq Sans" - ] + "const": "Balsamiq Sans" }, { "title": "Balthazar", "markdownDescription": "https://fonts.google.com/specimen/Balthazar", - "enum": [ - "Balthazar" - ] + "const": "Balthazar" }, { "title": "Bangers", "markdownDescription": "https://fonts.google.com/specimen/Bangers", - "enum": [ - "Bangers" - ] + "const": "Bangers" }, { "title": "Barlow", "markdownDescription": "https://fonts.google.com/specimen/Barlow", - "enum": [ - "Barlow" - ] + "const": "Barlow" }, { "title": "Barlow Condensed", "markdownDescription": "https://fonts.google.com/specimen/Barlow+Condensed", - "enum": [ - "Barlow Condensed" - ] + "const": "Barlow Condensed" }, { "title": "Barlow Semi Condensed", "markdownDescription": "https://fonts.google.com/specimen/Barlow+Semi+Condensed", - "enum": [ - "Barlow Semi Condensed" - ] + "const": "Barlow Semi Condensed" }, { "title": "Barriecito", "markdownDescription": "https://fonts.google.com/specimen/Barriecito", - "enum": [ - "Barriecito" - ] + "const": "Barriecito" }, { "title": "Barrio", "markdownDescription": "https://fonts.google.com/specimen/Barrio", - "enum": [ - "Barrio" - ] + "const": "Barrio" }, { "title": "Basic", "markdownDescription": "https://fonts.google.com/specimen/Basic", - "enum": [ - "Basic" - ] + "const": "Basic" }, { "title": "Baskervville", "markdownDescription": "https://fonts.google.com/specimen/Baskervville", - "enum": [ - "Baskervville" - ] + "const": "Baskervville" }, { "title": "Battambang", "markdownDescription": "https://fonts.google.com/specimen/Battambang", - "enum": [ - "Battambang" - ] + "const": "Battambang" }, { "title": "Baumans", "markdownDescription": "https://fonts.google.com/specimen/Baumans", - "enum": [ - "Baumans" - ] + "const": "Baumans" }, { "title": "Bayon", "markdownDescription": "https://fonts.google.com/specimen/Bayon", - "enum": [ - "Bayon" - ] + "const": "Bayon" }, { "title": "Be Vietnam Pro", "markdownDescription": "https://fonts.google.com/specimen/Be+Vietnam+Pro", - "enum": [ - "Be Vietnam Pro" - ] + "const": "Be Vietnam Pro" }, { "title": "Beau Rivage", "markdownDescription": "https://fonts.google.com/specimen/Beau+Rivage", - "enum": [ - "Beau Rivage" - ] + "const": "Beau Rivage" }, { "title": "Bebas Neue", "markdownDescription": "https://fonts.google.com/specimen/Bebas+Neue", - "enum": [ - "Bebas Neue" - ] + "const": "Bebas Neue" }, { "title": "Belanosima", "markdownDescription": "https://fonts.google.com/specimen/Belanosima", - "enum": [ - "Belanosima" - ] + "const": "Belanosima" }, { "title": "Belgrano", "markdownDescription": "https://fonts.google.com/specimen/Belgrano", - "enum": [ - "Belgrano" - ] + "const": "Belgrano" }, { "title": "Bellefair", "markdownDescription": "https://fonts.google.com/specimen/Bellefair", - "enum": [ - "Bellefair" - ] + "const": "Bellefair" }, { "title": "Belleza", "markdownDescription": "https://fonts.google.com/specimen/Belleza", - "enum": [ - "Belleza" - ] + "const": "Belleza" }, { "title": "Bellota", "markdownDescription": "https://fonts.google.com/specimen/Bellota", - "enum": [ - "Bellota" - ] + "const": "Bellota" }, { "title": "Bellota Text", "markdownDescription": "https://fonts.google.com/specimen/Bellota+Text", - "enum": [ - "Bellota Text" - ] + "const": "Bellota Text" }, { "title": "BenchNine", "markdownDescription": "https://fonts.google.com/specimen/BenchNine", - "enum": [ - "BenchNine" - ] + "const": "BenchNine" }, { "title": "Benne", "markdownDescription": "https://fonts.google.com/specimen/Benne", - "enum": [ - "Benne" - ] + "const": "Benne" }, { "title": "Bentham", "markdownDescription": "https://fonts.google.com/specimen/Bentham", - "enum": [ - "Bentham" - ] + "const": "Bentham" }, { "title": "Berkshire Swash", "markdownDescription": "https://fonts.google.com/specimen/Berkshire+Swash", - "enum": [ - "Berkshire Swash" - ] + "const": "Berkshire Swash" }, { "title": "Besley", "markdownDescription": "https://fonts.google.com/specimen/Besley", - "enum": [ - "Besley" - ] + "const": "Besley" }, { "title": "Beth Ellen", "markdownDescription": "https://fonts.google.com/specimen/Beth+Ellen", - "enum": [ - "Beth Ellen" - ] + "const": "Beth Ellen" }, { "title": "Bevan", "markdownDescription": "https://fonts.google.com/specimen/Bevan", - "enum": [ - "Bevan" - ] + "const": "Bevan" }, { "title": "BhuTuka Expanded One", "markdownDescription": "https://fonts.google.com/specimen/BhuTuka+Expanded+One", - "enum": [ - "BhuTuka Expanded One" - ] + "const": "BhuTuka Expanded One" }, { "title": "Big Shoulders Display", "markdownDescription": "https://fonts.google.com/specimen/Big+Shoulders+Display", - "enum": [ - "Big Shoulders Display" - ] + "const": "Big Shoulders Display" }, { "title": "Big Shoulders Inline Display", "markdownDescription": "https://fonts.google.com/specimen/Big+Shoulders+Inline+Display", - "enum": [ - "Big Shoulders Inline Display" - ] + "const": "Big Shoulders Inline Display" }, { "title": "Big Shoulders Inline Text", "markdownDescription": "https://fonts.google.com/specimen/Big+Shoulders+Inline+Text", - "enum": [ - "Big Shoulders Inline Text" - ] + "const": "Big Shoulders Inline Text" }, { "title": "Big Shoulders Stencil Display", "markdownDescription": "https://fonts.google.com/specimen/Big+Shoulders+Stencil+Display", - "enum": [ - "Big Shoulders Stencil Display" - ] + "const": "Big Shoulders Stencil Display" }, { "title": "Big Shoulders Stencil Text", "markdownDescription": "https://fonts.google.com/specimen/Big+Shoulders+Stencil+Text", - "enum": [ - "Big Shoulders Stencil Text" - ] + "const": "Big Shoulders Stencil Text" }, { "title": "Big Shoulders Text", "markdownDescription": "https://fonts.google.com/specimen/Big+Shoulders+Text", - "enum": [ - "Big Shoulders Text" - ] + "const": "Big Shoulders Text" }, { "title": "Bigelow Rules", "markdownDescription": "https://fonts.google.com/specimen/Bigelow+Rules", - "enum": [ - "Bigelow Rules" - ] + "const": "Bigelow Rules" }, { "title": "Bigshot One", "markdownDescription": "https://fonts.google.com/specimen/Bigshot+One", - "enum": [ - "Bigshot One" - ] + "const": "Bigshot One" }, { "title": "Bilbo", "markdownDescription": "https://fonts.google.com/specimen/Bilbo", - "enum": [ - "Bilbo" - ] + "const": "Bilbo" }, { "title": "Bilbo Swash Caps", "markdownDescription": "https://fonts.google.com/specimen/Bilbo+Swash+Caps", - "enum": [ - "Bilbo Swash Caps" - ] + "const": "Bilbo Swash Caps" }, { "title": "BioRhyme", "markdownDescription": "https://fonts.google.com/specimen/BioRhyme", - "enum": [ - "BioRhyme" - ] + "const": "BioRhyme" }, { "title": "BioRhyme Expanded", "markdownDescription": "https://fonts.google.com/specimen/BioRhyme+Expanded", - "enum": [ - "BioRhyme Expanded" - ] + "const": "BioRhyme Expanded" }, { "title": "Birthstone", "markdownDescription": "https://fonts.google.com/specimen/Birthstone", - "enum": [ - "Birthstone" - ] + "const": "Birthstone" }, { "title": "Birthstone Bounce", "markdownDescription": "https://fonts.google.com/specimen/Birthstone+Bounce", - "enum": [ - "Birthstone Bounce" - ] + "const": "Birthstone Bounce" }, { "title": "Biryani", "markdownDescription": "https://fonts.google.com/specimen/Biryani", - "enum": [ - "Biryani" - ] + "const": "Biryani" }, { "title": "Bitter", "markdownDescription": "https://fonts.google.com/specimen/Bitter", - "enum": [ - "Bitter" - ] + "const": "Bitter" }, { "title": "Black And White Picture", "markdownDescription": "https://fonts.google.com/specimen/Black+And+White+Picture", - "enum": [ - "Black And White Picture" - ] + "const": "Black And White Picture" }, { "title": "Black Han Sans", "markdownDescription": "https://fonts.google.com/specimen/Black+Han+Sans", - "enum": [ - "Black Han Sans" - ] + "const": "Black Han Sans" }, { "title": "Black Ops One", "markdownDescription": "https://fonts.google.com/specimen/Black+Ops+One", - "enum": [ - "Black Ops One" - ] + "const": "Black Ops One" }, { "title": "Blaka", "markdownDescription": "https://fonts.google.com/specimen/Blaka", - "enum": [ - "Blaka" - ] + "const": "Blaka" }, { "title": "Blaka Hollow", "markdownDescription": "https://fonts.google.com/specimen/Blaka+Hollow", - "enum": [ - "Blaka Hollow" - ] + "const": "Blaka Hollow" }, { "title": "Blaka Ink", "markdownDescription": "https://fonts.google.com/specimen/Blaka+Ink", - "enum": [ - "Blaka Ink" - ] + "const": "Blaka Ink" }, { "title": "Blinker", "markdownDescription": "https://fonts.google.com/specimen/Blinker", - "enum": [ - "Blinker" - ] + "const": "Blinker" }, { "title": "Bodoni Moda", "markdownDescription": "https://fonts.google.com/specimen/Bodoni+Moda", - "enum": [ - "Bodoni Moda" - ] + "const": "Bodoni Moda" }, { "title": "Bokor", "markdownDescription": "https://fonts.google.com/specimen/Bokor", - "enum": [ - "Bokor" - ] + "const": "Bokor" }, { "title": "Bona Nova", "markdownDescription": "https://fonts.google.com/specimen/Bona+Nova", - "enum": [ - "Bona Nova" - ] + "const": "Bona Nova" }, { "title": "Bonbon", "markdownDescription": "https://fonts.google.com/specimen/Bonbon", - "enum": [ - "Bonbon" - ] + "const": "Bonbon" }, { "title": "Bonheur Royale", "markdownDescription": "https://fonts.google.com/specimen/Bonheur+Royale", - "enum": [ - "Bonheur Royale" - ] + "const": "Bonheur Royale" }, { "title": "Boogaloo", "markdownDescription": "https://fonts.google.com/specimen/Boogaloo", - "enum": [ - "Boogaloo" - ] + "const": "Boogaloo" }, { "title": "Borel", "markdownDescription": "https://fonts.google.com/specimen/Borel", - "enum": [ - "Borel" - ] + "const": "Borel" }, { "title": "Bowlby One", "markdownDescription": "https://fonts.google.com/specimen/Bowlby+One", - "enum": [ - "Bowlby One" - ] + "const": "Bowlby One" }, { "title": "Bowlby One SC", "markdownDescription": "https://fonts.google.com/specimen/Bowlby+One+SC", - "enum": [ - "Bowlby One SC" - ] + "const": "Bowlby One SC" }, { "title": "Braah One", "markdownDescription": "https://fonts.google.com/specimen/Braah+One", - "enum": [ - "Braah One" - ] + "const": "Braah One" }, { "title": "Brawler", "markdownDescription": "https://fonts.google.com/specimen/Brawler", - "enum": [ - "Brawler" - ] + "const": "Brawler" }, { "title": "Bree Serif", "markdownDescription": "https://fonts.google.com/specimen/Bree+Serif", - "enum": [ - "Bree Serif" - ] + "const": "Bree Serif" }, { "title": "Bricolage Grotesque", "markdownDescription": "https://fonts.google.com/specimen/Bricolage+Grotesque", - "enum": [ - "Bricolage Grotesque" - ] + "const": "Bricolage Grotesque" }, { "title": "Bruno Ace", "markdownDescription": "https://fonts.google.com/specimen/Bruno+Ace", - "enum": [ - "Bruno Ace" - ] + "const": "Bruno Ace" }, { "title": "Bruno Ace SC", "markdownDescription": "https://fonts.google.com/specimen/Bruno+Ace+SC", - "enum": [ - "Bruno Ace SC" - ] + "const": "Bruno Ace SC" }, { "title": "Brygada 1918", "markdownDescription": "https://fonts.google.com/specimen/Brygada+1918", - "enum": [ - "Brygada 1918" - ] + "const": "Brygada 1918" }, { "title": "Bubblegum Sans", "markdownDescription": "https://fonts.google.com/specimen/Bubblegum+Sans", - "enum": [ - "Bubblegum Sans" - ] + "const": "Bubblegum Sans" }, { "title": "Bubbler One", "markdownDescription": "https://fonts.google.com/specimen/Bubbler+One", - "enum": [ - "Bubbler One" - ] + "const": "Bubbler One" }, { "title": "Buda", "markdownDescription": "https://fonts.google.com/specimen/Buda", - "enum": [ - "Buda" - ] + "const": "Buda" }, { "title": "Buenard", "markdownDescription": "https://fonts.google.com/specimen/Buenard", - "enum": [ - "Buenard" - ] + "const": "Buenard" }, { "title": "Bungee", "markdownDescription": "https://fonts.google.com/specimen/Bungee", - "enum": [ - "Bungee" - ] + "const": "Bungee" }, { "title": "Bungee Hairline", "markdownDescription": "https://fonts.google.com/specimen/Bungee+Hairline", - "enum": [ - "Bungee Hairline" - ] + "const": "Bungee Hairline" }, { "title": "Bungee Inline", "markdownDescription": "https://fonts.google.com/specimen/Bungee+Inline", - "enum": [ - "Bungee Inline" - ] + "const": "Bungee Inline" }, { "title": "Bungee Outline", "markdownDescription": "https://fonts.google.com/specimen/Bungee+Outline", - "enum": [ - "Bungee Outline" - ] + "const": "Bungee Outline" }, { "title": "Bungee Shade", "markdownDescription": "https://fonts.google.com/specimen/Bungee+Shade", - "enum": [ - "Bungee Shade" - ] + "const": "Bungee Shade" }, { "title": "Bungee Spice", "markdownDescription": "https://fonts.google.com/specimen/Bungee+Spice", - "enum": [ - "Bungee Spice" - ] + "const": "Bungee Spice" }, { "title": "Butcherman", "markdownDescription": "https://fonts.google.com/specimen/Butcherman", - "enum": [ - "Butcherman" - ] + "const": "Butcherman" }, { "title": "Butterfly Kids", "markdownDescription": "https://fonts.google.com/specimen/Butterfly+Kids", - "enum": [ - "Butterfly Kids" - ] + "const": "Butterfly Kids" }, { "title": "Cabin", "markdownDescription": "https://fonts.google.com/specimen/Cabin", - "enum": [ - "Cabin" - ] + "const": "Cabin" }, { "title": "Cabin Condensed", "markdownDescription": "https://fonts.google.com/specimen/Cabin+Condensed", - "enum": [ - "Cabin Condensed" - ] + "const": "Cabin Condensed" }, { "title": "Cabin Sketch", "markdownDescription": "https://fonts.google.com/specimen/Cabin+Sketch", - "enum": [ - "Cabin Sketch" - ] + "const": "Cabin Sketch" }, { "title": "Caesar Dressing", "markdownDescription": "https://fonts.google.com/specimen/Caesar+Dressing", - "enum": [ - "Caesar Dressing" - ] + "const": "Caesar Dressing" }, { "title": "Cagliostro", "markdownDescription": "https://fonts.google.com/specimen/Cagliostro", - "enum": [ - "Cagliostro" - ] + "const": "Cagliostro" }, { "title": "Cairo", "markdownDescription": "https://fonts.google.com/specimen/Cairo", - "enum": [ - "Cairo" - ] + "const": "Cairo" }, { "title": "Cairo Play", "markdownDescription": "https://fonts.google.com/specimen/Cairo+Play", - "enum": [ - "Cairo Play" - ] + "const": "Cairo Play" }, { "title": "Caladea", "markdownDescription": "https://fonts.google.com/specimen/Caladea", - "enum": [ - "Caladea" - ] + "const": "Caladea" }, { "title": "Calistoga", "markdownDescription": "https://fonts.google.com/specimen/Calistoga", - "enum": [ - "Calistoga" - ] + "const": "Calistoga" }, { "title": "Calligraffitti", "markdownDescription": "https://fonts.google.com/specimen/Calligraffitti", - "enum": [ - "Calligraffitti" - ] + "const": "Calligraffitti" }, { "title": "Cambay", "markdownDescription": "https://fonts.google.com/specimen/Cambay", - "enum": [ - "Cambay" - ] + "const": "Cambay" }, { "title": "Cambo", "markdownDescription": "https://fonts.google.com/specimen/Cambo", - "enum": [ - "Cambo" - ] + "const": "Cambo" }, { "title": "Candal", "markdownDescription": "https://fonts.google.com/specimen/Candal", - "enum": [ - "Candal" - ] + "const": "Candal" }, { "title": "Cantarell", "markdownDescription": "https://fonts.google.com/specimen/Cantarell", - "enum": [ - "Cantarell" - ] + "const": "Cantarell" }, { "title": "Cantata One", "markdownDescription": "https://fonts.google.com/specimen/Cantata+One", - "enum": [ - "Cantata One" - ] + "const": "Cantata One" }, { "title": "Cantora One", "markdownDescription": "https://fonts.google.com/specimen/Cantora+One", - "enum": [ - "Cantora One" - ] + "const": "Cantora One" }, { "title": "Caprasimo", "markdownDescription": "https://fonts.google.com/specimen/Caprasimo", - "enum": [ - "Caprasimo" - ] + "const": "Caprasimo" }, { "title": "Capriola", "markdownDescription": "https://fonts.google.com/specimen/Capriola", - "enum": [ - "Capriola" - ] + "const": "Capriola" }, { "title": "Caramel", "markdownDescription": "https://fonts.google.com/specimen/Caramel", - "enum": [ - "Caramel" - ] + "const": "Caramel" }, { "title": "Carattere", "markdownDescription": "https://fonts.google.com/specimen/Carattere", - "enum": [ - "Carattere" - ] + "const": "Carattere" }, { "title": "Cardo", "markdownDescription": "https://fonts.google.com/specimen/Cardo", - "enum": [ - "Cardo" - ] + "const": "Cardo" }, { "title": "Carlito", "markdownDescription": "https://fonts.google.com/specimen/Carlito", - "enum": [ - "Carlito" - ] + "const": "Carlito" }, { "title": "Carme", "markdownDescription": "https://fonts.google.com/specimen/Carme", - "enum": [ - "Carme" - ] + "const": "Carme" }, { "title": "Carrois Gothic", "markdownDescription": "https://fonts.google.com/specimen/Carrois+Gothic", - "enum": [ - "Carrois Gothic" - ] + "const": "Carrois Gothic" }, { "title": "Carrois Gothic SC", "markdownDescription": "https://fonts.google.com/specimen/Carrois+Gothic+SC", - "enum": [ - "Carrois Gothic SC" - ] + "const": "Carrois Gothic SC" }, { "title": "Carter One", "markdownDescription": "https://fonts.google.com/specimen/Carter+One", - "enum": [ - "Carter One" - ] + "const": "Carter One" }, { "title": "Castoro", "markdownDescription": "https://fonts.google.com/specimen/Castoro", - "enum": [ - "Castoro" - ] + "const": "Castoro" }, { "title": "Castoro Titling", "markdownDescription": "https://fonts.google.com/specimen/Castoro+Titling", - "enum": [ - "Castoro Titling" - ] + "const": "Castoro Titling" }, { "title": "Catamaran", "markdownDescription": "https://fonts.google.com/specimen/Catamaran", - "enum": [ - "Catamaran" - ] + "const": "Catamaran" }, { "title": "Caudex", "markdownDescription": "https://fonts.google.com/specimen/Caudex", - "enum": [ - "Caudex" - ] + "const": "Caudex" }, { "title": "Caveat", "markdownDescription": "https://fonts.google.com/specimen/Caveat", - "enum": [ - "Caveat" - ] + "const": "Caveat" }, { "title": "Caveat Brush", "markdownDescription": "https://fonts.google.com/specimen/Caveat+Brush", - "enum": [ - "Caveat Brush" - ] + "const": "Caveat Brush" }, { "title": "Cedarville Cursive", "markdownDescription": "https://fonts.google.com/specimen/Cedarville+Cursive", - "enum": [ - "Cedarville Cursive" - ] + "const": "Cedarville Cursive" }, { "title": "Ceviche One", "markdownDescription": "https://fonts.google.com/specimen/Ceviche+One", - "enum": [ - "Ceviche One" - ] + "const": "Ceviche One" }, { "title": "Chakra Petch", "markdownDescription": "https://fonts.google.com/specimen/Chakra+Petch", - "enum": [ - "Chakra Petch" - ] + "const": "Chakra Petch" }, { "title": "Changa", "markdownDescription": "https://fonts.google.com/specimen/Changa", - "enum": [ - "Changa" - ] + "const": "Changa" }, { "title": "Changa One", "markdownDescription": "https://fonts.google.com/specimen/Changa+One", - "enum": [ - "Changa One" - ] + "const": "Changa One" }, { "title": "Chango", "markdownDescription": "https://fonts.google.com/specimen/Chango", - "enum": [ - "Chango" - ] + "const": "Chango" }, { "title": "Charis SIL", "markdownDescription": "https://fonts.google.com/specimen/Charis+SIL", - "enum": [ - "Charis SIL" - ] + "const": "Charis SIL" }, { "title": "Charm", "markdownDescription": "https://fonts.google.com/specimen/Charm", - "enum": [ - "Charm" - ] + "const": "Charm" }, { "title": "Charmonman", "markdownDescription": "https://fonts.google.com/specimen/Charmonman", - "enum": [ - "Charmonman" - ] + "const": "Charmonman" }, { "title": "Chathura", "markdownDescription": "https://fonts.google.com/specimen/Chathura", - "enum": [ - "Chathura" - ] + "const": "Chathura" }, { "title": "Chau Philomene One", "markdownDescription": "https://fonts.google.com/specimen/Chau+Philomene+One", - "enum": [ - "Chau Philomene One" - ] + "const": "Chau Philomene One" }, { "title": "Chela One", "markdownDescription": "https://fonts.google.com/specimen/Chela+One", - "enum": [ - "Chela One" - ] + "const": "Chela One" }, { "title": "Chelsea Market", "markdownDescription": "https://fonts.google.com/specimen/Chelsea+Market", - "enum": [ - "Chelsea Market" - ] + "const": "Chelsea Market" }, { "title": "Chenla", "markdownDescription": "https://fonts.google.com/specimen/Chenla", - "enum": [ - "Chenla" - ] + "const": "Chenla" }, { "title": "Cherish", "markdownDescription": "https://fonts.google.com/specimen/Cherish", - "enum": [ - "Cherish" - ] + "const": "Cherish" }, { "title": "Cherry Bomb One", "markdownDescription": "https://fonts.google.com/specimen/Cherry+Bomb+One", - "enum": [ - "Cherry Bomb One" - ] + "const": "Cherry Bomb One" }, { "title": "Cherry Cream Soda", "markdownDescription": "https://fonts.google.com/specimen/Cherry+Cream+Soda", - "enum": [ - "Cherry Cream Soda" - ] + "const": "Cherry Cream Soda" }, { "title": "Cherry Swash", "markdownDescription": "https://fonts.google.com/specimen/Cherry+Swash", - "enum": [ - "Cherry Swash" - ] + "const": "Cherry Swash" }, { "title": "Chewy", "markdownDescription": "https://fonts.google.com/specimen/Chewy", - "enum": [ - "Chewy" - ] + "const": "Chewy" }, { "title": "Chicle", "markdownDescription": "https://fonts.google.com/specimen/Chicle", - "enum": [ - "Chicle" - ] + "const": "Chicle" }, { "title": "Chilanka", "markdownDescription": "https://fonts.google.com/specimen/Chilanka", - "enum": [ - "Chilanka" - ] + "const": "Chilanka" }, { "title": "Chivo", "markdownDescription": "https://fonts.google.com/specimen/Chivo", - "enum": [ - "Chivo" - ] + "const": "Chivo" }, { "title": "Chivo Mono", "markdownDescription": "https://fonts.google.com/specimen/Chivo+Mono", - "enum": [ - "Chivo Mono" - ] + "const": "Chivo Mono" }, { "title": "Chokokutai", "markdownDescription": "https://fonts.google.com/specimen/Chokokutai", - "enum": [ - "Chokokutai" - ] + "const": "Chokokutai" }, { "title": "Chonburi", "markdownDescription": "https://fonts.google.com/specimen/Chonburi", - "enum": [ - "Chonburi" - ] + "const": "Chonburi" }, { "title": "Cinzel", "markdownDescription": "https://fonts.google.com/specimen/Cinzel", - "enum": [ - "Cinzel" - ] + "const": "Cinzel" }, { "title": "Cinzel Decorative", "markdownDescription": "https://fonts.google.com/specimen/Cinzel+Decorative", - "enum": [ - "Cinzel Decorative" - ] + "const": "Cinzel Decorative" }, { "title": "Clicker Script", "markdownDescription": "https://fonts.google.com/specimen/Clicker+Script", - "enum": [ - "Clicker Script" - ] + "const": "Clicker Script" }, { "title": "Climate Crisis", "markdownDescription": "https://fonts.google.com/specimen/Climate+Crisis", - "enum": [ - "Climate Crisis" - ] + "const": "Climate Crisis" }, { "title": "Coda", "markdownDescription": "https://fonts.google.com/specimen/Coda", - "enum": [ - "Coda" - ] + "const": "Coda" }, { "title": "Coda Caption", "markdownDescription": "https://fonts.google.com/specimen/Coda+Caption", - "enum": [ - "Coda Caption" - ] + "const": "Coda Caption" }, { "title": "Codystar", "markdownDescription": "https://fonts.google.com/specimen/Codystar", - "enum": [ - "Codystar" - ] + "const": "Codystar" }, { "title": "Coiny", "markdownDescription": "https://fonts.google.com/specimen/Coiny", - "enum": [ - "Coiny" - ] + "const": "Coiny" }, { "title": "Combo", "markdownDescription": "https://fonts.google.com/specimen/Combo", - "enum": [ - "Combo" - ] + "const": "Combo" }, { "title": "Comfortaa", "markdownDescription": "https://fonts.google.com/specimen/Comfortaa", - "enum": [ - "Comfortaa" - ] + "const": "Comfortaa" }, { "title": "Comforter", "markdownDescription": "https://fonts.google.com/specimen/Comforter", - "enum": [ - "Comforter" - ] + "const": "Comforter" }, { "title": "Comforter Brush", "markdownDescription": "https://fonts.google.com/specimen/Comforter+Brush", - "enum": [ - "Comforter Brush" - ] + "const": "Comforter Brush" }, { "title": "Comic Neue", "markdownDescription": "https://fonts.google.com/specimen/Comic+Neue", - "enum": [ - "Comic Neue" - ] + "const": "Comic Neue" }, { "title": "Coming Soon", "markdownDescription": "https://fonts.google.com/specimen/Coming+Soon", - "enum": [ - "Coming Soon" - ] + "const": "Coming Soon" }, { "title": "Comme", "markdownDescription": "https://fonts.google.com/specimen/Comme", - "enum": [ - "Comme" - ] + "const": "Comme" }, { "title": "Commissioner", "markdownDescription": "https://fonts.google.com/specimen/Commissioner", - "enum": [ - "Commissioner" - ] + "const": "Commissioner" }, { "title": "Concert One", "markdownDescription": "https://fonts.google.com/specimen/Concert+One", - "enum": [ - "Concert One" - ] + "const": "Concert One" }, { "title": "Condiment", "markdownDescription": "https://fonts.google.com/specimen/Condiment", - "enum": [ - "Condiment" - ] + "const": "Condiment" }, { "title": "Content", "markdownDescription": "https://fonts.google.com/specimen/Content", - "enum": [ - "Content" - ] + "const": "Content" }, { "title": "Contrail One", "markdownDescription": "https://fonts.google.com/specimen/Contrail+One", - "enum": [ - "Contrail One" - ] + "const": "Contrail One" }, { "title": "Convergence", "markdownDescription": "https://fonts.google.com/specimen/Convergence", - "enum": [ - "Convergence" - ] + "const": "Convergence" }, { "title": "Cookie", "markdownDescription": "https://fonts.google.com/specimen/Cookie", - "enum": [ - "Cookie" - ] + "const": "Cookie" }, { "title": "Copse", "markdownDescription": "https://fonts.google.com/specimen/Copse", - "enum": [ - "Copse" - ] + "const": "Copse" }, { "title": "Corben", "markdownDescription": "https://fonts.google.com/specimen/Corben", - "enum": [ - "Corben" - ] + "const": "Corben" }, { "title": "Corinthia", "markdownDescription": "https://fonts.google.com/specimen/Corinthia", - "enum": [ - "Corinthia" - ] + "const": "Corinthia" }, { "title": "Cormorant", "markdownDescription": "https://fonts.google.com/specimen/Cormorant", - "enum": [ - "Cormorant" - ] + "const": "Cormorant" }, { "title": "Cormorant Garamond", "markdownDescription": "https://fonts.google.com/specimen/Cormorant+Garamond", - "enum": [ - "Cormorant Garamond" - ] + "const": "Cormorant Garamond" }, { "title": "Cormorant Infant", "markdownDescription": "https://fonts.google.com/specimen/Cormorant+Infant", - "enum": [ - "Cormorant Infant" - ] + "const": "Cormorant Infant" }, { "title": "Cormorant SC", "markdownDescription": "https://fonts.google.com/specimen/Cormorant+SC", - "enum": [ - "Cormorant SC" - ] + "const": "Cormorant SC" }, { "title": "Cormorant Unicase", "markdownDescription": "https://fonts.google.com/specimen/Cormorant+Unicase", - "enum": [ - "Cormorant Unicase" - ] + "const": "Cormorant Unicase" }, { "title": "Cormorant Upright", "markdownDescription": "https://fonts.google.com/specimen/Cormorant+Upright", - "enum": [ - "Cormorant Upright" - ] + "const": "Cormorant Upright" }, { "title": "Courgette", "markdownDescription": "https://fonts.google.com/specimen/Courgette", - "enum": [ - "Courgette" - ] + "const": "Courgette" }, { "title": "Courier Prime", "markdownDescription": "https://fonts.google.com/specimen/Courier+Prime", - "enum": [ - "Courier Prime" - ] + "const": "Courier Prime" }, { "title": "Cousine", "markdownDescription": "https://fonts.google.com/specimen/Cousine", - "enum": [ - "Cousine" - ] + "const": "Cousine" }, { "title": "Coustard", "markdownDescription": "https://fonts.google.com/specimen/Coustard", - "enum": [ - "Coustard" - ] + "const": "Coustard" }, { "title": "Covered By Your Grace", "markdownDescription": "https://fonts.google.com/specimen/Covered+By+Your+Grace", - "enum": [ - "Covered By Your Grace" - ] + "const": "Covered By Your Grace" }, { "title": "Crafty Girls", "markdownDescription": "https://fonts.google.com/specimen/Crafty+Girls", - "enum": [ - "Crafty Girls" - ] + "const": "Crafty Girls" }, { "title": "Creepster", "markdownDescription": "https://fonts.google.com/specimen/Creepster", - "enum": [ - "Creepster" - ] + "const": "Creepster" }, { "title": "Crete Round", "markdownDescription": "https://fonts.google.com/specimen/Crete+Round", - "enum": [ - "Crete Round" - ] + "const": "Crete Round" }, { "title": "Crimson Pro", "markdownDescription": "https://fonts.google.com/specimen/Crimson+Pro", - "enum": [ - "Crimson Pro" - ] + "const": "Crimson Pro" }, { "title": "Crimson Text", "markdownDescription": "https://fonts.google.com/specimen/Crimson+Text", - "enum": [ - "Crimson Text" - ] + "const": "Crimson Text" }, { "title": "Croissant One", "markdownDescription": "https://fonts.google.com/specimen/Croissant+One", - "enum": [ - "Croissant One" - ] + "const": "Croissant One" }, { "title": "Crushed", "markdownDescription": "https://fonts.google.com/specimen/Crushed", - "enum": [ - "Crushed" - ] + "const": "Crushed" }, { "title": "Cuprum", "markdownDescription": "https://fonts.google.com/specimen/Cuprum", - "enum": [ - "Cuprum" - ] + "const": "Cuprum" }, { "title": "Cute Font", "markdownDescription": "https://fonts.google.com/specimen/Cute+Font", - "enum": [ - "Cute Font" - ] + "const": "Cute Font" }, { "title": "Cutive", "markdownDescription": "https://fonts.google.com/specimen/Cutive", - "enum": [ - "Cutive" - ] + "const": "Cutive" }, { "title": "Cutive Mono", "markdownDescription": "https://fonts.google.com/specimen/Cutive+Mono", - "enum": [ - "Cutive Mono" - ] + "const": "Cutive Mono" }, { "title": "DM Mono", "markdownDescription": "https://fonts.google.com/specimen/DM+Mono", - "enum": [ - "DM Mono" - ] + "const": "DM Mono" }, { "title": "DM Sans", "markdownDescription": "https://fonts.google.com/specimen/DM+Sans", - "enum": [ - "DM Sans" - ] + "const": "DM Sans" }, { "title": "DM Serif Display", "markdownDescription": "https://fonts.google.com/specimen/DM+Serif+Display", - "enum": [ - "DM Serif Display" - ] + "const": "DM Serif Display" }, { "title": "DM Serif Text", "markdownDescription": "https://fonts.google.com/specimen/DM+Serif+Text", - "enum": [ - "DM Serif Text" - ] + "const": "DM Serif Text" }, { "title": "Dai Banna SIL", "markdownDescription": "https://fonts.google.com/specimen/Dai+Banna+SIL", - "enum": [ - "Dai Banna SIL" - ] + "const": "Dai Banna SIL" }, { "title": "Damion", "markdownDescription": "https://fonts.google.com/specimen/Damion", - "enum": [ - "Damion" - ] + "const": "Damion" }, { "title": "Dancing Script", "markdownDescription": "https://fonts.google.com/specimen/Dancing+Script", - "enum": [ - "Dancing Script" - ] + "const": "Dancing Script" }, { "title": "Dangrek", "markdownDescription": "https://fonts.google.com/specimen/Dangrek", - "enum": [ - "Dangrek" - ] + "const": "Dangrek" }, { "title": "Darker Grotesque", "markdownDescription": "https://fonts.google.com/specimen/Darker+Grotesque", - "enum": [ - "Darker Grotesque" - ] + "const": "Darker Grotesque" }, { "title": "Darumadrop One", "markdownDescription": "https://fonts.google.com/specimen/Darumadrop+One", - "enum": [ - "Darumadrop One" - ] + "const": "Darumadrop One" }, { "title": "David Libre", "markdownDescription": "https://fonts.google.com/specimen/David+Libre", - "enum": [ - "David Libre" - ] + "const": "David Libre" }, { "title": "Dawning of a New Day", "markdownDescription": "https://fonts.google.com/specimen/Dawning+of+a+New+Day", - "enum": [ - "Dawning of a New Day" - ] + "const": "Dawning of a New Day" }, { "title": "Days One", "markdownDescription": "https://fonts.google.com/specimen/Days+One", - "enum": [ - "Days One" - ] + "const": "Days One" }, { "title": "Dekko", "markdownDescription": "https://fonts.google.com/specimen/Dekko", - "enum": [ - "Dekko" - ] + "const": "Dekko" }, { "title": "Dela Gothic One", "markdownDescription": "https://fonts.google.com/specimen/Dela+Gothic+One", - "enum": [ - "Dela Gothic One" - ] + "const": "Dela Gothic One" }, { "title": "Delicious Handrawn", "markdownDescription": "https://fonts.google.com/specimen/Delicious+Handrawn", - "enum": [ - "Delicious Handrawn" - ] + "const": "Delicious Handrawn" }, { "title": "Delius", "markdownDescription": "https://fonts.google.com/specimen/Delius", - "enum": [ - "Delius" - ] + "const": "Delius" }, { "title": "Delius Swash Caps", "markdownDescription": "https://fonts.google.com/specimen/Delius+Swash+Caps", - "enum": [ - "Delius Swash Caps" - ] + "const": "Delius Swash Caps" }, { "title": "Delius Unicase", "markdownDescription": "https://fonts.google.com/specimen/Delius+Unicase", - "enum": [ - "Delius Unicase" - ] + "const": "Delius Unicase" }, { "title": "Della Respira", "markdownDescription": "https://fonts.google.com/specimen/Della+Respira", - "enum": [ - "Della Respira" - ] + "const": "Della Respira" }, { "title": "Denk One", "markdownDescription": "https://fonts.google.com/specimen/Denk+One", - "enum": [ - "Denk One" - ] + "const": "Denk One" }, { "title": "Devonshire", "markdownDescription": "https://fonts.google.com/specimen/Devonshire", - "enum": [ - "Devonshire" - ] + "const": "Devonshire" }, { "title": "Dhurjati", "markdownDescription": "https://fonts.google.com/specimen/Dhurjati", - "enum": [ - "Dhurjati" - ] + "const": "Dhurjati" }, { "title": "Didact Gothic", "markdownDescription": "https://fonts.google.com/specimen/Didact+Gothic", - "enum": [ - "Didact Gothic" - ] + "const": "Didact Gothic" }, { "title": "Diphylleia", "markdownDescription": "https://fonts.google.com/specimen/Diphylleia", - "enum": [ - "Diphylleia" - ] + "const": "Diphylleia" }, { "title": "Diplomata", "markdownDescription": "https://fonts.google.com/specimen/Diplomata", - "enum": [ - "Diplomata" - ] + "const": "Diplomata" }, { "title": "Diplomata SC", "markdownDescription": "https://fonts.google.com/specimen/Diplomata+SC", - "enum": [ - "Diplomata SC" - ] + "const": "Diplomata SC" }, { "title": "Do Hyeon", "markdownDescription": "https://fonts.google.com/specimen/Do+Hyeon", - "enum": [ - "Do Hyeon" - ] + "const": "Do Hyeon" }, { "title": "Dokdo", "markdownDescription": "https://fonts.google.com/specimen/Dokdo", - "enum": [ - "Dokdo" - ] + "const": "Dokdo" }, { "title": "Domine", "markdownDescription": "https://fonts.google.com/specimen/Domine", - "enum": [ - "Domine" - ] + "const": "Domine" }, { "title": "Donegal One", "markdownDescription": "https://fonts.google.com/specimen/Donegal+One", - "enum": [ - "Donegal One" - ] + "const": "Donegal One" }, { "title": "Dongle", "markdownDescription": "https://fonts.google.com/specimen/Dongle", - "enum": [ - "Dongle" - ] + "const": "Dongle" }, { "title": "Doppio One", "markdownDescription": "https://fonts.google.com/specimen/Doppio+One", - "enum": [ - "Doppio One" - ] + "const": "Doppio One" }, { "title": "Dorsa", "markdownDescription": "https://fonts.google.com/specimen/Dorsa", - "enum": [ - "Dorsa" - ] + "const": "Dorsa" }, { "title": "Dosis", "markdownDescription": "https://fonts.google.com/specimen/Dosis", - "enum": [ - "Dosis" - ] + "const": "Dosis" }, { "title": "DotGothic16", "markdownDescription": "https://fonts.google.com/specimen/DotGothic16", - "enum": [ - "DotGothic16" - ] + "const": "DotGothic16" }, { "title": "Dr Sugiyama", "markdownDescription": "https://fonts.google.com/specimen/Dr+Sugiyama", - "enum": [ - "Dr Sugiyama" - ] + "const": "Dr Sugiyama" }, { "title": "Duru Sans", "markdownDescription": "https://fonts.google.com/specimen/Duru+Sans", - "enum": [ - "Duru Sans" - ] + "const": "Duru Sans" }, { "title": "DynaPuff", "markdownDescription": "https://fonts.google.com/specimen/DynaPuff", - "enum": [ - "DynaPuff" - ] + "const": "DynaPuff" }, { "title": "Dynalight", "markdownDescription": "https://fonts.google.com/specimen/Dynalight", - "enum": [ - "Dynalight" - ] + "const": "Dynalight" }, { "title": "EB Garamond", "markdownDescription": "https://fonts.google.com/specimen/EB+Garamond", - "enum": [ - "EB Garamond" - ] + "const": "EB Garamond" }, { "title": "Eagle Lake", "markdownDescription": "https://fonts.google.com/specimen/Eagle+Lake", - "enum": [ - "Eagle Lake" - ] + "const": "Eagle Lake" }, { "title": "East Sea Dokdo", "markdownDescription": "https://fonts.google.com/specimen/East+Sea+Dokdo", - "enum": [ - "East Sea Dokdo" - ] + "const": "East Sea Dokdo" }, { "title": "Eater", "markdownDescription": "https://fonts.google.com/specimen/Eater", - "enum": [ - "Eater" - ] + "const": "Eater" }, { "title": "Economica", "markdownDescription": "https://fonts.google.com/specimen/Economica", - "enum": [ - "Economica" - ] + "const": "Economica" }, { "title": "Eczar", "markdownDescription": "https://fonts.google.com/specimen/Eczar", - "enum": [ - "Eczar" - ] + "const": "Eczar" }, { "title": "Edu NSW ACT Foundation", "markdownDescription": "https://fonts.google.com/specimen/Edu+NSW+ACT+Foundation", - "enum": [ - "Edu NSW ACT Foundation" - ] + "const": "Edu NSW ACT Foundation" }, { "title": "Edu QLD Beginner", "markdownDescription": "https://fonts.google.com/specimen/Edu+QLD+Beginner", - "enum": [ - "Edu QLD Beginner" - ] + "const": "Edu QLD Beginner" }, { "title": "Edu SA Beginner", "markdownDescription": "https://fonts.google.com/specimen/Edu+SA+Beginner", - "enum": [ - "Edu SA Beginner" - ] + "const": "Edu SA Beginner" }, { "title": "Edu TAS Beginner", "markdownDescription": "https://fonts.google.com/specimen/Edu+TAS+Beginner", - "enum": [ - "Edu TAS Beginner" - ] + "const": "Edu TAS Beginner" }, { "title": "Edu VIC WA NT Beginner", "markdownDescription": "https://fonts.google.com/specimen/Edu+VIC+WA+NT+Beginner", - "enum": [ - "Edu VIC WA NT Beginner" - ] + "const": "Edu VIC WA NT Beginner" }, { "title": "El Messiri", "markdownDescription": "https://fonts.google.com/specimen/El+Messiri", - "enum": [ - "El Messiri" - ] + "const": "El Messiri" }, { "title": "Electrolize", "markdownDescription": "https://fonts.google.com/specimen/Electrolize", - "enum": [ - "Electrolize" - ] + "const": "Electrolize" }, { "title": "Elsie", "markdownDescription": "https://fonts.google.com/specimen/Elsie", - "enum": [ - "Elsie" - ] + "const": "Elsie" }, { "title": "Elsie Swash Caps", "markdownDescription": "https://fonts.google.com/specimen/Elsie+Swash+Caps", - "enum": [ - "Elsie Swash Caps" - ] + "const": "Elsie Swash Caps" }, { "title": "Emblema One", "markdownDescription": "https://fonts.google.com/specimen/Emblema+One", - "enum": [ - "Emblema One" - ] + "const": "Emblema One" }, { "title": "Emilys Candy", "markdownDescription": "https://fonts.google.com/specimen/Emilys+Candy", - "enum": [ - "Emilys Candy" - ] + "const": "Emilys Candy" }, { "title": "Encode Sans", "markdownDescription": "https://fonts.google.com/specimen/Encode+Sans", - "enum": [ - "Encode Sans" - ] + "const": "Encode Sans" }, { "title": "Encode Sans Condensed", "markdownDescription": "https://fonts.google.com/specimen/Encode+Sans+Condensed", - "enum": [ - "Encode Sans Condensed" - ] + "const": "Encode Sans Condensed" }, { "title": "Encode Sans Expanded", "markdownDescription": "https://fonts.google.com/specimen/Encode+Sans+Expanded", - "enum": [ - "Encode Sans Expanded" - ] + "const": "Encode Sans Expanded" }, { "title": "Encode Sans SC", "markdownDescription": "https://fonts.google.com/specimen/Encode+Sans+SC", - "enum": [ - "Encode Sans SC" - ] + "const": "Encode Sans SC" }, { "title": "Encode Sans Semi Condensed", "markdownDescription": "https://fonts.google.com/specimen/Encode+Sans+Semi+Condensed", - "enum": [ - "Encode Sans Semi Condensed" - ] + "const": "Encode Sans Semi Condensed" }, { "title": "Encode Sans Semi Expanded", "markdownDescription": "https://fonts.google.com/specimen/Encode+Sans+Semi+Expanded", - "enum": [ - "Encode Sans Semi Expanded" - ] + "const": "Encode Sans Semi Expanded" }, { "title": "Engagement", "markdownDescription": "https://fonts.google.com/specimen/Engagement", - "enum": [ - "Engagement" - ] + "const": "Engagement" }, { "title": "Englebert", "markdownDescription": "https://fonts.google.com/specimen/Englebert", - "enum": [ - "Englebert" - ] + "const": "Englebert" }, { "title": "Enriqueta", "markdownDescription": "https://fonts.google.com/specimen/Enriqueta", - "enum": [ - "Enriqueta" - ] + "const": "Enriqueta" }, { "title": "Ephesis", "markdownDescription": "https://fonts.google.com/specimen/Ephesis", - "enum": [ - "Ephesis" - ] + "const": "Ephesis" }, { "title": "Epilogue", "markdownDescription": "https://fonts.google.com/specimen/Epilogue", - "enum": [ - "Epilogue" - ] + "const": "Epilogue" }, { "title": "Erica One", "markdownDescription": "https://fonts.google.com/specimen/Erica+One", - "enum": [ - "Erica One" - ] + "const": "Erica One" }, { "title": "Esteban", "markdownDescription": "https://fonts.google.com/specimen/Esteban", - "enum": [ - "Esteban" - ] + "const": "Esteban" }, { "title": "Estonia", "markdownDescription": "https://fonts.google.com/specimen/Estonia", - "enum": [ - "Estonia" - ] + "const": "Estonia" }, { "title": "Euphoria Script", "markdownDescription": "https://fonts.google.com/specimen/Euphoria+Script", - "enum": [ - "Euphoria Script" - ] + "const": "Euphoria Script" }, { "title": "Ewert", "markdownDescription": "https://fonts.google.com/specimen/Ewert", - "enum": [ - "Ewert" - ] + "const": "Ewert" }, { "title": "Exo", "markdownDescription": "https://fonts.google.com/specimen/Exo", - "enum": [ - "Exo" - ] + "const": "Exo" }, { "title": "Exo 2", "markdownDescription": "https://fonts.google.com/specimen/Exo+2", - "enum": [ - "Exo 2" - ] + "const": "Exo 2" }, { "title": "Expletus Sans", "markdownDescription": "https://fonts.google.com/specimen/Expletus+Sans", - "enum": [ - "Expletus Sans" - ] + "const": "Expletus Sans" }, { "title": "Explora", "markdownDescription": "https://fonts.google.com/specimen/Explora", - "enum": [ - "Explora" - ] + "const": "Explora" }, { "title": "Fahkwang", "markdownDescription": "https://fonts.google.com/specimen/Fahkwang", - "enum": [ - "Fahkwang" - ] + "const": "Fahkwang" }, { "title": "Familjen Grotesk", "markdownDescription": "https://fonts.google.com/specimen/Familjen+Grotesk", - "enum": [ - "Familjen Grotesk" - ] + "const": "Familjen Grotesk" }, { "title": "Fanwood Text", "markdownDescription": "https://fonts.google.com/specimen/Fanwood+Text", - "enum": [ - "Fanwood Text" - ] + "const": "Fanwood Text" }, { "title": "Farro", "markdownDescription": "https://fonts.google.com/specimen/Farro", - "enum": [ - "Farro" - ] + "const": "Farro" }, { "title": "Farsan", "markdownDescription": "https://fonts.google.com/specimen/Farsan", - "enum": [ - "Farsan" - ] + "const": "Farsan" }, { "title": "Fascinate", "markdownDescription": "https://fonts.google.com/specimen/Fascinate", - "enum": [ - "Fascinate" - ] + "const": "Fascinate" }, { "title": "Fascinate Inline", "markdownDescription": "https://fonts.google.com/specimen/Fascinate+Inline", - "enum": [ - "Fascinate Inline" - ] + "const": "Fascinate Inline" }, { "title": "Faster One", "markdownDescription": "https://fonts.google.com/specimen/Faster+One", - "enum": [ - "Faster One" - ] + "const": "Faster One" }, { "title": "Fasthand", "markdownDescription": "https://fonts.google.com/specimen/Fasthand", - "enum": [ - "Fasthand" - ] + "const": "Fasthand" }, { "title": "Fauna One", "markdownDescription": "https://fonts.google.com/specimen/Fauna+One", - "enum": [ - "Fauna One" - ] + "const": "Fauna One" }, { "title": "Faustina", "markdownDescription": "https://fonts.google.com/specimen/Faustina", - "enum": [ - "Faustina" - ] + "const": "Faustina" }, { "title": "Federant", "markdownDescription": "https://fonts.google.com/specimen/Federant", - "enum": [ - "Federant" - ] + "const": "Federant" }, { "title": "Federo", "markdownDescription": "https://fonts.google.com/specimen/Federo", - "enum": [ - "Federo" - ] + "const": "Federo" }, { "title": "Felipa", "markdownDescription": "https://fonts.google.com/specimen/Felipa", - "enum": [ - "Felipa" - ] + "const": "Felipa" }, { "title": "Fenix", "markdownDescription": "https://fonts.google.com/specimen/Fenix", - "enum": [ - "Fenix" - ] + "const": "Fenix" }, { "title": "Festive", "markdownDescription": "https://fonts.google.com/specimen/Festive", - "enum": [ - "Festive" - ] + "const": "Festive" }, { "title": "Figtree", "markdownDescription": "https://fonts.google.com/specimen/Figtree", - "enum": [ - "Figtree" - ] + "const": "Figtree" }, { "title": "Finger Paint", "markdownDescription": "https://fonts.google.com/specimen/Finger+Paint", - "enum": [ - "Finger Paint" - ] + "const": "Finger Paint" }, { "title": "Finlandica", "markdownDescription": "https://fonts.google.com/specimen/Finlandica", - "enum": [ - "Finlandica" - ] + "const": "Finlandica" }, { "title": "Fira Code", "markdownDescription": "https://fonts.google.com/specimen/Fira+Code", - "enum": [ - "Fira Code" - ] + "const": "Fira Code" }, { "title": "Fira Mono", "markdownDescription": "https://fonts.google.com/specimen/Fira+Mono", - "enum": [ - "Fira Mono" - ] + "const": "Fira Mono" }, { "title": "Fira Sans", "markdownDescription": "https://fonts.google.com/specimen/Fira+Sans", - "enum": [ - "Fira Sans" - ] + "const": "Fira Sans" }, { "title": "Fira Sans Condensed", "markdownDescription": "https://fonts.google.com/specimen/Fira+Sans+Condensed", - "enum": [ - "Fira Sans Condensed" - ] + "const": "Fira Sans Condensed" }, { "title": "Fira Sans Extra Condensed", "markdownDescription": "https://fonts.google.com/specimen/Fira+Sans+Extra+Condensed", - "enum": [ - "Fira Sans Extra Condensed" - ] + "const": "Fira Sans Extra Condensed" }, { "title": "Fjalla One", "markdownDescription": "https://fonts.google.com/specimen/Fjalla+One", - "enum": [ - "Fjalla One" - ] + "const": "Fjalla One" }, { "title": "Fjord One", "markdownDescription": "https://fonts.google.com/specimen/Fjord+One", - "enum": [ - "Fjord One" - ] + "const": "Fjord One" }, { "title": "Flamenco", "markdownDescription": "https://fonts.google.com/specimen/Flamenco", - "enum": [ - "Flamenco" - ] + "const": "Flamenco" }, { "title": "Flavors", "markdownDescription": "https://fonts.google.com/specimen/Flavors", - "enum": [ - "Flavors" - ] + "const": "Flavors" }, { "title": "Fleur De Leah", "markdownDescription": "https://fonts.google.com/specimen/Fleur+De+Leah", - "enum": [ - "Fleur De Leah" - ] + "const": "Fleur De Leah" }, { "title": "Flow Block", "markdownDescription": "https://fonts.google.com/specimen/Flow+Block", - "enum": [ - "Flow Block" - ] + "const": "Flow Block" }, { "title": "Flow Circular", "markdownDescription": "https://fonts.google.com/specimen/Flow+Circular", - "enum": [ - "Flow Circular" - ] + "const": "Flow Circular" }, { "title": "Flow Rounded", "markdownDescription": "https://fonts.google.com/specimen/Flow+Rounded", - "enum": [ - "Flow Rounded" - ] + "const": "Flow Rounded" }, { "title": "Foldit", "markdownDescription": "https://fonts.google.com/specimen/Foldit", - "enum": [ - "Foldit" - ] + "const": "Foldit" }, { "title": "Fondamento", "markdownDescription": "https://fonts.google.com/specimen/Fondamento", - "enum": [ - "Fondamento" - ] + "const": "Fondamento" }, { "title": "Fontdiner Swanky", "markdownDescription": "https://fonts.google.com/specimen/Fontdiner+Swanky", - "enum": [ - "Fontdiner Swanky" - ] + "const": "Fontdiner Swanky" }, { "title": "Forum", "markdownDescription": "https://fonts.google.com/specimen/Forum", - "enum": [ - "Forum" - ] + "const": "Forum" }, { "title": "Fragment Mono", "markdownDescription": "https://fonts.google.com/specimen/Fragment+Mono", - "enum": [ - "Fragment Mono" - ] + "const": "Fragment Mono" }, { "title": "Francois One", "markdownDescription": "https://fonts.google.com/specimen/Francois+One", - "enum": [ - "Francois One" - ] + "const": "Francois One" }, { "title": "Frank Ruhl Libre", "markdownDescription": "https://fonts.google.com/specimen/Frank+Ruhl+Libre", - "enum": [ - "Frank Ruhl Libre" - ] + "const": "Frank Ruhl Libre" }, { "title": "Fraunces", "markdownDescription": "https://fonts.google.com/specimen/Fraunces", - "enum": [ - "Fraunces" - ] + "const": "Fraunces" }, { "title": "Freckle Face", "markdownDescription": "https://fonts.google.com/specimen/Freckle+Face", - "enum": [ - "Freckle Face" - ] + "const": "Freckle Face" }, { "title": "Fredericka the Great", "markdownDescription": "https://fonts.google.com/specimen/Fredericka+the+Great", - "enum": [ - "Fredericka the Great" - ] + "const": "Fredericka the Great" }, { "title": "Fredoka", "markdownDescription": "https://fonts.google.com/specimen/Fredoka", - "enum": [ - "Fredoka" - ] + "const": "Fredoka" }, { "title": "Freehand", "markdownDescription": "https://fonts.google.com/specimen/Freehand", - "enum": [ - "Freehand" - ] + "const": "Freehand" }, { "title": "Fresca", "markdownDescription": "https://fonts.google.com/specimen/Fresca", - "enum": [ - "Fresca" - ] + "const": "Fresca" }, { "title": "Frijole", "markdownDescription": "https://fonts.google.com/specimen/Frijole", - "enum": [ - "Frijole" - ] + "const": "Frijole" }, { "title": "Fruktur", "markdownDescription": "https://fonts.google.com/specimen/Fruktur", - "enum": [ - "Fruktur" - ] + "const": "Fruktur" }, { "title": "Fugaz One", "markdownDescription": "https://fonts.google.com/specimen/Fugaz+One", - "enum": [ - "Fugaz One" - ] + "const": "Fugaz One" }, { "title": "Fuggles", "markdownDescription": "https://fonts.google.com/specimen/Fuggles", - "enum": [ - "Fuggles" - ] + "const": "Fuggles" }, { "title": "Fuzzy Bubbles", "markdownDescription": "https://fonts.google.com/specimen/Fuzzy+Bubbles", - "enum": [ - "Fuzzy Bubbles" - ] + "const": "Fuzzy Bubbles" }, { "title": "GFS Didot", "markdownDescription": "https://fonts.google.com/specimen/GFS+Didot", - "enum": [ - "GFS Didot" - ] + "const": "GFS Didot" }, { "title": "GFS Neohellenic", "markdownDescription": "https://fonts.google.com/specimen/GFS+Neohellenic", - "enum": [ - "GFS Neohellenic" - ] + "const": "GFS Neohellenic" }, { "title": "Gabarito", "markdownDescription": "https://fonts.google.com/specimen/Gabarito", - "enum": [ - "Gabarito" - ] + "const": "Gabarito" }, { "title": "Gabriela", "markdownDescription": "https://fonts.google.com/specimen/Gabriela", - "enum": [ - "Gabriela" - ] + "const": "Gabriela" }, { "title": "Gaegu", "markdownDescription": "https://fonts.google.com/specimen/Gaegu", - "enum": [ - "Gaegu" - ] + "const": "Gaegu" }, { "title": "Gafata", "markdownDescription": "https://fonts.google.com/specimen/Gafata", - "enum": [ - "Gafata" - ] + "const": "Gafata" }, { "title": "Gajraj One", "markdownDescription": "https://fonts.google.com/specimen/Gajraj+One", - "enum": [ - "Gajraj One" - ] + "const": "Gajraj One" }, { "title": "Galada", "markdownDescription": "https://fonts.google.com/specimen/Galada", - "enum": [ - "Galada" - ] + "const": "Galada" }, { "title": "Galdeano", "markdownDescription": "https://fonts.google.com/specimen/Galdeano", - "enum": [ - "Galdeano" - ] + "const": "Galdeano" }, { "title": "Galindo", "markdownDescription": "https://fonts.google.com/specimen/Galindo", - "enum": [ - "Galindo" - ] + "const": "Galindo" }, { "title": "Gamja Flower", "markdownDescription": "https://fonts.google.com/specimen/Gamja+Flower", - "enum": [ - "Gamja Flower" - ] + "const": "Gamja Flower" }, { "title": "Gantari", "markdownDescription": "https://fonts.google.com/specimen/Gantari", - "enum": [ - "Gantari" - ] + "const": "Gantari" }, { "title": "Gasoek One", "markdownDescription": "https://fonts.google.com/specimen/Gasoek+One", - "enum": [ - "Gasoek One" - ] + "const": "Gasoek One" }, { "title": "Gayathri", "markdownDescription": "https://fonts.google.com/specimen/Gayathri", - "enum": [ - "Gayathri" - ] + "const": "Gayathri" }, { "title": "Gelasio", "markdownDescription": "https://fonts.google.com/specimen/Gelasio", - "enum": [ - "Gelasio" - ] + "const": "Gelasio" }, { "title": "Gemunu Libre", "markdownDescription": "https://fonts.google.com/specimen/Gemunu+Libre", - "enum": [ - "Gemunu Libre" - ] + "const": "Gemunu Libre" }, { "title": "Genos", "markdownDescription": "https://fonts.google.com/specimen/Genos", - "enum": [ - "Genos" - ] + "const": "Genos" }, { "title": "Gentium Book Plus", "markdownDescription": "https://fonts.google.com/specimen/Gentium+Book+Plus", - "enum": [ - "Gentium Book Plus" - ] + "const": "Gentium Book Plus" }, { "title": "Gentium Plus", "markdownDescription": "https://fonts.google.com/specimen/Gentium+Plus", - "enum": [ - "Gentium Plus" - ] + "const": "Gentium Plus" }, { "title": "Geo", "markdownDescription": "https://fonts.google.com/specimen/Geo", - "enum": [ - "Geo" - ] + "const": "Geo" }, { "title": "Geologica", "markdownDescription": "https://fonts.google.com/specimen/Geologica", - "enum": [ - "Geologica" - ] + "const": "Geologica" }, { "title": "Georama", "markdownDescription": "https://fonts.google.com/specimen/Georama", - "enum": [ - "Georama" - ] + "const": "Georama" }, { "title": "Geostar", "markdownDescription": "https://fonts.google.com/specimen/Geostar", - "enum": [ - "Geostar" - ] + "const": "Geostar" }, { "title": "Geostar Fill", "markdownDescription": "https://fonts.google.com/specimen/Geostar+Fill", - "enum": [ - "Geostar Fill" - ] + "const": "Geostar Fill" }, { "title": "Germania One", "markdownDescription": "https://fonts.google.com/specimen/Germania+One", - "enum": [ - "Germania One" - ] + "const": "Germania One" }, { "title": "Gideon Roman", "markdownDescription": "https://fonts.google.com/specimen/Gideon+Roman", - "enum": [ - "Gideon Roman" - ] + "const": "Gideon Roman" }, { "title": "Gidugu", "markdownDescription": "https://fonts.google.com/specimen/Gidugu", - "enum": [ - "Gidugu" - ] + "const": "Gidugu" }, { "title": "Gilda Display", "markdownDescription": "https://fonts.google.com/specimen/Gilda+Display", - "enum": [ - "Gilda Display" - ] + "const": "Gilda Display" }, { "title": "Girassol", "markdownDescription": "https://fonts.google.com/specimen/Girassol", - "enum": [ - "Girassol" - ] + "const": "Girassol" }, { "title": "Give You Glory", "markdownDescription": "https://fonts.google.com/specimen/Give+You+Glory", - "enum": [ - "Give You Glory" - ] + "const": "Give You Glory" }, { "title": "Glass Antiqua", "markdownDescription": "https://fonts.google.com/specimen/Glass+Antiqua", - "enum": [ - "Glass Antiqua" - ] + "const": "Glass Antiqua" }, { "title": "Glegoo", "markdownDescription": "https://fonts.google.com/specimen/Glegoo", - "enum": [ - "Glegoo" - ] + "const": "Glegoo" }, { "title": "Gloock", "markdownDescription": "https://fonts.google.com/specimen/Gloock", - "enum": [ - "Gloock" - ] + "const": "Gloock" }, { "title": "Gloria Hallelujah", "markdownDescription": "https://fonts.google.com/specimen/Gloria+Hallelujah", - "enum": [ - "Gloria Hallelujah" - ] + "const": "Gloria Hallelujah" }, { "title": "Glory", "markdownDescription": "https://fonts.google.com/specimen/Glory", - "enum": [ - "Glory" - ] + "const": "Glory" }, { "title": "Gluten", "markdownDescription": "https://fonts.google.com/specimen/Gluten", - "enum": [ - "Gluten" - ] + "const": "Gluten" }, { "title": "Goblin One", "markdownDescription": "https://fonts.google.com/specimen/Goblin+One", - "enum": [ - "Goblin One" - ] + "const": "Goblin One" }, { "title": "Gochi Hand", "markdownDescription": "https://fonts.google.com/specimen/Gochi+Hand", - "enum": [ - "Gochi Hand" - ] + "const": "Gochi Hand" }, { "title": "Goldman", "markdownDescription": "https://fonts.google.com/specimen/Goldman", - "enum": [ - "Goldman" - ] + "const": "Goldman" }, { "title": "Golos Text", "markdownDescription": "https://fonts.google.com/specimen/Golos+Text", - "enum": [ - "Golos Text" - ] + "const": "Golos Text" }, { "title": "Gorditas", "markdownDescription": "https://fonts.google.com/specimen/Gorditas", - "enum": [ - "Gorditas" - ] + "const": "Gorditas" }, { "title": "Gothic A1", "markdownDescription": "https://fonts.google.com/specimen/Gothic+A1", - "enum": [ - "Gothic A1" - ] + "const": "Gothic A1" }, { "title": "Gotu", "markdownDescription": "https://fonts.google.com/specimen/Gotu", - "enum": [ - "Gotu" - ] + "const": "Gotu" }, { "title": "Goudy Bookletter 1911", "markdownDescription": "https://fonts.google.com/specimen/Goudy+Bookletter+1911", - "enum": [ - "Goudy Bookletter 1911" - ] + "const": "Goudy Bookletter 1911" }, { "title": "Gowun Batang", "markdownDescription": "https://fonts.google.com/specimen/Gowun+Batang", - "enum": [ - "Gowun Batang" - ] + "const": "Gowun Batang" }, { "title": "Gowun Dodum", "markdownDescription": "https://fonts.google.com/specimen/Gowun+Dodum", - "enum": [ - "Gowun Dodum" - ] + "const": "Gowun Dodum" }, { "title": "Graduate", "markdownDescription": "https://fonts.google.com/specimen/Graduate", - "enum": [ - "Graduate" - ] + "const": "Graduate" }, { "title": "Grand Hotel", "markdownDescription": "https://fonts.google.com/specimen/Grand+Hotel", - "enum": [ - "Grand Hotel" - ] + "const": "Grand Hotel" }, { "title": "Grandiflora One", "markdownDescription": "https://fonts.google.com/specimen/Grandiflora+One", - "enum": [ - "Grandiflora One" - ] + "const": "Grandiflora One" }, { "title": "Grandstander", "markdownDescription": "https://fonts.google.com/specimen/Grandstander", - "enum": [ - "Grandstander" - ] + "const": "Grandstander" }, { "title": "Grape Nuts", "markdownDescription": "https://fonts.google.com/specimen/Grape+Nuts", - "enum": [ - "Grape Nuts" - ] + "const": "Grape Nuts" }, { "title": "Gravitas One", "markdownDescription": "https://fonts.google.com/specimen/Gravitas+One", - "enum": [ - "Gravitas One" - ] + "const": "Gravitas One" }, { "title": "Great Vibes", "markdownDescription": "https://fonts.google.com/specimen/Great+Vibes", - "enum": [ - "Great Vibes" - ] + "const": "Great Vibes" }, { "title": "Grechen Fuemen", "markdownDescription": "https://fonts.google.com/specimen/Grechen+Fuemen", - "enum": [ - "Grechen Fuemen" - ] + "const": "Grechen Fuemen" }, { "title": "Grenze", "markdownDescription": "https://fonts.google.com/specimen/Grenze", - "enum": [ - "Grenze" - ] + "const": "Grenze" }, { "title": "Grenze Gotisch", "markdownDescription": "https://fonts.google.com/specimen/Grenze+Gotisch", - "enum": [ - "Grenze Gotisch" - ] + "const": "Grenze Gotisch" }, { "title": "Grey Qo", "markdownDescription": "https://fonts.google.com/specimen/Grey+Qo", - "enum": [ - "Grey Qo" - ] + "const": "Grey Qo" }, { "title": "Griffy", "markdownDescription": "https://fonts.google.com/specimen/Griffy", - "enum": [ - "Griffy" - ] + "const": "Griffy" }, { "title": "Gruppo", "markdownDescription": "https://fonts.google.com/specimen/Gruppo", - "enum": [ - "Gruppo" - ] + "const": "Gruppo" }, { "title": "Gudea", "markdownDescription": "https://fonts.google.com/specimen/Gudea", - "enum": [ - "Gudea" - ] + "const": "Gudea" }, { "title": "Gugi", "markdownDescription": "https://fonts.google.com/specimen/Gugi", - "enum": [ - "Gugi" - ] + "const": "Gugi" }, { "title": "Gulzar", "markdownDescription": "https://fonts.google.com/specimen/Gulzar", - "enum": [ - "Gulzar" - ] + "const": "Gulzar" }, { "title": "Gupter", "markdownDescription": "https://fonts.google.com/specimen/Gupter", - "enum": [ - "Gupter" - ] + "const": "Gupter" }, { "title": "Gurajada", "markdownDescription": "https://fonts.google.com/specimen/Gurajada", - "enum": [ - "Gurajada" - ] + "const": "Gurajada" }, { "title": "Gwendolyn", "markdownDescription": "https://fonts.google.com/specimen/Gwendolyn", - "enum": [ - "Gwendolyn" - ] + "const": "Gwendolyn" }, { "title": "Habibi", "markdownDescription": "https://fonts.google.com/specimen/Habibi", - "enum": [ - "Habibi" - ] + "const": "Habibi" }, { "title": "Hachi Maru Pop", "markdownDescription": "https://fonts.google.com/specimen/Hachi+Maru+Pop", - "enum": [ - "Hachi Maru Pop" - ] + "const": "Hachi Maru Pop" }, { "title": "Hahmlet", "markdownDescription": "https://fonts.google.com/specimen/Hahmlet", - "enum": [ - "Hahmlet" - ] + "const": "Hahmlet" }, { "title": "Halant", "markdownDescription": "https://fonts.google.com/specimen/Halant", - "enum": [ - "Halant" - ] + "const": "Halant" }, { "title": "Hammersmith One", "markdownDescription": "https://fonts.google.com/specimen/Hammersmith+One", - "enum": [ - "Hammersmith One" - ] + "const": "Hammersmith One" }, { "title": "Hanalei", "markdownDescription": "https://fonts.google.com/specimen/Hanalei", - "enum": [ - "Hanalei" - ] + "const": "Hanalei" }, { "title": "Hanalei Fill", "markdownDescription": "https://fonts.google.com/specimen/Hanalei+Fill", - "enum": [ - "Hanalei Fill" - ] + "const": "Hanalei Fill" }, { "title": "Handjet", "markdownDescription": "https://fonts.google.com/specimen/Handjet", - "enum": [ - "Handjet" - ] + "const": "Handjet" }, { "title": "Handlee", "markdownDescription": "https://fonts.google.com/specimen/Handlee", - "enum": [ - "Handlee" - ] + "const": "Handlee" }, { "title": "Hanken Grotesk", "markdownDescription": "https://fonts.google.com/specimen/Hanken+Grotesk", - "enum": [ - "Hanken Grotesk" - ] + "const": "Hanken Grotesk" }, { "title": "Hanuman", "markdownDescription": "https://fonts.google.com/specimen/Hanuman", - "enum": [ - "Hanuman" - ] + "const": "Hanuman" }, { "title": "Happy Monkey", "markdownDescription": "https://fonts.google.com/specimen/Happy+Monkey", - "enum": [ - "Happy Monkey" - ] + "const": "Happy Monkey" }, { "title": "Harmattan", "markdownDescription": "https://fonts.google.com/specimen/Harmattan", - "enum": [ - "Harmattan" - ] + "const": "Harmattan" }, { "title": "Headland One", "markdownDescription": "https://fonts.google.com/specimen/Headland+One", - "enum": [ - "Headland One" - ] + "const": "Headland One" }, { "title": "Heebo", "markdownDescription": "https://fonts.google.com/specimen/Heebo", - "enum": [ - "Heebo" - ] + "const": "Heebo" }, { "title": "Henny Penny", "markdownDescription": "https://fonts.google.com/specimen/Henny+Penny", - "enum": [ - "Henny Penny" - ] + "const": "Henny Penny" }, { "title": "Hepta Slab", "markdownDescription": "https://fonts.google.com/specimen/Hepta+Slab", - "enum": [ - "Hepta Slab" - ] + "const": "Hepta Slab" }, { "title": "Herr Von Muellerhoff", "markdownDescription": "https://fonts.google.com/specimen/Herr+Von+Muellerhoff", - "enum": [ - "Herr Von Muellerhoff" - ] + "const": "Herr Von Muellerhoff" }, { "title": "Hi Melody", "markdownDescription": "https://fonts.google.com/specimen/Hi+Melody", - "enum": [ - "Hi Melody" - ] + "const": "Hi Melody" }, { "title": "Hina Mincho", "markdownDescription": "https://fonts.google.com/specimen/Hina+Mincho", - "enum": [ - "Hina Mincho" - ] + "const": "Hina Mincho" }, { "title": "Hind", "markdownDescription": "https://fonts.google.com/specimen/Hind", - "enum": [ - "Hind" - ] + "const": "Hind" }, { "title": "Hind Guntur", "markdownDescription": "https://fonts.google.com/specimen/Hind+Guntur", - "enum": [ - "Hind Guntur" - ] + "const": "Hind Guntur" }, { "title": "Hind Madurai", "markdownDescription": "https://fonts.google.com/specimen/Hind+Madurai", - "enum": [ - "Hind Madurai" - ] + "const": "Hind Madurai" }, { "title": "Hind Siliguri", "markdownDescription": "https://fonts.google.com/specimen/Hind+Siliguri", - "enum": [ - "Hind Siliguri" - ] + "const": "Hind Siliguri" }, { "title": "Hind Vadodara", "markdownDescription": "https://fonts.google.com/specimen/Hind+Vadodara", - "enum": [ - "Hind Vadodara" - ] + "const": "Hind Vadodara" }, { "title": "Holtwood One SC", "markdownDescription": "https://fonts.google.com/specimen/Holtwood+One+SC", - "enum": [ - "Holtwood One SC" - ] + "const": "Holtwood One SC" }, { "title": "Homemade Apple", "markdownDescription": "https://fonts.google.com/specimen/Homemade+Apple", - "enum": [ - "Homemade Apple" - ] + "const": "Homemade Apple" }, { "title": "Homenaje", "markdownDescription": "https://fonts.google.com/specimen/Homenaje", - "enum": [ - "Homenaje" - ] + "const": "Homenaje" }, { "title": "Hubballi", "markdownDescription": "https://fonts.google.com/specimen/Hubballi", - "enum": [ - "Hubballi" - ] + "const": "Hubballi" }, { "title": "Hurricane", "markdownDescription": "https://fonts.google.com/specimen/Hurricane", - "enum": [ - "Hurricane" - ] + "const": "Hurricane" }, { "title": "IBM Plex Mono", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Mono", - "enum": [ - "IBM Plex Mono" - ] + "const": "IBM Plex Mono" }, { "title": "IBM Plex Sans", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans", - "enum": [ - "IBM Plex Sans" - ] + "const": "IBM Plex Sans" }, { "title": "IBM Plex Sans Arabic", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans+Arabic", - "enum": [ - "IBM Plex Sans Arabic" - ] + "const": "IBM Plex Sans Arabic" }, { "title": "IBM Plex Sans Condensed", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans+Condensed", - "enum": [ - "IBM Plex Sans Condensed" - ] + "const": "IBM Plex Sans Condensed" }, { "title": "IBM Plex Sans Devanagari", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans+Devanagari", - "enum": [ - "IBM Plex Sans Devanagari" - ] + "const": "IBM Plex Sans Devanagari" }, { "title": "IBM Plex Sans Hebrew", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans+Hebrew", - "enum": [ - "IBM Plex Sans Hebrew" - ] + "const": "IBM Plex Sans Hebrew" }, { "title": "IBM Plex Sans JP", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans+JP", - "enum": [ - "IBM Plex Sans JP" - ] + "const": "IBM Plex Sans JP" }, { "title": "IBM Plex Sans KR", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans+KR", - "enum": [ - "IBM Plex Sans KR" - ] + "const": "IBM Plex Sans KR" }, { "title": "IBM Plex Sans Thai", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans+Thai", - "enum": [ - "IBM Plex Sans Thai" - ] + "const": "IBM Plex Sans Thai" }, { "title": "IBM Plex Sans Thai Looped", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Sans+Thai+Looped", - "enum": [ - "IBM Plex Sans Thai Looped" - ] + "const": "IBM Plex Sans Thai Looped" }, { "title": "IBM Plex Serif", "markdownDescription": "https://fonts.google.com/specimen/IBM+Plex+Serif", - "enum": [ - "IBM Plex Serif" - ] + "const": "IBM Plex Serif" }, { "title": "IM Fell DW Pica", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+DW+Pica", - "enum": [ - "IM Fell DW Pica" - ] + "const": "IM Fell DW Pica" }, { "title": "IM Fell DW Pica SC", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+DW+Pica+SC", - "enum": [ - "IM Fell DW Pica SC" - ] + "const": "IM Fell DW Pica SC" }, { "title": "IM Fell Double Pica", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+Double+Pica", - "enum": [ - "IM Fell Double Pica" - ] + "const": "IM Fell Double Pica" }, { "title": "IM Fell Double Pica SC", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+Double+Pica+SC", - "enum": [ - "IM Fell Double Pica SC" - ] + "const": "IM Fell Double Pica SC" }, { "title": "IM Fell English", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+English", - "enum": [ - "IM Fell English" - ] + "const": "IM Fell English" }, { "title": "IM Fell English SC", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+English+SC", - "enum": [ - "IM Fell English SC" - ] + "const": "IM Fell English SC" }, { "title": "IM Fell French Canon", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+French+Canon", - "enum": [ - "IM Fell French Canon" - ] + "const": "IM Fell French Canon" }, { "title": "IM Fell French Canon SC", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+French+Canon+SC", - "enum": [ - "IM Fell French Canon SC" - ] + "const": "IM Fell French Canon SC" }, { "title": "IM Fell Great Primer", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+Great+Primer", - "enum": [ - "IM Fell Great Primer" - ] + "const": "IM Fell Great Primer" }, { "title": "IM Fell Great Primer SC", "markdownDescription": "https://fonts.google.com/specimen/IM+Fell+Great+Primer+SC", - "enum": [ - "IM Fell Great Primer SC" - ] + "const": "IM Fell Great Primer SC" }, { "title": "Ibarra Real Nova", "markdownDescription": "https://fonts.google.com/specimen/Ibarra+Real+Nova", - "enum": [ - "Ibarra Real Nova" - ] + "const": "Ibarra Real Nova" }, { "title": "Iceberg", "markdownDescription": "https://fonts.google.com/specimen/Iceberg", - "enum": [ - "Iceberg" - ] + "const": "Iceberg" }, { "title": "Iceland", "markdownDescription": "https://fonts.google.com/specimen/Iceland", - "enum": [ - "Iceland" - ] + "const": "Iceland" }, { "title": "Imbue", "markdownDescription": "https://fonts.google.com/specimen/Imbue", - "enum": [ - "Imbue" - ] + "const": "Imbue" }, { "title": "Imperial Script", "markdownDescription": "https://fonts.google.com/specimen/Imperial+Script", - "enum": [ - "Imperial Script" - ] + "const": "Imperial Script" }, { "title": "Imprima", "markdownDescription": "https://fonts.google.com/specimen/Imprima", - "enum": [ - "Imprima" - ] + "const": "Imprima" }, { "title": "Inclusive Sans", "markdownDescription": "https://fonts.google.com/specimen/Inclusive+Sans", - "enum": [ - "Inclusive Sans" - ] + "const": "Inclusive Sans" }, { "title": "Inconsolata", "markdownDescription": "https://fonts.google.com/specimen/Inconsolata", - "enum": [ - "Inconsolata" - ] + "const": "Inconsolata" }, { "title": "Inder", "markdownDescription": "https://fonts.google.com/specimen/Inder", - "enum": [ - "Inder" - ] + "const": "Inder" }, { "title": "Indie Flower", "markdownDescription": "https://fonts.google.com/specimen/Indie+Flower", - "enum": [ - "Indie Flower" - ] + "const": "Indie Flower" }, { "title": "Ingrid Darling", "markdownDescription": "https://fonts.google.com/specimen/Ingrid+Darling", - "enum": [ - "Ingrid Darling" - ] + "const": "Ingrid Darling" }, { "title": "Inika", "markdownDescription": "https://fonts.google.com/specimen/Inika", - "enum": [ - "Inika" - ] + "const": "Inika" }, { "title": "Inknut Antiqua", "markdownDescription": "https://fonts.google.com/specimen/Inknut+Antiqua", - "enum": [ - "Inknut Antiqua" - ] + "const": "Inknut Antiqua" }, { "title": "Inria Sans", "markdownDescription": "https://fonts.google.com/specimen/Inria+Sans", - "enum": [ - "Inria Sans" - ] + "const": "Inria Sans" }, { "title": "Inria Serif", "markdownDescription": "https://fonts.google.com/specimen/Inria+Serif", - "enum": [ - "Inria Serif" - ] + "const": "Inria Serif" }, { "title": "Inspiration", "markdownDescription": "https://fonts.google.com/specimen/Inspiration", - "enum": [ - "Inspiration" - ] + "const": "Inspiration" }, { "title": "Instrument Sans", "markdownDescription": "https://fonts.google.com/specimen/Instrument+Sans", - "enum": [ - "Instrument Sans" - ] + "const": "Instrument Sans" }, { "title": "Instrument Serif", "markdownDescription": "https://fonts.google.com/specimen/Instrument+Serif", - "enum": [ - "Instrument Serif" - ] + "const": "Instrument Serif" }, { "title": "Inter", "markdownDescription": "https://fonts.google.com/specimen/Inter", - "enum": [ - "Inter" - ] + "const": "Inter" }, { "title": "Inter Tight", "markdownDescription": "https://fonts.google.com/specimen/Inter+Tight", - "enum": [ - "Inter Tight" - ] + "const": "Inter Tight" }, { "title": "Irish Grover", "markdownDescription": "https://fonts.google.com/specimen/Irish+Grover", - "enum": [ - "Irish Grover" - ] + "const": "Irish Grover" }, { "title": "Island Moments", "markdownDescription": "https://fonts.google.com/specimen/Island+Moments", - "enum": [ - "Island Moments" - ] + "const": "Island Moments" }, { "title": "Istok Web", "markdownDescription": "https://fonts.google.com/specimen/Istok+Web", - "enum": [ - "Istok Web" - ] + "const": "Istok Web" }, { "title": "Italiana", "markdownDescription": "https://fonts.google.com/specimen/Italiana", - "enum": [ - "Italiana" - ] + "const": "Italiana" }, { "title": "Italianno", "markdownDescription": "https://fonts.google.com/specimen/Italianno", - "enum": [ - "Italianno" - ] + "const": "Italianno" }, { "title": "Itim", "markdownDescription": "https://fonts.google.com/specimen/Itim", - "enum": [ - "Itim" - ] + "const": "Itim" }, { "title": "Jacques Francois", "markdownDescription": "https://fonts.google.com/specimen/Jacques+Francois", - "enum": [ - "Jacques Francois" - ] + "const": "Jacques Francois" }, { "title": "Jacques Francois Shadow", "markdownDescription": "https://fonts.google.com/specimen/Jacques+Francois+Shadow", - "enum": [ - "Jacques Francois Shadow" - ] + "const": "Jacques Francois Shadow" }, { "title": "Jaldi", "markdownDescription": "https://fonts.google.com/specimen/Jaldi", - "enum": [ - "Jaldi" - ] + "const": "Jaldi" }, { "title": "JetBrains Mono", "markdownDescription": "https://fonts.google.com/specimen/JetBrains+Mono", - "enum": [ - "JetBrains Mono" - ] + "const": "JetBrains Mono" }, { "title": "Jim Nightshade", "markdownDescription": "https://fonts.google.com/specimen/Jim+Nightshade", - "enum": [ - "Jim Nightshade" - ] + "const": "Jim Nightshade" }, { "title": "Joan", "markdownDescription": "https://fonts.google.com/specimen/Joan", - "enum": [ - "Joan" - ] + "const": "Joan" }, { "title": "Jockey One", "markdownDescription": "https://fonts.google.com/specimen/Jockey+One", - "enum": [ - "Jockey One" - ] + "const": "Jockey One" }, { "title": "Jolly Lodger", "markdownDescription": "https://fonts.google.com/specimen/Jolly+Lodger", - "enum": [ - "Jolly Lodger" - ] + "const": "Jolly Lodger" }, { "title": "Jomhuria", "markdownDescription": "https://fonts.google.com/specimen/Jomhuria", - "enum": [ - "Jomhuria" - ] + "const": "Jomhuria" }, { "title": "Jomolhari", "markdownDescription": "https://fonts.google.com/specimen/Jomolhari", - "enum": [ - "Jomolhari" - ] + "const": "Jomolhari" }, { "title": "Josefin Sans", "markdownDescription": "https://fonts.google.com/specimen/Josefin+Sans", - "enum": [ - "Josefin Sans" - ] + "const": "Josefin Sans" }, { "title": "Josefin Slab", "markdownDescription": "https://fonts.google.com/specimen/Josefin+Slab", - "enum": [ - "Josefin Slab" - ] + "const": "Josefin Slab" }, { "title": "Jost", "markdownDescription": "https://fonts.google.com/specimen/Jost", - "enum": [ - "Jost" - ] + "const": "Jost" }, { "title": "Joti One", "markdownDescription": "https://fonts.google.com/specimen/Joti+One", - "enum": [ - "Joti One" - ] + "const": "Joti One" }, { "title": "Jua", "markdownDescription": "https://fonts.google.com/specimen/Jua", - "enum": [ - "Jua" - ] + "const": "Jua" }, { "title": "Judson", "markdownDescription": "https://fonts.google.com/specimen/Judson", - "enum": [ - "Judson" - ] + "const": "Judson" }, { "title": "Julee", "markdownDescription": "https://fonts.google.com/specimen/Julee", - "enum": [ - "Julee" - ] + "const": "Julee" }, { "title": "Julius Sans One", "markdownDescription": "https://fonts.google.com/specimen/Julius+Sans+One", - "enum": [ - "Julius Sans One" - ] + "const": "Julius Sans One" }, { "title": "Junge", "markdownDescription": "https://fonts.google.com/specimen/Junge", - "enum": [ - "Junge" - ] + "const": "Junge" }, { "title": "Jura", "markdownDescription": "https://fonts.google.com/specimen/Jura", - "enum": [ - "Jura" - ] + "const": "Jura" }, { "title": "Just Another Hand", "markdownDescription": "https://fonts.google.com/specimen/Just+Another+Hand", - "enum": [ - "Just Another Hand" - ] + "const": "Just Another Hand" }, { "title": "Just Me Again Down Here", "markdownDescription": "https://fonts.google.com/specimen/Just+Me+Again+Down+Here", - "enum": [ - "Just Me Again Down Here" - ] + "const": "Just Me Again Down Here" }, { "title": "K2D", "markdownDescription": "https://fonts.google.com/specimen/K2D", - "enum": [ - "K2D" - ] + "const": "K2D" }, { "title": "Kablammo", "markdownDescription": "https://fonts.google.com/specimen/Kablammo", - "enum": [ - "Kablammo" - ] + "const": "Kablammo" }, { "title": "Kadwa", "markdownDescription": "https://fonts.google.com/specimen/Kadwa", - "enum": [ - "Kadwa" - ] + "const": "Kadwa" }, { "title": "Kaisei Decol", "markdownDescription": "https://fonts.google.com/specimen/Kaisei+Decol", - "enum": [ - "Kaisei Decol" - ] + "const": "Kaisei Decol" }, { "title": "Kaisei HarunoUmi", "markdownDescription": "https://fonts.google.com/specimen/Kaisei+HarunoUmi", - "enum": [ - "Kaisei HarunoUmi" - ] + "const": "Kaisei HarunoUmi" }, { "title": "Kaisei Opti", "markdownDescription": "https://fonts.google.com/specimen/Kaisei+Opti", - "enum": [ - "Kaisei Opti" - ] + "const": "Kaisei Opti" }, { "title": "Kaisei Tokumin", "markdownDescription": "https://fonts.google.com/specimen/Kaisei+Tokumin", - "enum": [ - "Kaisei Tokumin" - ] + "const": "Kaisei Tokumin" }, { "title": "Kalam", "markdownDescription": "https://fonts.google.com/specimen/Kalam", - "enum": [ - "Kalam" - ] + "const": "Kalam" }, { "title": "Kameron", "markdownDescription": "https://fonts.google.com/specimen/Kameron", - "enum": [ - "Kameron" - ] + "const": "Kameron" }, { "title": "Kanit", "markdownDescription": "https://fonts.google.com/specimen/Kanit", - "enum": [ - "Kanit" - ] + "const": "Kanit" }, { "title": "Kantumruy Pro", "markdownDescription": "https://fonts.google.com/specimen/Kantumruy+Pro", - "enum": [ - "Kantumruy Pro" - ] + "const": "Kantumruy Pro" }, { "title": "Karantina", "markdownDescription": "https://fonts.google.com/specimen/Karantina", - "enum": [ - "Karantina" - ] + "const": "Karantina" }, { "title": "Karla", "markdownDescription": "https://fonts.google.com/specimen/Karla", - "enum": [ - "Karla" - ] + "const": "Karla" }, { "title": "Karma", "markdownDescription": "https://fonts.google.com/specimen/Karma", - "enum": [ - "Karma" - ] + "const": "Karma" }, { "title": "Katibeh", "markdownDescription": "https://fonts.google.com/specimen/Katibeh", - "enum": [ - "Katibeh" - ] + "const": "Katibeh" }, { "title": "Kaushan Script", "markdownDescription": "https://fonts.google.com/specimen/Kaushan+Script", - "enum": [ - "Kaushan Script" - ] + "const": "Kaushan Script" }, { "title": "Kavivanar", "markdownDescription": "https://fonts.google.com/specimen/Kavivanar", - "enum": [ - "Kavivanar" - ] + "const": "Kavivanar" }, { "title": "Kavoon", "markdownDescription": "https://fonts.google.com/specimen/Kavoon", - "enum": [ - "Kavoon" - ] + "const": "Kavoon" }, { "title": "Kdam Thmor Pro", "markdownDescription": "https://fonts.google.com/specimen/Kdam+Thmor+Pro", - "enum": [ - "Kdam Thmor Pro" - ] + "const": "Kdam Thmor Pro" }, { "title": "Keania One", "markdownDescription": "https://fonts.google.com/specimen/Keania+One", - "enum": [ - "Keania One" - ] + "const": "Keania One" }, { "title": "Kelly Slab", "markdownDescription": "https://fonts.google.com/specimen/Kelly+Slab", - "enum": [ - "Kelly Slab" - ] + "const": "Kelly Slab" }, { "title": "Kenia", "markdownDescription": "https://fonts.google.com/specimen/Kenia", - "enum": [ - "Kenia" - ] + "const": "Kenia" }, { "title": "Khand", "markdownDescription": "https://fonts.google.com/specimen/Khand", - "enum": [ - "Khand" - ] + "const": "Khand" }, { "title": "Khmer", "markdownDescription": "https://fonts.google.com/specimen/Khmer", - "enum": [ - "Khmer" - ] + "const": "Khmer" }, { "title": "Khula", "markdownDescription": "https://fonts.google.com/specimen/Khula", - "enum": [ - "Khula" - ] + "const": "Khula" }, { "title": "Kings", "markdownDescription": "https://fonts.google.com/specimen/Kings", - "enum": [ - "Kings" - ] + "const": "Kings" }, { "title": "Kirang Haerang", "markdownDescription": "https://fonts.google.com/specimen/Kirang+Haerang", - "enum": [ - "Kirang Haerang" - ] + "const": "Kirang Haerang" }, { "title": "Kite One", "markdownDescription": "https://fonts.google.com/specimen/Kite+One", - "enum": [ - "Kite One" - ] + "const": "Kite One" }, { "title": "Kiwi Maru", "markdownDescription": "https://fonts.google.com/specimen/Kiwi+Maru", - "enum": [ - "Kiwi Maru" - ] + "const": "Kiwi Maru" }, { "title": "Klee One", "markdownDescription": "https://fonts.google.com/specimen/Klee+One", - "enum": [ - "Klee One" - ] + "const": "Klee One" }, { "title": "Knewave", "markdownDescription": "https://fonts.google.com/specimen/Knewave", - "enum": [ - "Knewave" - ] + "const": "Knewave" }, { "title": "KoHo", "markdownDescription": "https://fonts.google.com/specimen/KoHo", - "enum": [ - "KoHo" - ] + "const": "KoHo" }, { "title": "Kodchasan", "markdownDescription": "https://fonts.google.com/specimen/Kodchasan", - "enum": [ - "Kodchasan" - ] + "const": "Kodchasan" }, { "title": "Koh Santepheap", "markdownDescription": "https://fonts.google.com/specimen/Koh+Santepheap", - "enum": [ - "Koh Santepheap" - ] + "const": "Koh Santepheap" }, { "title": "Kolker Brush", "markdownDescription": "https://fonts.google.com/specimen/Kolker+Brush", - "enum": [ - "Kolker Brush" - ] + "const": "Kolker Brush" }, { "title": "Konkhmer Sleokchher", "markdownDescription": "https://fonts.google.com/specimen/Konkhmer+Sleokchher", - "enum": [ - "Konkhmer Sleokchher" - ] + "const": "Konkhmer Sleokchher" }, { "title": "Kosugi", "markdownDescription": "https://fonts.google.com/specimen/Kosugi", - "enum": [ - "Kosugi" - ] + "const": "Kosugi" }, { "title": "Kosugi Maru", "markdownDescription": "https://fonts.google.com/specimen/Kosugi+Maru", - "enum": [ - "Kosugi Maru" - ] + "const": "Kosugi Maru" }, { "title": "Kotta One", "markdownDescription": "https://fonts.google.com/specimen/Kotta+One", - "enum": [ - "Kotta One" - ] + "const": "Kotta One" }, { "title": "Koulen", "markdownDescription": "https://fonts.google.com/specimen/Koulen", - "enum": [ - "Koulen" - ] + "const": "Koulen" }, { "title": "Kranky", "markdownDescription": "https://fonts.google.com/specimen/Kranky", - "enum": [ - "Kranky" - ] + "const": "Kranky" }, { "title": "Kreon", "markdownDescription": "https://fonts.google.com/specimen/Kreon", - "enum": [ - "Kreon" - ] + "const": "Kreon" }, { "title": "Kristi", "markdownDescription": "https://fonts.google.com/specimen/Kristi", - "enum": [ - "Kristi" - ] + "const": "Kristi" }, { "title": "Krona One", "markdownDescription": "https://fonts.google.com/specimen/Krona+One", - "enum": [ - "Krona One" - ] + "const": "Krona One" }, { "title": "Krub", "markdownDescription": "https://fonts.google.com/specimen/Krub", - "enum": [ - "Krub" - ] + "const": "Krub" }, { "title": "Kufam", "markdownDescription": "https://fonts.google.com/specimen/Kufam", - "enum": [ - "Kufam" - ] + "const": "Kufam" }, { "title": "Kulim Park", "markdownDescription": "https://fonts.google.com/specimen/Kulim+Park", - "enum": [ - "Kulim Park" - ] + "const": "Kulim Park" }, { "title": "Kumar One", "markdownDescription": "https://fonts.google.com/specimen/Kumar+One", - "enum": [ - "Kumar One" - ] + "const": "Kumar One" }, { "title": "Kumar One Outline", "markdownDescription": "https://fonts.google.com/specimen/Kumar+One+Outline", - "enum": [ - "Kumar One Outline" - ] + "const": "Kumar One Outline" }, { "title": "Kumbh Sans", "markdownDescription": "https://fonts.google.com/specimen/Kumbh+Sans", - "enum": [ - "Kumbh Sans" - ] + "const": "Kumbh Sans" }, { "title": "Kurale", "markdownDescription": "https://fonts.google.com/specimen/Kurale", - "enum": [ - "Kurale" - ] + "const": "Kurale" }, { "title": "La Belle Aurore", "markdownDescription": "https://fonts.google.com/specimen/La+Belle+Aurore", - "enum": [ - "La Belle Aurore" - ] + "const": "La Belle Aurore" }, { "title": "Labrada", "markdownDescription": "https://fonts.google.com/specimen/Labrada", - "enum": [ - "Labrada" - ] + "const": "Labrada" }, { "title": "Lacquer", "markdownDescription": "https://fonts.google.com/specimen/Lacquer", - "enum": [ - "Lacquer" - ] + "const": "Lacquer" }, { "title": "Laila", "markdownDescription": "https://fonts.google.com/specimen/Laila", - "enum": [ - "Laila" - ] + "const": "Laila" }, { "title": "Lakki Reddy", "markdownDescription": "https://fonts.google.com/specimen/Lakki+Reddy", - "enum": [ - "Lakki Reddy" - ] + "const": "Lakki Reddy" }, { "title": "Lalezar", "markdownDescription": "https://fonts.google.com/specimen/Lalezar", - "enum": [ - "Lalezar" - ] + "const": "Lalezar" }, { "title": "Lancelot", "markdownDescription": "https://fonts.google.com/specimen/Lancelot", - "enum": [ - "Lancelot" - ] + "const": "Lancelot" }, { "title": "Langar", "markdownDescription": "https://fonts.google.com/specimen/Langar", - "enum": [ - "Langar" - ] + "const": "Langar" }, { "title": "Lateef", "markdownDescription": "https://fonts.google.com/specimen/Lateef", - "enum": [ - "Lateef" - ] + "const": "Lateef" }, { "title": "Lato", "markdownDescription": "https://fonts.google.com/specimen/Lato", - "enum": [ - "Lato" - ] + "const": "Lato" }, { "title": "Lavishly Yours", "markdownDescription": "https://fonts.google.com/specimen/Lavishly+Yours", - "enum": [ - "Lavishly Yours" - ] + "const": "Lavishly Yours" }, { "title": "League Gothic", "markdownDescription": "https://fonts.google.com/specimen/League+Gothic", - "enum": [ - "League Gothic" - ] + "const": "League Gothic" }, { "title": "League Script", "markdownDescription": "https://fonts.google.com/specimen/League+Script", - "enum": [ - "League Script" - ] + "const": "League Script" }, { "title": "League Spartan", "markdownDescription": "https://fonts.google.com/specimen/League+Spartan", - "enum": [ - "League Spartan" - ] + "const": "League Spartan" }, { "title": "Leckerli One", "markdownDescription": "https://fonts.google.com/specimen/Leckerli+One", - "enum": [ - "Leckerli One" - ] + "const": "Leckerli One" }, { "title": "Ledger", "markdownDescription": "https://fonts.google.com/specimen/Ledger", - "enum": [ - "Ledger" - ] + "const": "Ledger" }, { "title": "Lekton", "markdownDescription": "https://fonts.google.com/specimen/Lekton", - "enum": [ - "Lekton" - ] + "const": "Lekton" }, { "title": "Lemon", "markdownDescription": "https://fonts.google.com/specimen/Lemon", - "enum": [ - "Lemon" - ] + "const": "Lemon" }, { "title": "Lemonada", "markdownDescription": "https://fonts.google.com/specimen/Lemonada", - "enum": [ - "Lemonada" - ] + "const": "Lemonada" }, { "title": "Lexend", "markdownDescription": "https://fonts.google.com/specimen/Lexend", - "enum": [ - "Lexend" - ] + "const": "Lexend" }, { "title": "Lexend Deca", "markdownDescription": "https://fonts.google.com/specimen/Lexend+Deca", - "enum": [ - "Lexend Deca" - ] + "const": "Lexend Deca" }, { "title": "Lexend Exa", "markdownDescription": "https://fonts.google.com/specimen/Lexend+Exa", - "enum": [ - "Lexend Exa" - ] + "const": "Lexend Exa" }, { "title": "Lexend Giga", "markdownDescription": "https://fonts.google.com/specimen/Lexend+Giga", - "enum": [ - "Lexend Giga" - ] + "const": "Lexend Giga" }, { "title": "Lexend Mega", "markdownDescription": "https://fonts.google.com/specimen/Lexend+Mega", - "enum": [ - "Lexend Mega" - ] + "const": "Lexend Mega" }, { "title": "Lexend Peta", "markdownDescription": "https://fonts.google.com/specimen/Lexend+Peta", - "enum": [ - "Lexend Peta" - ] + "const": "Lexend Peta" }, { "title": "Lexend Tera", "markdownDescription": "https://fonts.google.com/specimen/Lexend+Tera", - "enum": [ - "Lexend Tera" - ] + "const": "Lexend Tera" }, { "title": "Lexend Zetta", "markdownDescription": "https://fonts.google.com/specimen/Lexend+Zetta", - "enum": [ - "Lexend Zetta" - ] + "const": "Lexend Zetta" }, { "title": "Libre Barcode 128", "markdownDescription": "https://fonts.google.com/specimen/Libre+Barcode+128", - "enum": [ - "Libre Barcode 128" - ] + "const": "Libre Barcode 128" }, { "title": "Libre Barcode 128 Text", "markdownDescription": "https://fonts.google.com/specimen/Libre+Barcode+128+Text", - "enum": [ - "Libre Barcode 128 Text" - ] + "const": "Libre Barcode 128 Text" }, { "title": "Libre Barcode 39", "markdownDescription": "https://fonts.google.com/specimen/Libre+Barcode+39", - "enum": [ - "Libre Barcode 39" - ] + "const": "Libre Barcode 39" }, { "title": "Libre Barcode 39 Extended", "markdownDescription": "https://fonts.google.com/specimen/Libre+Barcode+39+Extended", - "enum": [ - "Libre Barcode 39 Extended" - ] + "const": "Libre Barcode 39 Extended" }, { "title": "Libre Barcode 39 Extended Text", "markdownDescription": "https://fonts.google.com/specimen/Libre+Barcode+39+Extended+Text", - "enum": [ - "Libre Barcode 39 Extended Text" - ] + "const": "Libre Barcode 39 Extended Text" }, { "title": "Libre Barcode 39 Text", "markdownDescription": "https://fonts.google.com/specimen/Libre+Barcode+39+Text", - "enum": [ - "Libre Barcode 39 Text" - ] + "const": "Libre Barcode 39 Text" }, { "title": "Libre Barcode EAN13 Text", "markdownDescription": "https://fonts.google.com/specimen/Libre+Barcode+EAN13+Text", - "enum": [ - "Libre Barcode EAN13 Text" - ] + "const": "Libre Barcode EAN13 Text" }, { "title": "Libre Baskerville", "markdownDescription": "https://fonts.google.com/specimen/Libre+Baskerville", - "enum": [ - "Libre Baskerville" - ] + "const": "Libre Baskerville" }, { "title": "Libre Bodoni", "markdownDescription": "https://fonts.google.com/specimen/Libre+Bodoni", - "enum": [ - "Libre Bodoni" - ] + "const": "Libre Bodoni" }, { "title": "Libre Caslon Display", "markdownDescription": "https://fonts.google.com/specimen/Libre+Caslon+Display", - "enum": [ - "Libre Caslon Display" - ] + "const": "Libre Caslon Display" }, { "title": "Libre Caslon Text", "markdownDescription": "https://fonts.google.com/specimen/Libre+Caslon+Text", - "enum": [ - "Libre Caslon Text" - ] + "const": "Libre Caslon Text" }, { "title": "Libre Franklin", "markdownDescription": "https://fonts.google.com/specimen/Libre+Franklin", - "enum": [ - "Libre Franklin" - ] + "const": "Libre Franklin" }, { "title": "Licorice", "markdownDescription": "https://fonts.google.com/specimen/Licorice", - "enum": [ - "Licorice" - ] + "const": "Licorice" }, { "title": "Life Savers", "markdownDescription": "https://fonts.google.com/specimen/Life+Savers", - "enum": [ - "Life Savers" - ] + "const": "Life Savers" }, { "title": "Lilita One", "markdownDescription": "https://fonts.google.com/specimen/Lilita+One", - "enum": [ - "Lilita One" - ] + "const": "Lilita One" }, { "title": "Lily Script One", "markdownDescription": "https://fonts.google.com/specimen/Lily+Script+One", - "enum": [ - "Lily Script One" - ] + "const": "Lily Script One" }, { "title": "Limelight", "markdownDescription": "https://fonts.google.com/specimen/Limelight", - "enum": [ - "Limelight" - ] + "const": "Limelight" }, { "title": "Linden Hill", "markdownDescription": "https://fonts.google.com/specimen/Linden+Hill", - "enum": [ - "Linden Hill" - ] + "const": "Linden Hill" }, { "title": "Lisu Bosa", "markdownDescription": "https://fonts.google.com/specimen/Lisu+Bosa", - "enum": [ - "Lisu Bosa" - ] + "const": "Lisu Bosa" }, { "title": "Literata", "markdownDescription": "https://fonts.google.com/specimen/Literata", - "enum": [ - "Literata" - ] + "const": "Literata" }, { "title": "Liu Jian Mao Cao", "markdownDescription": "https://fonts.google.com/specimen/Liu+Jian+Mao+Cao", - "enum": [ - "Liu Jian Mao Cao" - ] + "const": "Liu Jian Mao Cao" }, { "title": "Livvic", "markdownDescription": "https://fonts.google.com/specimen/Livvic", - "enum": [ - "Livvic" - ] + "const": "Livvic" }, { "title": "Lobster", "markdownDescription": "https://fonts.google.com/specimen/Lobster", - "enum": [ - "Lobster" - ] + "const": "Lobster" }, { "title": "Lobster Two", "markdownDescription": "https://fonts.google.com/specimen/Lobster+Two", - "enum": [ - "Lobster Two" - ] + "const": "Lobster Two" }, { "title": "Londrina Outline", "markdownDescription": "https://fonts.google.com/specimen/Londrina+Outline", - "enum": [ - "Londrina Outline" - ] + "const": "Londrina Outline" }, { "title": "Londrina Shadow", "markdownDescription": "https://fonts.google.com/specimen/Londrina+Shadow", - "enum": [ - "Londrina Shadow" - ] + "const": "Londrina Shadow" }, { "title": "Londrina Sketch", "markdownDescription": "https://fonts.google.com/specimen/Londrina+Sketch", - "enum": [ - "Londrina Sketch" - ] + "const": "Londrina Sketch" }, { "title": "Londrina Solid", "markdownDescription": "https://fonts.google.com/specimen/Londrina+Solid", - "enum": [ - "Londrina Solid" - ] + "const": "Londrina Solid" }, { "title": "Long Cang", "markdownDescription": "https://fonts.google.com/specimen/Long+Cang", - "enum": [ - "Long Cang" - ] + "const": "Long Cang" }, { "title": "Lora", "markdownDescription": "https://fonts.google.com/specimen/Lora", - "enum": [ - "Lora" - ] + "const": "Lora" }, { "title": "Love Light", "markdownDescription": "https://fonts.google.com/specimen/Love+Light", - "enum": [ - "Love Light" - ] + "const": "Love Light" }, { "title": "Love Ya Like A Sister", "markdownDescription": "https://fonts.google.com/specimen/Love+Ya+Like+A+Sister", - "enum": [ - "Love Ya Like A Sister" - ] + "const": "Love Ya Like A Sister" }, { "title": "Loved by the King", "markdownDescription": "https://fonts.google.com/specimen/Loved+by+the+King", - "enum": [ - "Loved by the King" - ] + "const": "Loved by the King" }, { "title": "Lovers Quarrel", "markdownDescription": "https://fonts.google.com/specimen/Lovers+Quarrel", - "enum": [ - "Lovers Quarrel" - ] + "const": "Lovers Quarrel" }, { "title": "Luckiest Guy", "markdownDescription": "https://fonts.google.com/specimen/Luckiest+Guy", - "enum": [ - "Luckiest Guy" - ] + "const": "Luckiest Guy" }, { "title": "Lugrasimo", "markdownDescription": "https://fonts.google.com/specimen/Lugrasimo", - "enum": [ - "Lugrasimo" - ] + "const": "Lugrasimo" }, { "title": "Lumanosimo", "markdownDescription": "https://fonts.google.com/specimen/Lumanosimo", - "enum": [ - "Lumanosimo" - ] + "const": "Lumanosimo" }, { "title": "Lunasima", "markdownDescription": "https://fonts.google.com/specimen/Lunasima", - "enum": [ - "Lunasima" - ] + "const": "Lunasima" }, { "title": "Lusitana", "markdownDescription": "https://fonts.google.com/specimen/Lusitana", - "enum": [ - "Lusitana" - ] + "const": "Lusitana" }, { "title": "Lustria", "markdownDescription": "https://fonts.google.com/specimen/Lustria", - "enum": [ - "Lustria" - ] + "const": "Lustria" }, { "title": "Luxurious Roman", "markdownDescription": "https://fonts.google.com/specimen/Luxurious+Roman", - "enum": [ - "Luxurious Roman" - ] + "const": "Luxurious Roman" }, { "title": "Luxurious Script", "markdownDescription": "https://fonts.google.com/specimen/Luxurious+Script", - "enum": [ - "Luxurious Script" - ] + "const": "Luxurious Script" }, { "title": "M PLUS 1", "markdownDescription": "https://fonts.google.com/specimen/M+PLUS+1", - "enum": [ - "M PLUS 1" - ] + "const": "M PLUS 1" }, { "title": "M PLUS 1 Code", "markdownDescription": "https://fonts.google.com/specimen/M+PLUS+1+Code", - "enum": [ - "M PLUS 1 Code" - ] + "const": "M PLUS 1 Code" }, { "title": "M PLUS 1p", "markdownDescription": "https://fonts.google.com/specimen/M+PLUS+1p", - "enum": [ - "M PLUS 1p" - ] + "const": "M PLUS 1p" }, { "title": "M PLUS 2", "markdownDescription": "https://fonts.google.com/specimen/M+PLUS+2", - "enum": [ - "M PLUS 2" - ] + "const": "M PLUS 2" }, { "title": "M PLUS Code Latin", "markdownDescription": "https://fonts.google.com/specimen/M+PLUS+Code+Latin", - "enum": [ - "M PLUS Code Latin" - ] + "const": "M PLUS Code Latin" }, { "title": "M PLUS Rounded 1c", "markdownDescription": "https://fonts.google.com/specimen/M+PLUS+Rounded+1c", - "enum": [ - "M PLUS Rounded 1c" - ] + "const": "M PLUS Rounded 1c" }, { "title": "Ma Shan Zheng", "markdownDescription": "https://fonts.google.com/specimen/Ma+Shan+Zheng", - "enum": [ - "Ma Shan Zheng" - ] + "const": "Ma Shan Zheng" }, { "title": "Macondo", "markdownDescription": "https://fonts.google.com/specimen/Macondo", - "enum": [ - "Macondo" - ] + "const": "Macondo" }, { "title": "Macondo Swash Caps", "markdownDescription": "https://fonts.google.com/specimen/Macondo+Swash+Caps", - "enum": [ - "Macondo Swash Caps" - ] + "const": "Macondo Swash Caps" }, { "title": "Mada", "markdownDescription": "https://fonts.google.com/specimen/Mada", - "enum": [ - "Mada" - ] + "const": "Mada" }, { "title": "Magra", "markdownDescription": "https://fonts.google.com/specimen/Magra", - "enum": [ - "Magra" - ] + "const": "Magra" }, { "title": "Maiden Orange", "markdownDescription": "https://fonts.google.com/specimen/Maiden+Orange", - "enum": [ - "Maiden Orange" - ] + "const": "Maiden Orange" }, { "title": "Maitree", "markdownDescription": "https://fonts.google.com/specimen/Maitree", - "enum": [ - "Maitree" - ] + "const": "Maitree" }, { "title": "Major Mono Display", "markdownDescription": "https://fonts.google.com/specimen/Major+Mono+Display", - "enum": [ - "Major Mono Display" - ] + "const": "Major Mono Display" }, { "title": "Mako", "markdownDescription": "https://fonts.google.com/specimen/Mako", - "enum": [ - "Mako" - ] + "const": "Mako" }, { "title": "Mali", "markdownDescription": "https://fonts.google.com/specimen/Mali", - "enum": [ - "Mali" - ] + "const": "Mali" }, { "title": "Mallanna", "markdownDescription": "https://fonts.google.com/specimen/Mallanna", - "enum": [ - "Mallanna" - ] + "const": "Mallanna" }, { "title": "Mandali", "markdownDescription": "https://fonts.google.com/specimen/Mandali", - "enum": [ - "Mandali" - ] + "const": "Mandali" }, { "title": "Manjari", "markdownDescription": "https://fonts.google.com/specimen/Manjari", - "enum": [ - "Manjari" - ] + "const": "Manjari" }, { "title": "Manrope", "markdownDescription": "https://fonts.google.com/specimen/Manrope", - "enum": [ - "Manrope" - ] + "const": "Manrope" }, { "title": "Mansalva", "markdownDescription": "https://fonts.google.com/specimen/Mansalva", - "enum": [ - "Mansalva" - ] + "const": "Mansalva" }, { "title": "Manuale", "markdownDescription": "https://fonts.google.com/specimen/Manuale", - "enum": [ - "Manuale" - ] + "const": "Manuale" }, { "title": "Marcellus", "markdownDescription": "https://fonts.google.com/specimen/Marcellus", - "enum": [ - "Marcellus" - ] + "const": "Marcellus" }, { "title": "Marcellus SC", "markdownDescription": "https://fonts.google.com/specimen/Marcellus+SC", - "enum": [ - "Marcellus SC" - ] + "const": "Marcellus SC" }, { "title": "Marck Script", "markdownDescription": "https://fonts.google.com/specimen/Marck+Script", - "enum": [ - "Marck Script" - ] + "const": "Marck Script" }, { "title": "Margarine", "markdownDescription": "https://fonts.google.com/specimen/Margarine", - "enum": [ - "Margarine" - ] + "const": "Margarine" }, { "title": "Marhey", "markdownDescription": "https://fonts.google.com/specimen/Marhey", - "enum": [ - "Marhey" - ] + "const": "Marhey" }, { "title": "Markazi Text", "markdownDescription": "https://fonts.google.com/specimen/Markazi+Text", - "enum": [ - "Markazi Text" - ] + "const": "Markazi Text" }, { "title": "Marko One", "markdownDescription": "https://fonts.google.com/specimen/Marko+One", - "enum": [ - "Marko One" - ] + "const": "Marko One" }, { "title": "Marmelad", "markdownDescription": "https://fonts.google.com/specimen/Marmelad", - "enum": [ - "Marmelad" - ] + "const": "Marmelad" }, { "title": "Martel", "markdownDescription": "https://fonts.google.com/specimen/Martel", - "enum": [ - "Martel" - ] + "const": "Martel" }, { "title": "Martel Sans", "markdownDescription": "https://fonts.google.com/specimen/Martel+Sans", - "enum": [ - "Martel Sans" - ] + "const": "Martel Sans" }, { "title": "Martian Mono", "markdownDescription": "https://fonts.google.com/specimen/Martian+Mono", - "enum": [ - "Martian Mono" - ] + "const": "Martian Mono" }, { "title": "Marvel", "markdownDescription": "https://fonts.google.com/specimen/Marvel", - "enum": [ - "Marvel" - ] + "const": "Marvel" }, { "title": "Mate", "markdownDescription": "https://fonts.google.com/specimen/Mate", - "enum": [ - "Mate" - ] + "const": "Mate" }, { "title": "Mate SC", "markdownDescription": "https://fonts.google.com/specimen/Mate+SC", - "enum": [ - "Mate SC" - ] + "const": "Mate SC" }, { "title": "Material Icons", "markdownDescription": "https://fonts.google.com/specimen/Material+Icons", - "enum": [ - "Material Icons" - ] + "const": "Material Icons" }, { "title": "Material Icons Outlined", "markdownDescription": "https://fonts.google.com/specimen/Material+Icons+Outlined", - "enum": [ - "Material Icons Outlined" - ] + "const": "Material Icons Outlined" }, { "title": "Material Icons Round", "markdownDescription": "https://fonts.google.com/specimen/Material+Icons+Round", - "enum": [ - "Material Icons Round" - ] + "const": "Material Icons Round" }, { "title": "Material Icons Sharp", "markdownDescription": "https://fonts.google.com/specimen/Material+Icons+Sharp", - "enum": [ - "Material Icons Sharp" - ] + "const": "Material Icons Sharp" }, { "title": "Material Icons Two Tone", "markdownDescription": "https://fonts.google.com/specimen/Material+Icons+Two+Tone", - "enum": [ - "Material Icons Two Tone" - ] + "const": "Material Icons Two Tone" }, { "title": "Material Symbols Outlined", "markdownDescription": "https://fonts.google.com/specimen/Material+Symbols+Outlined", - "enum": [ - "Material Symbols Outlined" - ] + "const": "Material Symbols Outlined" }, { "title": "Material Symbols Rounded", "markdownDescription": "https://fonts.google.com/specimen/Material+Symbols+Rounded", - "enum": [ - "Material Symbols Rounded" - ] + "const": "Material Symbols Rounded" }, { "title": "Material Symbols Sharp", "markdownDescription": "https://fonts.google.com/specimen/Material+Symbols+Sharp", - "enum": [ - "Material Symbols Sharp" - ] + "const": "Material Symbols Sharp" }, { "title": "Maven Pro", "markdownDescription": "https://fonts.google.com/specimen/Maven+Pro", - "enum": [ - "Maven Pro" - ] + "const": "Maven Pro" }, { "title": "McLaren", "markdownDescription": "https://fonts.google.com/specimen/McLaren", - "enum": [ - "McLaren" - ] + "const": "McLaren" }, { "title": "Mea Culpa", "markdownDescription": "https://fonts.google.com/specimen/Mea+Culpa", - "enum": [ - "Mea Culpa" - ] + "const": "Mea Culpa" }, { "title": "Meddon", "markdownDescription": "https://fonts.google.com/specimen/Meddon", - "enum": [ - "Meddon" - ] + "const": "Meddon" }, { "title": "MedievalSharp", "markdownDescription": "https://fonts.google.com/specimen/MedievalSharp", - "enum": [ - "MedievalSharp" - ] + "const": "MedievalSharp" }, { "title": "Medula One", "markdownDescription": "https://fonts.google.com/specimen/Medula+One", - "enum": [ - "Medula One" - ] + "const": "Medula One" }, { "title": "Meera Inimai", "markdownDescription": "https://fonts.google.com/specimen/Meera+Inimai", - "enum": [ - "Meera Inimai" - ] + "const": "Meera Inimai" }, { "title": "Megrim", "markdownDescription": "https://fonts.google.com/specimen/Megrim", - "enum": [ - "Megrim" - ] + "const": "Megrim" }, { "title": "Meie Script", "markdownDescription": "https://fonts.google.com/specimen/Meie+Script", - "enum": [ - "Meie Script" - ] + "const": "Meie Script" }, { "title": "Meow Script", "markdownDescription": "https://fonts.google.com/specimen/Meow+Script", - "enum": [ - "Meow Script" - ] + "const": "Meow Script" }, { "title": "Merienda", "markdownDescription": "https://fonts.google.com/specimen/Merienda", - "enum": [ - "Merienda" - ] + "const": "Merienda" }, { "title": "Merriweather", "markdownDescription": "https://fonts.google.com/specimen/Merriweather", - "enum": [ - "Merriweather" - ] + "const": "Merriweather" }, { "title": "Merriweather Sans", "markdownDescription": "https://fonts.google.com/specimen/Merriweather+Sans", - "enum": [ - "Merriweather Sans" - ] + "const": "Merriweather Sans" }, { "title": "Metal", "markdownDescription": "https://fonts.google.com/specimen/Metal", - "enum": [ - "Metal" - ] + "const": "Metal" }, { "title": "Metal Mania", "markdownDescription": "https://fonts.google.com/specimen/Metal+Mania", - "enum": [ - "Metal Mania" - ] + "const": "Metal Mania" }, { "title": "Metamorphous", "markdownDescription": "https://fonts.google.com/specimen/Metamorphous", - "enum": [ - "Metamorphous" - ] + "const": "Metamorphous" }, { "title": "Metrophobic", "markdownDescription": "https://fonts.google.com/specimen/Metrophobic", - "enum": [ - "Metrophobic" - ] + "const": "Metrophobic" }, { "title": "Michroma", "markdownDescription": "https://fonts.google.com/specimen/Michroma", - "enum": [ - "Michroma" - ] + "const": "Michroma" }, { "title": "Milonga", "markdownDescription": "https://fonts.google.com/specimen/Milonga", - "enum": [ - "Milonga" - ] + "const": "Milonga" }, { "title": "Miltonian", "markdownDescription": "https://fonts.google.com/specimen/Miltonian", - "enum": [ - "Miltonian" - ] + "const": "Miltonian" }, { "title": "Miltonian Tattoo", "markdownDescription": "https://fonts.google.com/specimen/Miltonian+Tattoo", - "enum": [ - "Miltonian Tattoo" - ] + "const": "Miltonian Tattoo" }, { "title": "Mina", "markdownDescription": "https://fonts.google.com/specimen/Mina", - "enum": [ - "Mina" - ] + "const": "Mina" }, { "title": "Mingzat", "markdownDescription": "https://fonts.google.com/specimen/Mingzat", - "enum": [ - "Mingzat" - ] + "const": "Mingzat" }, { "title": "Miniver", "markdownDescription": "https://fonts.google.com/specimen/Miniver", - "enum": [ - "Miniver" - ] + "const": "Miniver" }, { "title": "Miriam Libre", "markdownDescription": "https://fonts.google.com/specimen/Miriam+Libre", - "enum": [ - "Miriam Libre" - ] + "const": "Miriam Libre" }, { "title": "Mirza", "markdownDescription": "https://fonts.google.com/specimen/Mirza", - "enum": [ - "Mirza" - ] + "const": "Mirza" }, { "title": "Miss Fajardose", "markdownDescription": "https://fonts.google.com/specimen/Miss+Fajardose", - "enum": [ - "Miss Fajardose" - ] + "const": "Miss Fajardose" }, { "title": "Mitr", "markdownDescription": "https://fonts.google.com/specimen/Mitr", - "enum": [ - "Mitr" - ] + "const": "Mitr" }, { "title": "Mochiy Pop One", "markdownDescription": "https://fonts.google.com/specimen/Mochiy+Pop+One", - "enum": [ - "Mochiy Pop One" - ] + "const": "Mochiy Pop One" }, { "title": "Mochiy Pop P One", "markdownDescription": "https://fonts.google.com/specimen/Mochiy+Pop+P+One", - "enum": [ - "Mochiy Pop P One" - ] + "const": "Mochiy Pop P One" }, { "title": "Modak", "markdownDescription": "https://fonts.google.com/specimen/Modak", - "enum": [ - "Modak" - ] + "const": "Modak" }, { "title": "Modern Antiqua", "markdownDescription": "https://fonts.google.com/specimen/Modern+Antiqua", - "enum": [ - "Modern Antiqua" - ] + "const": "Modern Antiqua" }, { "title": "Mogra", "markdownDescription": "https://fonts.google.com/specimen/Mogra", - "enum": [ - "Mogra" - ] + "const": "Mogra" }, { "title": "Mohave", "markdownDescription": "https://fonts.google.com/specimen/Mohave", - "enum": [ - "Mohave" - ] + "const": "Mohave" }, { "title": "Moirai One", "markdownDescription": "https://fonts.google.com/specimen/Moirai+One", - "enum": [ - "Moirai One" - ] + "const": "Moirai One" }, { "title": "Molengo", "markdownDescription": "https://fonts.google.com/specimen/Molengo", - "enum": [ - "Molengo" - ] + "const": "Molengo" }, { "title": "Molle", "markdownDescription": "https://fonts.google.com/specimen/Molle", - "enum": [ - "Molle" - ] + "const": "Molle" }, { "title": "Monda", "markdownDescription": "https://fonts.google.com/specimen/Monda", - "enum": [ - "Monda" - ] + "const": "Monda" }, { "title": "Monofett", "markdownDescription": "https://fonts.google.com/specimen/Monofett", - "enum": [ - "Monofett" - ] + "const": "Monofett" }, { "title": "Monomaniac One", "markdownDescription": "https://fonts.google.com/specimen/Monomaniac+One", - "enum": [ - "Monomaniac One" - ] + "const": "Monomaniac One" }, { "title": "Monoton", "markdownDescription": "https://fonts.google.com/specimen/Monoton", - "enum": [ - "Monoton" - ] + "const": "Monoton" }, { "title": "Monsieur La Doulaise", "markdownDescription": "https://fonts.google.com/specimen/Monsieur+La+Doulaise", - "enum": [ - "Monsieur La Doulaise" - ] + "const": "Monsieur La Doulaise" }, { "title": "Montaga", "markdownDescription": "https://fonts.google.com/specimen/Montaga", - "enum": [ - "Montaga" - ] + "const": "Montaga" }, { "title": "Montagu Slab", "markdownDescription": "https://fonts.google.com/specimen/Montagu+Slab", - "enum": [ - "Montagu Slab" - ] + "const": "Montagu Slab" }, { "title": "MonteCarlo", "markdownDescription": "https://fonts.google.com/specimen/MonteCarlo", - "enum": [ - "MonteCarlo" - ] + "const": "MonteCarlo" }, { "title": "Montez", "markdownDescription": "https://fonts.google.com/specimen/Montez", - "enum": [ - "Montez" - ] + "const": "Montez" }, { "title": "Montserrat", "markdownDescription": "https://fonts.google.com/specimen/Montserrat", - "enum": [ - "Montserrat" - ] + "const": "Montserrat" }, { "title": "Montserrat Alternates", "markdownDescription": "https://fonts.google.com/specimen/Montserrat+Alternates", - "enum": [ - "Montserrat Alternates" - ] + "const": "Montserrat Alternates" }, { "title": "Montserrat Subrayada", "markdownDescription": "https://fonts.google.com/specimen/Montserrat+Subrayada", - "enum": [ - "Montserrat Subrayada" - ] + "const": "Montserrat Subrayada" }, { "title": "Moo Lah Lah", "markdownDescription": "https://fonts.google.com/specimen/Moo+Lah+Lah", - "enum": [ - "Moo Lah Lah" - ] + "const": "Moo Lah Lah" }, { "title": "Mooli", "markdownDescription": "https://fonts.google.com/specimen/Mooli", - "enum": [ - "Mooli" - ] + "const": "Mooli" }, { "title": "Moon Dance", "markdownDescription": "https://fonts.google.com/specimen/Moon+Dance", - "enum": [ - "Moon Dance" - ] + "const": "Moon Dance" }, { "title": "Moul", "markdownDescription": "https://fonts.google.com/specimen/Moul", - "enum": [ - "Moul" - ] + "const": "Moul" }, { "title": "Moulpali", "markdownDescription": "https://fonts.google.com/specimen/Moulpali", - "enum": [ - "Moulpali" - ] + "const": "Moulpali" }, { "title": "Mountains of Christmas", "markdownDescription": "https://fonts.google.com/specimen/Mountains+of+Christmas", - "enum": [ - "Mountains of Christmas" - ] + "const": "Mountains of Christmas" }, { "title": "Mouse Memoirs", "markdownDescription": "https://fonts.google.com/specimen/Mouse+Memoirs", - "enum": [ - "Mouse Memoirs" - ] + "const": "Mouse Memoirs" }, { "title": "Mr Bedfort", "markdownDescription": "https://fonts.google.com/specimen/Mr+Bedfort", - "enum": [ - "Mr Bedfort" - ] + "const": "Mr Bedfort" }, { "title": "Mr Dafoe", "markdownDescription": "https://fonts.google.com/specimen/Mr+Dafoe", - "enum": [ - "Mr Dafoe" - ] + "const": "Mr Dafoe" }, { "title": "Mr De Haviland", "markdownDescription": "https://fonts.google.com/specimen/Mr+De+Haviland", - "enum": [ - "Mr De Haviland" - ] + "const": "Mr De Haviland" }, { "title": "Mrs Saint Delafield", "markdownDescription": "https://fonts.google.com/specimen/Mrs+Saint+Delafield", - "enum": [ - "Mrs Saint Delafield" - ] + "const": "Mrs Saint Delafield" }, { "title": "Mrs Sheppards", "markdownDescription": "https://fonts.google.com/specimen/Mrs+Sheppards", - "enum": [ - "Mrs Sheppards" - ] + "const": "Mrs Sheppards" }, { "title": "Ms Madi", "markdownDescription": "https://fonts.google.com/specimen/Ms+Madi", - "enum": [ - "Ms Madi" - ] + "const": "Ms Madi" }, { "title": "Mukta", "markdownDescription": "https://fonts.google.com/specimen/Mukta", - "enum": [ - "Mukta" - ] + "const": "Mukta" }, { "title": "Mukta Mahee", "markdownDescription": "https://fonts.google.com/specimen/Mukta+Mahee", - "enum": [ - "Mukta Mahee" - ] + "const": "Mukta Mahee" }, { "title": "Mukta Malar", "markdownDescription": "https://fonts.google.com/specimen/Mukta+Malar", - "enum": [ - "Mukta Malar" - ] + "const": "Mukta Malar" }, { "title": "Mukta Vaani", "markdownDescription": "https://fonts.google.com/specimen/Mukta+Vaani", - "enum": [ - "Mukta Vaani" - ] + "const": "Mukta Vaani" }, { "title": "Mulish", "markdownDescription": "https://fonts.google.com/specimen/Mulish", - "enum": [ - "Mulish" - ] + "const": "Mulish" }, { "title": "Murecho", "markdownDescription": "https://fonts.google.com/specimen/Murecho", - "enum": [ - "Murecho" - ] + "const": "Murecho" }, { "title": "MuseoModerno", "markdownDescription": "https://fonts.google.com/specimen/MuseoModerno", - "enum": [ - "MuseoModerno" - ] + "const": "MuseoModerno" }, { "title": "My Soul", "markdownDescription": "https://fonts.google.com/specimen/My+Soul", - "enum": [ - "My Soul" - ] + "const": "My Soul" }, { "title": "Mynerve", "markdownDescription": "https://fonts.google.com/specimen/Mynerve", - "enum": [ - "Mynerve" - ] + "const": "Mynerve" }, { "title": "Mystery Quest", "markdownDescription": "https://fonts.google.com/specimen/Mystery+Quest", - "enum": [ - "Mystery Quest" - ] + "const": "Mystery Quest" }, { "title": "NTR", "markdownDescription": "https://fonts.google.com/specimen/NTR", - "enum": [ - "NTR" - ] + "const": "NTR" }, { "title": "Nabla", "markdownDescription": "https://fonts.google.com/specimen/Nabla", - "enum": [ - "Nabla" - ] + "const": "Nabla" }, { "title": "Nanum Brush Script", "markdownDescription": "https://fonts.google.com/specimen/Nanum+Brush+Script", - "enum": [ - "Nanum Brush Script" - ] + "const": "Nanum Brush Script" }, { "title": "Nanum Gothic", "markdownDescription": "https://fonts.google.com/specimen/Nanum+Gothic", - "enum": [ - "Nanum Gothic" - ] + "const": "Nanum Gothic" }, { "title": "Nanum Gothic Coding", "markdownDescription": "https://fonts.google.com/specimen/Nanum+Gothic+Coding", - "enum": [ - "Nanum Gothic Coding" - ] + "const": "Nanum Gothic Coding" }, { "title": "Nanum Myeongjo", "markdownDescription": "https://fonts.google.com/specimen/Nanum+Myeongjo", - "enum": [ - "Nanum Myeongjo" - ] + "const": "Nanum Myeongjo" }, { "title": "Nanum Pen Script", "markdownDescription": "https://fonts.google.com/specimen/Nanum+Pen+Script", - "enum": [ - "Nanum Pen Script" - ] + "const": "Nanum Pen Script" }, { "title": "Narnoor", "markdownDescription": "https://fonts.google.com/specimen/Narnoor", - "enum": [ - "Narnoor" - ] + "const": "Narnoor" }, { "title": "Neonderthaw", "markdownDescription": "https://fonts.google.com/specimen/Neonderthaw", - "enum": [ - "Neonderthaw" - ] + "const": "Neonderthaw" }, { "title": "Nerko One", "markdownDescription": "https://fonts.google.com/specimen/Nerko+One", - "enum": [ - "Nerko One" - ] + "const": "Nerko One" }, { "title": "Neucha", "markdownDescription": "https://fonts.google.com/specimen/Neucha", - "enum": [ - "Neucha" - ] + "const": "Neucha" }, { "title": "Neuton", "markdownDescription": "https://fonts.google.com/specimen/Neuton", - "enum": [ - "Neuton" - ] + "const": "Neuton" }, { "title": "New Rocker", "markdownDescription": "https://fonts.google.com/specimen/New+Rocker", - "enum": [ - "New Rocker" - ] + "const": "New Rocker" }, { "title": "New Tegomin", "markdownDescription": "https://fonts.google.com/specimen/New+Tegomin", - "enum": [ - "New Tegomin" - ] + "const": "New Tegomin" }, { "title": "News Cycle", "markdownDescription": "https://fonts.google.com/specimen/News+Cycle", - "enum": [ - "News Cycle" - ] + "const": "News Cycle" }, { "title": "Newsreader", "markdownDescription": "https://fonts.google.com/specimen/Newsreader", - "enum": [ - "Newsreader" - ] + "const": "Newsreader" }, { "title": "Niconne", "markdownDescription": "https://fonts.google.com/specimen/Niconne", - "enum": [ - "Niconne" - ] + "const": "Niconne" }, { "title": "Niramit", "markdownDescription": "https://fonts.google.com/specimen/Niramit", - "enum": [ - "Niramit" - ] + "const": "Niramit" }, { "title": "Nixie One", "markdownDescription": "https://fonts.google.com/specimen/Nixie+One", - "enum": [ - "Nixie One" - ] + "const": "Nixie One" }, { "title": "Nobile", "markdownDescription": "https://fonts.google.com/specimen/Nobile", - "enum": [ - "Nobile" - ] + "const": "Nobile" }, { "title": "Nokora", "markdownDescription": "https://fonts.google.com/specimen/Nokora", - "enum": [ - "Nokora" - ] + "const": "Nokora" }, { "title": "Norican", "markdownDescription": "https://fonts.google.com/specimen/Norican", - "enum": [ - "Norican" - ] + "const": "Norican" }, { "title": "Nosifer", "markdownDescription": "https://fonts.google.com/specimen/Nosifer", - "enum": [ - "Nosifer" - ] + "const": "Nosifer" }, { "title": "Notable", "markdownDescription": "https://fonts.google.com/specimen/Notable", - "enum": [ - "Notable" - ] + "const": "Notable" }, { "title": "Nothing You Could Do", "markdownDescription": "https://fonts.google.com/specimen/Nothing+You+Could+Do", - "enum": [ - "Nothing You Could Do" - ] + "const": "Nothing You Could Do" }, { "title": "Noticia Text", "markdownDescription": "https://fonts.google.com/specimen/Noticia+Text", - "enum": [ - "Noticia Text" - ] + "const": "Noticia Text" }, { "title": "Noto Color Emoji", "markdownDescription": "https://fonts.google.com/specimen/Noto+Color+Emoji", - "enum": [ - "Noto Color Emoji" - ] + "const": "Noto Color Emoji" }, { "title": "Noto Emoji", "markdownDescription": "https://fonts.google.com/specimen/Noto+Emoji", - "enum": [ - "Noto Emoji" - ] + "const": "Noto Emoji" }, { "title": "Noto Kufi Arabic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Kufi+Arabic", - "enum": [ - "Noto Kufi Arabic" - ] + "const": "Noto Kufi Arabic" }, { "title": "Noto Music", "markdownDescription": "https://fonts.google.com/specimen/Noto+Music", - "enum": [ - "Noto Music" - ] + "const": "Noto Music" }, { "title": "Noto Naskh Arabic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Naskh+Arabic", - "enum": [ - "Noto Naskh Arabic" - ] + "const": "Noto Naskh Arabic" }, { "title": "Noto Nastaliq Urdu", "markdownDescription": "https://fonts.google.com/specimen/Noto+Nastaliq+Urdu", - "enum": [ - "Noto Nastaliq Urdu" - ] + "const": "Noto Nastaliq Urdu" }, { "title": "Noto Rashi Hebrew", "markdownDescription": "https://fonts.google.com/specimen/Noto+Rashi+Hebrew", - "enum": [ - "Noto Rashi Hebrew" - ] + "const": "Noto Rashi Hebrew" }, { "title": "Noto Sans", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans", - "enum": [ - "Noto Sans" - ] + "const": "Noto Sans" }, { "title": "Noto Sans Adlam", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Adlam", - "enum": [ - "Noto Sans Adlam" - ] + "const": "Noto Sans Adlam" }, { "title": "Noto Sans Adlam Unjoined", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Adlam+Unjoined", - "enum": [ - "Noto Sans Adlam Unjoined" - ] + "const": "Noto Sans Adlam Unjoined" }, { "title": "Noto Sans Anatolian Hieroglyphs", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Anatolian+Hieroglyphs", - "enum": [ - "Noto Sans Anatolian Hieroglyphs" - ] + "const": "Noto Sans Anatolian Hieroglyphs" }, { "title": "Noto Sans Arabic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Arabic", - "enum": [ - "Noto Sans Arabic" - ] + "const": "Noto Sans Arabic" }, { "title": "Noto Sans Armenian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Armenian", - "enum": [ - "Noto Sans Armenian" - ] + "const": "Noto Sans Armenian" }, { "title": "Noto Sans Avestan", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Avestan", - "enum": [ - "Noto Sans Avestan" - ] + "const": "Noto Sans Avestan" }, { "title": "Noto Sans Balinese", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Balinese", - "enum": [ - "Noto Sans Balinese" - ] + "const": "Noto Sans Balinese" }, { "title": "Noto Sans Bamum", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Bamum", - "enum": [ - "Noto Sans Bamum" - ] + "const": "Noto Sans Bamum" }, { "title": "Noto Sans Bassa Vah", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Bassa+Vah", - "enum": [ - "Noto Sans Bassa Vah" - ] + "const": "Noto Sans Bassa Vah" }, { "title": "Noto Sans Batak", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Batak", - "enum": [ - "Noto Sans Batak" - ] + "const": "Noto Sans Batak" }, { "title": "Noto Sans Bengali", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Bengali", - "enum": [ - "Noto Sans Bengali" - ] + "const": "Noto Sans Bengali" }, { "title": "Noto Sans Bhaiksuki", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Bhaiksuki", - "enum": [ - "Noto Sans Bhaiksuki" - ] + "const": "Noto Sans Bhaiksuki" }, { "title": "Noto Sans Brahmi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Brahmi", - "enum": [ - "Noto Sans Brahmi" - ] + "const": "Noto Sans Brahmi" }, { "title": "Noto Sans Buginese", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Buginese", - "enum": [ - "Noto Sans Buginese" - ] + "const": "Noto Sans Buginese" }, { "title": "Noto Sans Buhid", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Buhid", - "enum": [ - "Noto Sans Buhid" - ] + "const": "Noto Sans Buhid" }, { "title": "Noto Sans Canadian Aboriginal", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Canadian+Aboriginal", - "enum": [ - "Noto Sans Canadian Aboriginal" - ] + "const": "Noto Sans Canadian Aboriginal" }, { "title": "Noto Sans Carian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Carian", - "enum": [ - "Noto Sans Carian" - ] + "const": "Noto Sans Carian" }, { "title": "Noto Sans Caucasian Albanian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Caucasian+Albanian", - "enum": [ - "Noto Sans Caucasian Albanian" - ] + "const": "Noto Sans Caucasian Albanian" }, { "title": "Noto Sans Chakma", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Chakma", - "enum": [ - "Noto Sans Chakma" - ] + "const": "Noto Sans Chakma" }, { "title": "Noto Sans Cham", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Cham", - "enum": [ - "Noto Sans Cham" - ] + "const": "Noto Sans Cham" }, { "title": "Noto Sans Cherokee", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Cherokee", - "enum": [ - "Noto Sans Cherokee" - ] + "const": "Noto Sans Cherokee" }, { "title": "Noto Sans Chorasmian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Chorasmian", - "enum": [ - "Noto Sans Chorasmian" - ] + "const": "Noto Sans Chorasmian" }, { "title": "Noto Sans Coptic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Coptic", - "enum": [ - "Noto Sans Coptic" - ] + "const": "Noto Sans Coptic" }, { "title": "Noto Sans Cuneiform", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Cuneiform", - "enum": [ - "Noto Sans Cuneiform" - ] + "const": "Noto Sans Cuneiform" }, { "title": "Noto Sans Cypriot", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Cypriot", - "enum": [ - "Noto Sans Cypriot" - ] + "const": "Noto Sans Cypriot" }, { "title": "Noto Sans Cypro Minoan", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Cypro+Minoan", - "enum": [ - "Noto Sans Cypro Minoan" - ] + "const": "Noto Sans Cypro Minoan" }, { "title": "Noto Sans Deseret", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Deseret", - "enum": [ - "Noto Sans Deseret" - ] + "const": "Noto Sans Deseret" }, { "title": "Noto Sans Devanagari", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Devanagari", - "enum": [ - "Noto Sans Devanagari" - ] + "const": "Noto Sans Devanagari" }, { "title": "Noto Sans Display", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Display", - "enum": [ - "Noto Sans Display" - ] + "const": "Noto Sans Display" }, { "title": "Noto Sans Duployan", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Duployan", - "enum": [ - "Noto Sans Duployan" - ] + "const": "Noto Sans Duployan" }, { "title": "Noto Sans Egyptian Hieroglyphs", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Egyptian+Hieroglyphs", - "enum": [ - "Noto Sans Egyptian Hieroglyphs" - ] + "const": "Noto Sans Egyptian Hieroglyphs" }, { "title": "Noto Sans Elbasan", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Elbasan", - "enum": [ - "Noto Sans Elbasan" - ] + "const": "Noto Sans Elbasan" }, { "title": "Noto Sans Elymaic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Elymaic", - "enum": [ - "Noto Sans Elymaic" - ] + "const": "Noto Sans Elymaic" }, { "title": "Noto Sans Ethiopic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Ethiopic", - "enum": [ - "Noto Sans Ethiopic" - ] + "const": "Noto Sans Ethiopic" }, { "title": "Noto Sans Georgian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Georgian", - "enum": [ - "Noto Sans Georgian" - ] + "const": "Noto Sans Georgian" }, { "title": "Noto Sans Glagolitic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Glagolitic", - "enum": [ - "Noto Sans Glagolitic" - ] + "const": "Noto Sans Glagolitic" }, { "title": "Noto Sans Gothic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Gothic", - "enum": [ - "Noto Sans Gothic" - ] + "const": "Noto Sans Gothic" }, { "title": "Noto Sans Grantha", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Grantha", - "enum": [ - "Noto Sans Grantha" - ] + "const": "Noto Sans Grantha" }, { "title": "Noto Sans Gujarati", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Gujarati", - "enum": [ - "Noto Sans Gujarati" - ] + "const": "Noto Sans Gujarati" }, { "title": "Noto Sans Gunjala Gondi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Gunjala+Gondi", - "enum": [ - "Noto Sans Gunjala Gondi" - ] + "const": "Noto Sans Gunjala Gondi" }, { "title": "Noto Sans Gurmukhi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Gurmukhi", - "enum": [ - "Noto Sans Gurmukhi" - ] + "const": "Noto Sans Gurmukhi" }, { "title": "Noto Sans HK", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+HK", - "enum": [ - "Noto Sans HK" - ] + "const": "Noto Sans HK" }, { "title": "Noto Sans Hanifi Rohingya", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Hanifi+Rohingya", - "enum": [ - "Noto Sans Hanifi Rohingya" - ] + "const": "Noto Sans Hanifi Rohingya" }, { "title": "Noto Sans Hanunoo", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Hanunoo", - "enum": [ - "Noto Sans Hanunoo" - ] + "const": "Noto Sans Hanunoo" }, { "title": "Noto Sans Hatran", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Hatran", - "enum": [ - "Noto Sans Hatran" - ] + "const": "Noto Sans Hatran" }, { "title": "Noto Sans Hebrew", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Hebrew", - "enum": [ - "Noto Sans Hebrew" - ] + "const": "Noto Sans Hebrew" }, { "title": "Noto Sans Imperial Aramaic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Imperial+Aramaic", - "enum": [ - "Noto Sans Imperial Aramaic" - ] + "const": "Noto Sans Imperial Aramaic" }, { "title": "Noto Sans Indic Siyaq Numbers", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Indic+Siyaq+Numbers", - "enum": [ - "Noto Sans Indic Siyaq Numbers" - ] + "const": "Noto Sans Indic Siyaq Numbers" }, { "title": "Noto Sans Inscriptional Pahlavi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Inscriptional+Pahlavi", - "enum": [ - "Noto Sans Inscriptional Pahlavi" - ] + "const": "Noto Sans Inscriptional Pahlavi" }, { "title": "Noto Sans Inscriptional Parthian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Inscriptional+Parthian", - "enum": [ - "Noto Sans Inscriptional Parthian" - ] + "const": "Noto Sans Inscriptional Parthian" }, { "title": "Noto Sans JP", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+JP", - "enum": [ - "Noto Sans JP" - ] + "const": "Noto Sans JP" }, { "title": "Noto Sans Javanese", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Javanese", - "enum": [ - "Noto Sans Javanese" - ] + "const": "Noto Sans Javanese" }, { "title": "Noto Sans KR", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+KR", - "enum": [ - "Noto Sans KR" - ] + "const": "Noto Sans KR" }, { "title": "Noto Sans Kaithi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Kaithi", - "enum": [ - "Noto Sans Kaithi" - ] + "const": "Noto Sans Kaithi" }, { "title": "Noto Sans Kannada", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Kannada", - "enum": [ - "Noto Sans Kannada" - ] + "const": "Noto Sans Kannada" }, { "title": "Noto Sans Kayah Li", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Kayah+Li", - "enum": [ - "Noto Sans Kayah Li" - ] + "const": "Noto Sans Kayah Li" }, { "title": "Noto Sans Kharoshthi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Kharoshthi", - "enum": [ - "Noto Sans Kharoshthi" - ] + "const": "Noto Sans Kharoshthi" }, { "title": "Noto Sans Khmer", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Khmer", - "enum": [ - "Noto Sans Khmer" - ] + "const": "Noto Sans Khmer" }, { "title": "Noto Sans Khojki", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Khojki", - "enum": [ - "Noto Sans Khojki" - ] + "const": "Noto Sans Khojki" }, { "title": "Noto Sans Khudawadi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Khudawadi", - "enum": [ - "Noto Sans Khudawadi" - ] + "const": "Noto Sans Khudawadi" }, { "title": "Noto Sans Lao", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Lao", - "enum": [ - "Noto Sans Lao" - ] + "const": "Noto Sans Lao" }, { "title": "Noto Sans Lao Looped", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Lao+Looped", - "enum": [ - "Noto Sans Lao Looped" - ] + "const": "Noto Sans Lao Looped" }, { "title": "Noto Sans Lepcha", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Lepcha", - "enum": [ - "Noto Sans Lepcha" - ] + "const": "Noto Sans Lepcha" }, { "title": "Noto Sans Limbu", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Limbu", - "enum": [ - "Noto Sans Limbu" - ] + "const": "Noto Sans Limbu" }, { "title": "Noto Sans Linear A", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Linear+A", - "enum": [ - "Noto Sans Linear A" - ] + "const": "Noto Sans Linear A" }, { "title": "Noto Sans Linear B", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Linear+B", - "enum": [ - "Noto Sans Linear B" - ] + "const": "Noto Sans Linear B" }, { "title": "Noto Sans Lisu", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Lisu", - "enum": [ - "Noto Sans Lisu" - ] + "const": "Noto Sans Lisu" }, { "title": "Noto Sans Lycian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Lycian", - "enum": [ - "Noto Sans Lycian" - ] + "const": "Noto Sans Lycian" }, { "title": "Noto Sans Lydian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Lydian", - "enum": [ - "Noto Sans Lydian" - ] + "const": "Noto Sans Lydian" }, { "title": "Noto Sans Mahajani", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Mahajani", - "enum": [ - "Noto Sans Mahajani" - ] + "const": "Noto Sans Mahajani" }, { "title": "Noto Sans Malayalam", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Malayalam", - "enum": [ - "Noto Sans Malayalam" - ] + "const": "Noto Sans Malayalam" }, { "title": "Noto Sans Mandaic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Mandaic", - "enum": [ - "Noto Sans Mandaic" - ] + "const": "Noto Sans Mandaic" }, { "title": "Noto Sans Manichaean", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Manichaean", - "enum": [ - "Noto Sans Manichaean" - ] + "const": "Noto Sans Manichaean" }, { "title": "Noto Sans Marchen", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Marchen", - "enum": [ - "Noto Sans Marchen" - ] + "const": "Noto Sans Marchen" }, { "title": "Noto Sans Masaram Gondi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Masaram+Gondi", - "enum": [ - "Noto Sans Masaram Gondi" - ] + "const": "Noto Sans Masaram Gondi" }, { "title": "Noto Sans Math", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Math", - "enum": [ - "Noto Sans Math" - ] + "const": "Noto Sans Math" }, { "title": "Noto Sans Mayan Numerals", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Mayan+Numerals", - "enum": [ - "Noto Sans Mayan Numerals" - ] + "const": "Noto Sans Mayan Numerals" }, { "title": "Noto Sans Medefaidrin", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Medefaidrin", - "enum": [ - "Noto Sans Medefaidrin" - ] + "const": "Noto Sans Medefaidrin" }, { "title": "Noto Sans Meetei Mayek", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Meetei+Mayek", - "enum": [ - "Noto Sans Meetei Mayek" - ] + "const": "Noto Sans Meetei Mayek" }, { "title": "Noto Sans Mende Kikakui", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Mende+Kikakui", - "enum": [ - "Noto Sans Mende Kikakui" - ] + "const": "Noto Sans Mende Kikakui" }, { "title": "Noto Sans Meroitic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Meroitic", - "enum": [ - "Noto Sans Meroitic" - ] + "const": "Noto Sans Meroitic" }, { "title": "Noto Sans Miao", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Miao", - "enum": [ - "Noto Sans Miao" - ] + "const": "Noto Sans Miao" }, { "title": "Noto Sans Modi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Modi", - "enum": [ - "Noto Sans Modi" - ] + "const": "Noto Sans Modi" }, { "title": "Noto Sans Mongolian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Mongolian", - "enum": [ - "Noto Sans Mongolian" - ] + "const": "Noto Sans Mongolian" }, { "title": "Noto Sans Mono", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Mono", - "enum": [ - "Noto Sans Mono" - ] + "const": "Noto Sans Mono" }, { "title": "Noto Sans Mro", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Mro", - "enum": [ - "Noto Sans Mro" - ] + "const": "Noto Sans Mro" }, { "title": "Noto Sans Multani", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Multani", - "enum": [ - "Noto Sans Multani" - ] + "const": "Noto Sans Multani" }, { "title": "Noto Sans Myanmar", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Myanmar", - "enum": [ - "Noto Sans Myanmar" - ] + "const": "Noto Sans Myanmar" }, { "title": "Noto Sans NKo", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+NKo", - "enum": [ - "Noto Sans NKo" - ] + "const": "Noto Sans NKo" }, { "title": "Noto Sans NKo Unjoined", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+NKo+Unjoined", - "enum": [ - "Noto Sans NKo Unjoined" - ] + "const": "Noto Sans NKo Unjoined" }, { "title": "Noto Sans Nabataean", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Nabataean", - "enum": [ - "Noto Sans Nabataean" - ] + "const": "Noto Sans Nabataean" }, { "title": "Noto Sans Nag Mundari", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Nag+Mundari", - "enum": [ - "Noto Sans Nag Mundari" - ] + "const": "Noto Sans Nag Mundari" }, { "title": "Noto Sans Nandinagari", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Nandinagari", - "enum": [ - "Noto Sans Nandinagari" - ] + "const": "Noto Sans Nandinagari" }, { "title": "Noto Sans New Tai Lue", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+New+Tai+Lue", - "enum": [ - "Noto Sans New Tai Lue" - ] + "const": "Noto Sans New Tai Lue" }, { "title": "Noto Sans Newa", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Newa", - "enum": [ - "Noto Sans Newa" - ] + "const": "Noto Sans Newa" }, { "title": "Noto Sans Nushu", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Nushu", - "enum": [ - "Noto Sans Nushu" - ] + "const": "Noto Sans Nushu" }, { "title": "Noto Sans Ogham", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Ogham", - "enum": [ - "Noto Sans Ogham" - ] + "const": "Noto Sans Ogham" }, { "title": "Noto Sans Ol Chiki", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Ol+Chiki", - "enum": [ - "Noto Sans Ol Chiki" - ] + "const": "Noto Sans Ol Chiki" }, { "title": "Noto Sans Old Hungarian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Old+Hungarian", - "enum": [ - "Noto Sans Old Hungarian" - ] + "const": "Noto Sans Old Hungarian" }, { "title": "Noto Sans Old Italic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Old+Italic", - "enum": [ - "Noto Sans Old Italic" - ] + "const": "Noto Sans Old Italic" }, { "title": "Noto Sans Old North Arabian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Old+North+Arabian", - "enum": [ - "Noto Sans Old North Arabian" - ] + "const": "Noto Sans Old North Arabian" }, { "title": "Noto Sans Old Permic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Old+Permic", - "enum": [ - "Noto Sans Old Permic" - ] + "const": "Noto Sans Old Permic" }, { "title": "Noto Sans Old Persian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Old+Persian", - "enum": [ - "Noto Sans Old Persian" - ] + "const": "Noto Sans Old Persian" }, { "title": "Noto Sans Old Sogdian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Old+Sogdian", - "enum": [ - "Noto Sans Old Sogdian" - ] + "const": "Noto Sans Old Sogdian" }, { "title": "Noto Sans Old South Arabian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Old+South+Arabian", - "enum": [ - "Noto Sans Old South Arabian" - ] + "const": "Noto Sans Old South Arabian" }, { "title": "Noto Sans Old Turkic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Old+Turkic", - "enum": [ - "Noto Sans Old Turkic" - ] + "const": "Noto Sans Old Turkic" }, { "title": "Noto Sans Oriya", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Oriya", - "enum": [ - "Noto Sans Oriya" - ] + "const": "Noto Sans Oriya" }, { "title": "Noto Sans Osage", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Osage", - "enum": [ - "Noto Sans Osage" - ] + "const": "Noto Sans Osage" }, { "title": "Noto Sans Osmanya", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Osmanya", - "enum": [ - "Noto Sans Osmanya" - ] + "const": "Noto Sans Osmanya" }, { "title": "Noto Sans Pahawh Hmong", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Pahawh+Hmong", - "enum": [ - "Noto Sans Pahawh Hmong" - ] + "const": "Noto Sans Pahawh Hmong" }, { "title": "Noto Sans Palmyrene", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Palmyrene", - "enum": [ - "Noto Sans Palmyrene" - ] + "const": "Noto Sans Palmyrene" }, { "title": "Noto Sans Pau Cin Hau", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Pau+Cin+Hau", - "enum": [ - "Noto Sans Pau Cin Hau" - ] + "const": "Noto Sans Pau Cin Hau" }, { "title": "Noto Sans Phags Pa", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Phags+Pa", - "enum": [ - "Noto Sans Phags Pa" - ] + "const": "Noto Sans Phags Pa" }, { "title": "Noto Sans Phoenician", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Phoenician", - "enum": [ - "Noto Sans Phoenician" - ] + "const": "Noto Sans Phoenician" }, { "title": "Noto Sans Psalter Pahlavi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Psalter+Pahlavi", - "enum": [ - "Noto Sans Psalter Pahlavi" - ] + "const": "Noto Sans Psalter Pahlavi" }, { "title": "Noto Sans Rejang", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Rejang", - "enum": [ - "Noto Sans Rejang" - ] + "const": "Noto Sans Rejang" }, { "title": "Noto Sans Runic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Runic", - "enum": [ - "Noto Sans Runic" - ] + "const": "Noto Sans Runic" }, { "title": "Noto Sans SC", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+SC", - "enum": [ - "Noto Sans SC" - ] + "const": "Noto Sans SC" }, { "title": "Noto Sans Samaritan", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Samaritan", - "enum": [ - "Noto Sans Samaritan" - ] + "const": "Noto Sans Samaritan" }, { "title": "Noto Sans Saurashtra", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Saurashtra", - "enum": [ - "Noto Sans Saurashtra" - ] + "const": "Noto Sans Saurashtra" }, { "title": "Noto Sans Sharada", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Sharada", - "enum": [ - "Noto Sans Sharada" - ] + "const": "Noto Sans Sharada" }, { "title": "Noto Sans Shavian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Shavian", - "enum": [ - "Noto Sans Shavian" - ] + "const": "Noto Sans Shavian" }, { "title": "Noto Sans Siddham", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Siddham", - "enum": [ - "Noto Sans Siddham" - ] + "const": "Noto Sans Siddham" }, { "title": "Noto Sans SignWriting", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+SignWriting", - "enum": [ - "Noto Sans SignWriting" - ] + "const": "Noto Sans SignWriting" }, { "title": "Noto Sans Sinhala", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Sinhala", - "enum": [ - "Noto Sans Sinhala" - ] + "const": "Noto Sans Sinhala" }, { "title": "Noto Sans Sogdian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Sogdian", - "enum": [ - "Noto Sans Sogdian" - ] + "const": "Noto Sans Sogdian" }, { "title": "Noto Sans Sora Sompeng", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Sora+Sompeng", - "enum": [ - "Noto Sans Sora Sompeng" - ] + "const": "Noto Sans Sora Sompeng" }, { "title": "Noto Sans Soyombo", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Soyombo", - "enum": [ - "Noto Sans Soyombo" - ] + "const": "Noto Sans Soyombo" }, { "title": "Noto Sans Sundanese", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Sundanese", - "enum": [ - "Noto Sans Sundanese" - ] + "const": "Noto Sans Sundanese" }, { "title": "Noto Sans Syloti Nagri", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Syloti+Nagri", - "enum": [ - "Noto Sans Syloti Nagri" - ] + "const": "Noto Sans Syloti Nagri" }, { "title": "Noto Sans Symbols", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Symbols", - "enum": [ - "Noto Sans Symbols" - ] + "const": "Noto Sans Symbols" }, { "title": "Noto Sans Symbols 2", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Symbols+2", - "enum": [ - "Noto Sans Symbols 2" - ] + "const": "Noto Sans Symbols 2" }, { "title": "Noto Sans Syriac", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Syriac", - "enum": [ - "Noto Sans Syriac" - ] + "const": "Noto Sans Syriac" }, { "title": "Noto Sans Syriac Eastern", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Syriac+Eastern", - "enum": [ - "Noto Sans Syriac Eastern" - ] + "const": "Noto Sans Syriac Eastern" }, { "title": "Noto Sans TC", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+TC", - "enum": [ - "Noto Sans TC" - ] + "const": "Noto Sans TC" }, { "title": "Noto Sans Tagalog", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tagalog", - "enum": [ - "Noto Sans Tagalog" - ] + "const": "Noto Sans Tagalog" }, { "title": "Noto Sans Tagbanwa", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tagbanwa", - "enum": [ - "Noto Sans Tagbanwa" - ] + "const": "Noto Sans Tagbanwa" }, { "title": "Noto Sans Tai Le", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tai+Le", - "enum": [ - "Noto Sans Tai Le" - ] + "const": "Noto Sans Tai Le" }, { "title": "Noto Sans Tai Tham", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tai+Tham", - "enum": [ - "Noto Sans Tai Tham" - ] + "const": "Noto Sans Tai Tham" }, { "title": "Noto Sans Tai Viet", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tai+Viet", - "enum": [ - "Noto Sans Tai Viet" - ] + "const": "Noto Sans Tai Viet" }, { "title": "Noto Sans Takri", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Takri", - "enum": [ - "Noto Sans Takri" - ] + "const": "Noto Sans Takri" }, { "title": "Noto Sans Tamil", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tamil", - "enum": [ - "Noto Sans Tamil" - ] + "const": "Noto Sans Tamil" }, { "title": "Noto Sans Tamil Supplement", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tamil+Supplement", - "enum": [ - "Noto Sans Tamil Supplement" - ] + "const": "Noto Sans Tamil Supplement" }, { "title": "Noto Sans Tangsa", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tangsa", - "enum": [ - "Noto Sans Tangsa" - ] + "const": "Noto Sans Tangsa" }, { "title": "Noto Sans Telugu", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Telugu", - "enum": [ - "Noto Sans Telugu" - ] + "const": "Noto Sans Telugu" }, { "title": "Noto Sans Thaana", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Thaana", - "enum": [ - "Noto Sans Thaana" - ] + "const": "Noto Sans Thaana" }, { "title": "Noto Sans Thai", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Thai", - "enum": [ - "Noto Sans Thai" - ] + "const": "Noto Sans Thai" }, { "title": "Noto Sans Thai Looped", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Thai+Looped", - "enum": [ - "Noto Sans Thai Looped" - ] + "const": "Noto Sans Thai Looped" }, { "title": "Noto Sans Tifinagh", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tifinagh", - "enum": [ - "Noto Sans Tifinagh" - ] + "const": "Noto Sans Tifinagh" }, { "title": "Noto Sans Tirhuta", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Tirhuta", - "enum": [ - "Noto Sans Tirhuta" - ] + "const": "Noto Sans Tirhuta" }, { "title": "Noto Sans Ugaritic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Ugaritic", - "enum": [ - "Noto Sans Ugaritic" - ] + "const": "Noto Sans Ugaritic" }, { "title": "Noto Sans Vai", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Vai", - "enum": [ - "Noto Sans Vai" - ] + "const": "Noto Sans Vai" }, { "title": "Noto Sans Vithkuqi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Vithkuqi", - "enum": [ - "Noto Sans Vithkuqi" - ] + "const": "Noto Sans Vithkuqi" }, { "title": "Noto Sans Wancho", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Wancho", - "enum": [ - "Noto Sans Wancho" - ] + "const": "Noto Sans Wancho" }, { "title": "Noto Sans Warang Citi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Warang+Citi", - "enum": [ - "Noto Sans Warang Citi" - ] + "const": "Noto Sans Warang Citi" }, { "title": "Noto Sans Yi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Yi", - "enum": [ - "Noto Sans Yi" - ] + "const": "Noto Sans Yi" }, { "title": "Noto Sans Zanabazar Square", "markdownDescription": "https://fonts.google.com/specimen/Noto+Sans+Zanabazar+Square", - "enum": [ - "Noto Sans Zanabazar Square" - ] + "const": "Noto Sans Zanabazar Square" }, { "title": "Noto Serif", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif", - "enum": [ - "Noto Serif" - ] + "const": "Noto Serif" }, { "title": "Noto Serif Ahom", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Ahom", - "enum": [ - "Noto Serif Ahom" - ] + "const": "Noto Serif Ahom" }, { "title": "Noto Serif Armenian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Armenian", - "enum": [ - "Noto Serif Armenian" - ] + "const": "Noto Serif Armenian" }, { "title": "Noto Serif Balinese", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Balinese", - "enum": [ - "Noto Serif Balinese" - ] + "const": "Noto Serif Balinese" }, { "title": "Noto Serif Bengali", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Bengali", - "enum": [ - "Noto Serif Bengali" - ] + "const": "Noto Serif Bengali" }, { "title": "Noto Serif Devanagari", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Devanagari", - "enum": [ - "Noto Serif Devanagari" - ] + "const": "Noto Serif Devanagari" }, { "title": "Noto Serif Display", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Display", - "enum": [ - "Noto Serif Display" - ] + "const": "Noto Serif Display" }, { "title": "Noto Serif Dogra", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Dogra", - "enum": [ - "Noto Serif Dogra" - ] + "const": "Noto Serif Dogra" }, { "title": "Noto Serif Ethiopic", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Ethiopic", - "enum": [ - "Noto Serif Ethiopic" - ] + "const": "Noto Serif Ethiopic" }, { "title": "Noto Serif Georgian", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Georgian", - "enum": [ - "Noto Serif Georgian" - ] + "const": "Noto Serif Georgian" }, { "title": "Noto Serif Grantha", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Grantha", - "enum": [ - "Noto Serif Grantha" - ] + "const": "Noto Serif Grantha" }, { "title": "Noto Serif Gujarati", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Gujarati", - "enum": [ - "Noto Serif Gujarati" - ] + "const": "Noto Serif Gujarati" }, { "title": "Noto Serif Gurmukhi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Gurmukhi", - "enum": [ - "Noto Serif Gurmukhi" - ] + "const": "Noto Serif Gurmukhi" }, { "title": "Noto Serif HK", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+HK", - "enum": [ - "Noto Serif HK" - ] + "const": "Noto Serif HK" }, { "title": "Noto Serif Hebrew", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Hebrew", - "enum": [ - "Noto Serif Hebrew" - ] + "const": "Noto Serif Hebrew" }, { "title": "Noto Serif JP", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+JP", - "enum": [ - "Noto Serif JP" - ] + "const": "Noto Serif JP" }, { "title": "Noto Serif KR", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+KR", - "enum": [ - "Noto Serif KR" - ] + "const": "Noto Serif KR" }, { "title": "Noto Serif Kannada", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Kannada", - "enum": [ - "Noto Serif Kannada" - ] + "const": "Noto Serif Kannada" }, { "title": "Noto Serif Khitan Small Script", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Khitan+Small+Script", - "enum": [ - "Noto Serif Khitan Small Script" - ] + "const": "Noto Serif Khitan Small Script" }, { "title": "Noto Serif Khmer", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Khmer", - "enum": [ - "Noto Serif Khmer" - ] + "const": "Noto Serif Khmer" }, { "title": "Noto Serif Khojki", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Khojki", - "enum": [ - "Noto Serif Khojki" - ] + "const": "Noto Serif Khojki" }, { "title": "Noto Serif Lao", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Lao", - "enum": [ - "Noto Serif Lao" - ] + "const": "Noto Serif Lao" }, { "title": "Noto Serif Makasar", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Makasar", - "enum": [ - "Noto Serif Makasar" - ] + "const": "Noto Serif Makasar" }, { "title": "Noto Serif Malayalam", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Malayalam", - "enum": [ - "Noto Serif Malayalam" - ] + "const": "Noto Serif Malayalam" }, { "title": "Noto Serif Myanmar", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Myanmar", - "enum": [ - "Noto Serif Myanmar" - ] + "const": "Noto Serif Myanmar" }, { "title": "Noto Serif NP Hmong", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+NP+Hmong", - "enum": [ - "Noto Serif NP Hmong" - ] + "const": "Noto Serif NP Hmong" }, { "title": "Noto Serif Oriya", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Oriya", - "enum": [ - "Noto Serif Oriya" - ] + "const": "Noto Serif Oriya" }, { "title": "Noto Serif Ottoman Siyaq", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Ottoman+Siyaq", - "enum": [ - "Noto Serif Ottoman Siyaq" - ] + "const": "Noto Serif Ottoman Siyaq" }, { "title": "Noto Serif SC", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+SC", - "enum": [ - "Noto Serif SC" - ] + "const": "Noto Serif SC" }, { "title": "Noto Serif Sinhala", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Sinhala", - "enum": [ - "Noto Serif Sinhala" - ] + "const": "Noto Serif Sinhala" }, { "title": "Noto Serif TC", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+TC", - "enum": [ - "Noto Serif TC" - ] + "const": "Noto Serif TC" }, { "title": "Noto Serif Tamil", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Tamil", - "enum": [ - "Noto Serif Tamil" - ] + "const": "Noto Serif Tamil" }, { "title": "Noto Serif Tangut", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Tangut", - "enum": [ - "Noto Serif Tangut" - ] + "const": "Noto Serif Tangut" }, { "title": "Noto Serif Telugu", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Telugu", - "enum": [ - "Noto Serif Telugu" - ] + "const": "Noto Serif Telugu" }, { "title": "Noto Serif Thai", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Thai", - "enum": [ - "Noto Serif Thai" - ] + "const": "Noto Serif Thai" }, { "title": "Noto Serif Tibetan", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Tibetan", - "enum": [ - "Noto Serif Tibetan" - ] + "const": "Noto Serif Tibetan" }, { "title": "Noto Serif Toto", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Toto", - "enum": [ - "Noto Serif Toto" - ] + "const": "Noto Serif Toto" }, { "title": "Noto Serif Vithkuqi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Vithkuqi", - "enum": [ - "Noto Serif Vithkuqi" - ] + "const": "Noto Serif Vithkuqi" }, { "title": "Noto Serif Yezidi", "markdownDescription": "https://fonts.google.com/specimen/Noto+Serif+Yezidi", - "enum": [ - "Noto Serif Yezidi" - ] + "const": "Noto Serif Yezidi" }, { "title": "Noto Traditional Nushu", "markdownDescription": "https://fonts.google.com/specimen/Noto+Traditional+Nushu", - "enum": [ - "Noto Traditional Nushu" - ] + "const": "Noto Traditional Nushu" }, { "title": "Nova Cut", "markdownDescription": "https://fonts.google.com/specimen/Nova+Cut", - "enum": [ - "Nova Cut" - ] + "const": "Nova Cut" }, { "title": "Nova Flat", "markdownDescription": "https://fonts.google.com/specimen/Nova+Flat", - "enum": [ - "Nova Flat" - ] + "const": "Nova Flat" }, { "title": "Nova Mono", "markdownDescription": "https://fonts.google.com/specimen/Nova+Mono", - "enum": [ - "Nova Mono" - ] + "const": "Nova Mono" }, { "title": "Nova Oval", "markdownDescription": "https://fonts.google.com/specimen/Nova+Oval", - "enum": [ - "Nova Oval" - ] + "const": "Nova Oval" }, { "title": "Nova Round", "markdownDescription": "https://fonts.google.com/specimen/Nova+Round", - "enum": [ - "Nova Round" - ] + "const": "Nova Round" }, { "title": "Nova Script", "markdownDescription": "https://fonts.google.com/specimen/Nova+Script", - "enum": [ - "Nova Script" - ] + "const": "Nova Script" }, { "title": "Nova Slim", "markdownDescription": "https://fonts.google.com/specimen/Nova+Slim", - "enum": [ - "Nova Slim" - ] + "const": "Nova Slim" }, { "title": "Nova Square", "markdownDescription": "https://fonts.google.com/specimen/Nova+Square", - "enum": [ - "Nova Square" - ] + "const": "Nova Square" }, { "title": "Numans", "markdownDescription": "https://fonts.google.com/specimen/Numans", - "enum": [ - "Numans" - ] + "const": "Numans" }, { "title": "Nunito", "markdownDescription": "https://fonts.google.com/specimen/Nunito", - "enum": [ - "Nunito" - ] + "const": "Nunito" }, { "title": "Nunito Sans", "markdownDescription": "https://fonts.google.com/specimen/Nunito+Sans", - "enum": [ - "Nunito Sans" - ] + "const": "Nunito Sans" }, { "title": "Nuosu SIL", "markdownDescription": "https://fonts.google.com/specimen/Nuosu+SIL", - "enum": [ - "Nuosu SIL" - ] + "const": "Nuosu SIL" }, { "title": "Odibee Sans", "markdownDescription": "https://fonts.google.com/specimen/Odibee+Sans", - "enum": [ - "Odibee Sans" - ] + "const": "Odibee Sans" }, { "title": "Odor Mean Chey", "markdownDescription": "https://fonts.google.com/specimen/Odor+Mean+Chey", - "enum": [ - "Odor Mean Chey" - ] + "const": "Odor Mean Chey" }, { "title": "Offside", "markdownDescription": "https://fonts.google.com/specimen/Offside", - "enum": [ - "Offside" - ] + "const": "Offside" }, { "title": "Oi", "markdownDescription": "https://fonts.google.com/specimen/Oi", - "enum": [ - "Oi" - ] + "const": "Oi" }, { "title": "Old Standard TT", "markdownDescription": "https://fonts.google.com/specimen/Old+Standard+TT", - "enum": [ - "Old Standard TT" - ] + "const": "Old Standard TT" }, { "title": "Oldenburg", "markdownDescription": "https://fonts.google.com/specimen/Oldenburg", - "enum": [ - "Oldenburg" - ] + "const": "Oldenburg" }, { "title": "Ole", "markdownDescription": "https://fonts.google.com/specimen/Ole", - "enum": [ - "Ole" - ] + "const": "Ole" }, { "title": "Oleo Script", "markdownDescription": "https://fonts.google.com/specimen/Oleo+Script", - "enum": [ - "Oleo Script" - ] + "const": "Oleo Script" }, { "title": "Oleo Script Swash Caps", "markdownDescription": "https://fonts.google.com/specimen/Oleo+Script+Swash+Caps", - "enum": [ - "Oleo Script Swash Caps" - ] + "const": "Oleo Script Swash Caps" }, { "title": "Onest", "markdownDescription": "https://fonts.google.com/specimen/Onest", - "enum": [ - "Onest" - ] + "const": "Onest" }, { "title": "Oooh Baby", "markdownDescription": "https://fonts.google.com/specimen/Oooh+Baby", - "enum": [ - "Oooh Baby" - ] + "const": "Oooh Baby" }, { "title": "Open Sans", "markdownDescription": "https://fonts.google.com/specimen/Open+Sans", - "enum": [ - "Open Sans" - ] + "const": "Open Sans" }, { "title": "Oranienbaum", "markdownDescription": "https://fonts.google.com/specimen/Oranienbaum", - "enum": [ - "Oranienbaum" - ] + "const": "Oranienbaum" }, { "title": "Orbit", "markdownDescription": "https://fonts.google.com/specimen/Orbit", - "enum": [ - "Orbit" - ] + "const": "Orbit" }, { "title": "Orbitron", "markdownDescription": "https://fonts.google.com/specimen/Orbitron", - "enum": [ - "Orbitron" - ] + "const": "Orbitron" }, { "title": "Oregano", "markdownDescription": "https://fonts.google.com/specimen/Oregano", - "enum": [ - "Oregano" - ] + "const": "Oregano" }, { "title": "Orelega One", "markdownDescription": "https://fonts.google.com/specimen/Orelega+One", - "enum": [ - "Orelega One" - ] + "const": "Orelega One" }, { "title": "Orienta", "markdownDescription": "https://fonts.google.com/specimen/Orienta", - "enum": [ - "Orienta" - ] + "const": "Orienta" }, { "title": "Original Surfer", "markdownDescription": "https://fonts.google.com/specimen/Original+Surfer", - "enum": [ - "Original Surfer" - ] + "const": "Original Surfer" }, { "title": "Oswald", "markdownDescription": "https://fonts.google.com/specimen/Oswald", - "enum": [ - "Oswald" - ] + "const": "Oswald" }, { "title": "Outfit", "markdownDescription": "https://fonts.google.com/specimen/Outfit", - "enum": [ - "Outfit" - ] + "const": "Outfit" }, { "title": "Over the Rainbow", "markdownDescription": "https://fonts.google.com/specimen/Over+the+Rainbow", - "enum": [ - "Over the Rainbow" - ] + "const": "Over the Rainbow" }, { "title": "Overlock", "markdownDescription": "https://fonts.google.com/specimen/Overlock", - "enum": [ - "Overlock" - ] + "const": "Overlock" }, { "title": "Overlock SC", "markdownDescription": "https://fonts.google.com/specimen/Overlock+SC", - "enum": [ - "Overlock SC" - ] + "const": "Overlock SC" }, { "title": "Overpass", "markdownDescription": "https://fonts.google.com/specimen/Overpass", - "enum": [ - "Overpass" - ] + "const": "Overpass" }, { "title": "Overpass Mono", "markdownDescription": "https://fonts.google.com/specimen/Overpass+Mono", - "enum": [ - "Overpass Mono" - ] + "const": "Overpass Mono" }, { "title": "Ovo", "markdownDescription": "https://fonts.google.com/specimen/Ovo", - "enum": [ - "Ovo" - ] + "const": "Ovo" }, { "title": "Oxanium", "markdownDescription": "https://fonts.google.com/specimen/Oxanium", - "enum": [ - "Oxanium" - ] + "const": "Oxanium" }, { "title": "Oxygen", "markdownDescription": "https://fonts.google.com/specimen/Oxygen", - "enum": [ - "Oxygen" - ] + "const": "Oxygen" }, { "title": "Oxygen Mono", "markdownDescription": "https://fonts.google.com/specimen/Oxygen+Mono", - "enum": [ - "Oxygen Mono" - ] + "const": "Oxygen Mono" }, { "title": "PT Mono", "markdownDescription": "https://fonts.google.com/specimen/PT+Mono", - "enum": [ - "PT Mono" - ] + "const": "PT Mono" }, { "title": "PT Sans", "markdownDescription": "https://fonts.google.com/specimen/PT+Sans", - "enum": [ - "PT Sans" - ] + "const": "PT Sans" }, { "title": "PT Sans Caption", "markdownDescription": "https://fonts.google.com/specimen/PT+Sans+Caption", - "enum": [ - "PT Sans Caption" - ] + "const": "PT Sans Caption" }, { "title": "PT Sans Narrow", "markdownDescription": "https://fonts.google.com/specimen/PT+Sans+Narrow", - "enum": [ - "PT Sans Narrow" - ] + "const": "PT Sans Narrow" }, { "title": "PT Serif", "markdownDescription": "https://fonts.google.com/specimen/PT+Serif", - "enum": [ - "PT Serif" - ] + "const": "PT Serif" }, { "title": "PT Serif Caption", "markdownDescription": "https://fonts.google.com/specimen/PT+Serif+Caption", - "enum": [ - "PT Serif Caption" - ] + "const": "PT Serif Caption" }, { "title": "Pacifico", "markdownDescription": "https://fonts.google.com/specimen/Pacifico", - "enum": [ - "Pacifico" - ] + "const": "Pacifico" }, { "title": "Padauk", "markdownDescription": "https://fonts.google.com/specimen/Padauk", - "enum": [ - "Padauk" - ] + "const": "Padauk" }, { "title": "Padyakke Expanded One", "markdownDescription": "https://fonts.google.com/specimen/Padyakke+Expanded+One", - "enum": [ - "Padyakke Expanded One" - ] + "const": "Padyakke Expanded One" }, { "title": "Palanquin", "markdownDescription": "https://fonts.google.com/specimen/Palanquin", - "enum": [ - "Palanquin" - ] + "const": "Palanquin" }, { "title": "Palanquin Dark", "markdownDescription": "https://fonts.google.com/specimen/Palanquin+Dark", - "enum": [ - "Palanquin Dark" - ] + "const": "Palanquin Dark" }, { "title": "Palette Mosaic", "markdownDescription": "https://fonts.google.com/specimen/Palette+Mosaic", - "enum": [ - "Palette Mosaic" - ] + "const": "Palette Mosaic" }, { "title": "Pangolin", "markdownDescription": "https://fonts.google.com/specimen/Pangolin", - "enum": [ - "Pangolin" - ] + "const": "Pangolin" }, { "title": "Paprika", "markdownDescription": "https://fonts.google.com/specimen/Paprika", - "enum": [ - "Paprika" - ] + "const": "Paprika" }, { "title": "Parisienne", "markdownDescription": "https://fonts.google.com/specimen/Parisienne", - "enum": [ - "Parisienne" - ] + "const": "Parisienne" }, { "title": "Passero One", "markdownDescription": "https://fonts.google.com/specimen/Passero+One", - "enum": [ - "Passero One" - ] + "const": "Passero One" }, { "title": "Passion One", "markdownDescription": "https://fonts.google.com/specimen/Passion+One", - "enum": [ - "Passion One" - ] + "const": "Passion One" }, { "title": "Passions Conflict", "markdownDescription": "https://fonts.google.com/specimen/Passions+Conflict", - "enum": [ - "Passions Conflict" - ] + "const": "Passions Conflict" }, { "title": "Pathway Extreme", "markdownDescription": "https://fonts.google.com/specimen/Pathway+Extreme", - "enum": [ - "Pathway Extreme" - ] + "const": "Pathway Extreme" }, { "title": "Pathway Gothic One", "markdownDescription": "https://fonts.google.com/specimen/Pathway+Gothic+One", - "enum": [ - "Pathway Gothic One" - ] + "const": "Pathway Gothic One" }, { "title": "Patrick Hand", "markdownDescription": "https://fonts.google.com/specimen/Patrick+Hand", - "enum": [ - "Patrick Hand" - ] + "const": "Patrick Hand" }, { "title": "Patrick Hand SC", "markdownDescription": "https://fonts.google.com/specimen/Patrick+Hand+SC", - "enum": [ - "Patrick Hand SC" - ] + "const": "Patrick Hand SC" }, { "title": "Pattaya", "markdownDescription": "https://fonts.google.com/specimen/Pattaya", - "enum": [ - "Pattaya" - ] + "const": "Pattaya" }, { "title": "Patua One", "markdownDescription": "https://fonts.google.com/specimen/Patua+One", - "enum": [ - "Patua One" - ] + "const": "Patua One" }, { "title": "Pavanam", "markdownDescription": "https://fonts.google.com/specimen/Pavanam", - "enum": [ - "Pavanam" - ] + "const": "Pavanam" }, { "title": "Paytone One", "markdownDescription": "https://fonts.google.com/specimen/Paytone+One", - "enum": [ - "Paytone One" - ] + "const": "Paytone One" }, { "title": "Peddana", "markdownDescription": "https://fonts.google.com/specimen/Peddana", - "enum": [ - "Peddana" - ] + "const": "Peddana" }, { "title": "Peralta", "markdownDescription": "https://fonts.google.com/specimen/Peralta", - "enum": [ - "Peralta" - ] + "const": "Peralta" }, { "title": "Permanent Marker", "markdownDescription": "https://fonts.google.com/specimen/Permanent+Marker", - "enum": [ - "Permanent Marker" - ] + "const": "Permanent Marker" }, { "title": "Petemoss", "markdownDescription": "https://fonts.google.com/specimen/Petemoss", - "enum": [ - "Petemoss" - ] + "const": "Petemoss" }, { "title": "Petit Formal Script", "markdownDescription": "https://fonts.google.com/specimen/Petit+Formal+Script", - "enum": [ - "Petit Formal Script" - ] + "const": "Petit Formal Script" }, { "title": "Petrona", "markdownDescription": "https://fonts.google.com/specimen/Petrona", - "enum": [ - "Petrona" - ] + "const": "Petrona" }, { "title": "Philosopher", "markdownDescription": "https://fonts.google.com/specimen/Philosopher", - "enum": [ - "Philosopher" - ] + "const": "Philosopher" }, { "title": "Phudu", "markdownDescription": "https://fonts.google.com/specimen/Phudu", - "enum": [ - "Phudu" - ] + "const": "Phudu" }, { "title": "Piazzolla", "markdownDescription": "https://fonts.google.com/specimen/Piazzolla", - "enum": [ - "Piazzolla" - ] + "const": "Piazzolla" }, { "title": "Piedra", "markdownDescription": "https://fonts.google.com/specimen/Piedra", - "enum": [ - "Piedra" - ] + "const": "Piedra" }, { "title": "Pinyon Script", "markdownDescription": "https://fonts.google.com/specimen/Pinyon+Script", - "enum": [ - "Pinyon Script" - ] + "const": "Pinyon Script" }, { "title": "Pirata One", "markdownDescription": "https://fonts.google.com/specimen/Pirata+One", - "enum": [ - "Pirata One" - ] + "const": "Pirata One" }, { "title": "Pixelify Sans", "markdownDescription": "https://fonts.google.com/specimen/Pixelify+Sans", - "enum": [ - "Pixelify Sans" - ] + "const": "Pixelify Sans" }, { "title": "Plaster", "markdownDescription": "https://fonts.google.com/specimen/Plaster", - "enum": [ - "Plaster" - ] + "const": "Plaster" }, { "title": "Play", "markdownDescription": "https://fonts.google.com/specimen/Play", - "enum": [ - "Play" - ] + "const": "Play" }, { "title": "Playball", "markdownDescription": "https://fonts.google.com/specimen/Playball", - "enum": [ - "Playball" - ] + "const": "Playball" }, { "title": "Playfair", "markdownDescription": "https://fonts.google.com/specimen/Playfair", - "enum": [ - "Playfair" - ] + "const": "Playfair" }, { "title": "Playfair Display", "markdownDescription": "https://fonts.google.com/specimen/Playfair+Display", - "enum": [ - "Playfair Display" - ] + "const": "Playfair Display" }, { "title": "Playfair Display SC", "markdownDescription": "https://fonts.google.com/specimen/Playfair+Display+SC", - "enum": [ - "Playfair Display SC" - ] + "const": "Playfair Display SC" }, { "title": "Playpen Sans", "markdownDescription": "https://fonts.google.com/specimen/Playpen+Sans", - "enum": [ - "Playpen Sans" - ] + "const": "Playpen Sans" }, { "title": "Plus Jakarta Sans", "markdownDescription": "https://fonts.google.com/specimen/Plus+Jakarta+Sans", - "enum": [ - "Plus Jakarta Sans" - ] + "const": "Plus Jakarta Sans" }, { "title": "Podkova", "markdownDescription": "https://fonts.google.com/specimen/Podkova", - "enum": [ - "Podkova" - ] + "const": "Podkova" }, { "title": "Poiret One", "markdownDescription": "https://fonts.google.com/specimen/Poiret+One", - "enum": [ - "Poiret One" - ] + "const": "Poiret One" }, { "title": "Poller One", "markdownDescription": "https://fonts.google.com/specimen/Poller+One", - "enum": [ - "Poller One" - ] + "const": "Poller One" }, { "title": "Poltawski Nowy", "markdownDescription": "https://fonts.google.com/specimen/Poltawski+Nowy", - "enum": [ - "Poltawski Nowy" - ] + "const": "Poltawski Nowy" }, { "title": "Poly", "markdownDescription": "https://fonts.google.com/specimen/Poly", - "enum": [ - "Poly" - ] + "const": "Poly" }, { "title": "Pompiere", "markdownDescription": "https://fonts.google.com/specimen/Pompiere", - "enum": [ - "Pompiere" - ] + "const": "Pompiere" }, { "title": "Pontano Sans", "markdownDescription": "https://fonts.google.com/specimen/Pontano+Sans", - "enum": [ - "Pontano Sans" - ] + "const": "Pontano Sans" }, { "title": "Poor Story", "markdownDescription": "https://fonts.google.com/specimen/Poor+Story", - "enum": [ - "Poor Story" - ] + "const": "Poor Story" }, { "title": "Poppins", "markdownDescription": "https://fonts.google.com/specimen/Poppins", - "enum": [ - "Poppins" - ] + "const": "Poppins" }, { "title": "Port Lligat Sans", "markdownDescription": "https://fonts.google.com/specimen/Port+Lligat+Sans", - "enum": [ - "Port Lligat Sans" - ] + "const": "Port Lligat Sans" }, { "title": "Port Lligat Slab", "markdownDescription": "https://fonts.google.com/specimen/Port+Lligat+Slab", - "enum": [ - "Port Lligat Slab" - ] + "const": "Port Lligat Slab" }, { "title": "Potta One", "markdownDescription": "https://fonts.google.com/specimen/Potta+One", - "enum": [ - "Potta One" - ] + "const": "Potta One" }, { "title": "Pragati Narrow", "markdownDescription": "https://fonts.google.com/specimen/Pragati+Narrow", - "enum": [ - "Pragati Narrow" - ] + "const": "Pragati Narrow" }, { "title": "Praise", "markdownDescription": "https://fonts.google.com/specimen/Praise", - "enum": [ - "Praise" - ] + "const": "Praise" }, { "title": "Prata", "markdownDescription": "https://fonts.google.com/specimen/Prata", - "enum": [ - "Prata" - ] + "const": "Prata" }, { "title": "Preahvihear", "markdownDescription": "https://fonts.google.com/specimen/Preahvihear", - "enum": [ - "Preahvihear" - ] + "const": "Preahvihear" }, { "title": "Press Start 2P", "markdownDescription": "https://fonts.google.com/specimen/Press+Start+2P", - "enum": [ - "Press Start 2P" - ] + "const": "Press Start 2P" }, { "title": "Pridi", "markdownDescription": "https://fonts.google.com/specimen/Pridi", - "enum": [ - "Pridi" - ] + "const": "Pridi" }, { "title": "Princess Sofia", "markdownDescription": "https://fonts.google.com/specimen/Princess+Sofia", - "enum": [ - "Princess Sofia" - ] + "const": "Princess Sofia" }, { "title": "Prociono", "markdownDescription": "https://fonts.google.com/specimen/Prociono", - "enum": [ - "Prociono" - ] + "const": "Prociono" }, { "title": "Prompt", "markdownDescription": "https://fonts.google.com/specimen/Prompt", - "enum": [ - "Prompt" - ] + "const": "Prompt" }, { "title": "Prosto One", "markdownDescription": "https://fonts.google.com/specimen/Prosto+One", - "enum": [ - "Prosto One" - ] + "const": "Prosto One" }, { "title": "Proza Libre", "markdownDescription": "https://fonts.google.com/specimen/Proza+Libre", - "enum": [ - "Proza Libre" - ] + "const": "Proza Libre" }, { "title": "Public Sans", "markdownDescription": "https://fonts.google.com/specimen/Public+Sans", - "enum": [ - "Public Sans" - ] + "const": "Public Sans" }, { "title": "Puppies Play", "markdownDescription": "https://fonts.google.com/specimen/Puppies+Play", - "enum": [ - "Puppies Play" - ] + "const": "Puppies Play" }, { "title": "Puritan", "markdownDescription": "https://fonts.google.com/specimen/Puritan", - "enum": [ - "Puritan" - ] + "const": "Puritan" }, { "title": "Purple Purse", "markdownDescription": "https://fonts.google.com/specimen/Purple+Purse", - "enum": [ - "Purple Purse" - ] + "const": "Purple Purse" }, { "title": "Qahiri", "markdownDescription": "https://fonts.google.com/specimen/Qahiri", - "enum": [ - "Qahiri" - ] + "const": "Qahiri" }, { "title": "Quando", "markdownDescription": "https://fonts.google.com/specimen/Quando", - "enum": [ - "Quando" - ] + "const": "Quando" }, { "title": "Quantico", "markdownDescription": "https://fonts.google.com/specimen/Quantico", - "enum": [ - "Quantico" - ] + "const": "Quantico" }, { "title": "Quattrocento", "markdownDescription": "https://fonts.google.com/specimen/Quattrocento", - "enum": [ - "Quattrocento" - ] + "const": "Quattrocento" }, { "title": "Quattrocento Sans", "markdownDescription": "https://fonts.google.com/specimen/Quattrocento+Sans", - "enum": [ - "Quattrocento Sans" - ] + "const": "Quattrocento Sans" }, { "title": "Questrial", "markdownDescription": "https://fonts.google.com/specimen/Questrial", - "enum": [ - "Questrial" - ] + "const": "Questrial" }, { "title": "Quicksand", "markdownDescription": "https://fonts.google.com/specimen/Quicksand", - "enum": [ - "Quicksand" - ] + "const": "Quicksand" }, { "title": "Quintessential", "markdownDescription": "https://fonts.google.com/specimen/Quintessential", - "enum": [ - "Quintessential" - ] + "const": "Quintessential" }, { "title": "Qwigley", "markdownDescription": "https://fonts.google.com/specimen/Qwigley", - "enum": [ - "Qwigley" - ] + "const": "Qwigley" }, { "title": "Qwitcher Grypen", "markdownDescription": "https://fonts.google.com/specimen/Qwitcher+Grypen", - "enum": [ - "Qwitcher Grypen" - ] + "const": "Qwitcher Grypen" }, { "title": "REM", "markdownDescription": "https://fonts.google.com/specimen/REM", - "enum": [ - "REM" - ] + "const": "REM" }, { "title": "Racing Sans One", "markdownDescription": "https://fonts.google.com/specimen/Racing+Sans+One", - "enum": [ - "Racing Sans One" - ] + "const": "Racing Sans One" }, { "title": "Radio Canada", "markdownDescription": "https://fonts.google.com/specimen/Radio+Canada", - "enum": [ - "Radio Canada" - ] + "const": "Radio Canada" }, { "title": "Radley", "markdownDescription": "https://fonts.google.com/specimen/Radley", - "enum": [ - "Radley" - ] + "const": "Radley" }, { "title": "Rajdhani", "markdownDescription": "https://fonts.google.com/specimen/Rajdhani", - "enum": [ - "Rajdhani" - ] + "const": "Rajdhani" }, { "title": "Rakkas", "markdownDescription": "https://fonts.google.com/specimen/Rakkas", - "enum": [ - "Rakkas" - ] + "const": "Rakkas" }, { "title": "Raleway", "markdownDescription": "https://fonts.google.com/specimen/Raleway", - "enum": [ - "Raleway" - ] + "const": "Raleway" }, { "title": "Raleway Dots", "markdownDescription": "https://fonts.google.com/specimen/Raleway+Dots", - "enum": [ - "Raleway Dots" - ] + "const": "Raleway Dots" }, { "title": "Ramabhadra", "markdownDescription": "https://fonts.google.com/specimen/Ramabhadra", - "enum": [ - "Ramabhadra" - ] + "const": "Ramabhadra" }, { "title": "Ramaraja", "markdownDescription": "https://fonts.google.com/specimen/Ramaraja", - "enum": [ - "Ramaraja" - ] + "const": "Ramaraja" }, { "title": "Rambla", "markdownDescription": "https://fonts.google.com/specimen/Rambla", - "enum": [ - "Rambla" - ] + "const": "Rambla" }, { "title": "Rammetto One", "markdownDescription": "https://fonts.google.com/specimen/Rammetto+One", - "enum": [ - "Rammetto One" - ] + "const": "Rammetto One" }, { "title": "Rampart One", "markdownDescription": "https://fonts.google.com/specimen/Rampart+One", - "enum": [ - "Rampart One" - ] + "const": "Rampart One" }, { "title": "Ranchers", "markdownDescription": "https://fonts.google.com/specimen/Ranchers", - "enum": [ - "Ranchers" - ] + "const": "Ranchers" }, { "title": "Rancho", "markdownDescription": "https://fonts.google.com/specimen/Rancho", - "enum": [ - "Rancho" - ] + "const": "Rancho" }, { "title": "Ranga", "markdownDescription": "https://fonts.google.com/specimen/Ranga", - "enum": [ - "Ranga" - ] + "const": "Ranga" }, { "title": "Rasa", "markdownDescription": "https://fonts.google.com/specimen/Rasa", - "enum": [ - "Rasa" - ] + "const": "Rasa" }, { "title": "Rationale", "markdownDescription": "https://fonts.google.com/specimen/Rationale", - "enum": [ - "Rationale" - ] + "const": "Rationale" }, { "title": "Ravi Prakash", "markdownDescription": "https://fonts.google.com/specimen/Ravi+Prakash", - "enum": [ - "Ravi Prakash" - ] + "const": "Ravi Prakash" }, { "title": "Readex Pro", "markdownDescription": "https://fonts.google.com/specimen/Readex+Pro", - "enum": [ - "Readex Pro" - ] + "const": "Readex Pro" }, { "title": "Recursive", "markdownDescription": "https://fonts.google.com/specimen/Recursive", - "enum": [ - "Recursive" - ] + "const": "Recursive" }, { "title": "Red Hat Display", "markdownDescription": "https://fonts.google.com/specimen/Red+Hat+Display", - "enum": [ - "Red Hat Display" - ] + "const": "Red Hat Display" }, { "title": "Red Hat Mono", "markdownDescription": "https://fonts.google.com/specimen/Red+Hat+Mono", - "enum": [ - "Red Hat Mono" - ] + "const": "Red Hat Mono" }, { "title": "Red Hat Text", "markdownDescription": "https://fonts.google.com/specimen/Red+Hat+Text", - "enum": [ - "Red Hat Text" - ] + "const": "Red Hat Text" }, { "title": "Red Rose", "markdownDescription": "https://fonts.google.com/specimen/Red+Rose", - "enum": [ - "Red Rose" - ] + "const": "Red Rose" }, { "title": "Redacted", "markdownDescription": "https://fonts.google.com/specimen/Redacted", - "enum": [ - "Redacted" - ] + "const": "Redacted" }, { "title": "Redacted Script", "markdownDescription": "https://fonts.google.com/specimen/Redacted+Script", - "enum": [ - "Redacted Script" - ] + "const": "Redacted Script" }, { "title": "Redressed", "markdownDescription": "https://fonts.google.com/specimen/Redressed", - "enum": [ - "Redressed" - ] + "const": "Redressed" }, { "title": "Reem Kufi", "markdownDescription": "https://fonts.google.com/specimen/Reem+Kufi", - "enum": [ - "Reem Kufi" - ] + "const": "Reem Kufi" }, { "title": "Reem Kufi Fun", "markdownDescription": "https://fonts.google.com/specimen/Reem+Kufi+Fun", - "enum": [ - "Reem Kufi Fun" - ] + "const": "Reem Kufi Fun" }, { "title": "Reem Kufi Ink", "markdownDescription": "https://fonts.google.com/specimen/Reem+Kufi+Ink", - "enum": [ - "Reem Kufi Ink" - ] + "const": "Reem Kufi Ink" }, { "title": "Reenie Beanie", "markdownDescription": "https://fonts.google.com/specimen/Reenie+Beanie", - "enum": [ - "Reenie Beanie" - ] + "const": "Reenie Beanie" }, { "title": "Reggae One", "markdownDescription": "https://fonts.google.com/specimen/Reggae+One", - "enum": [ - "Reggae One" - ] + "const": "Reggae One" }, { "title": "Revalia", "markdownDescription": "https://fonts.google.com/specimen/Revalia", - "enum": [ - "Revalia" - ] + "const": "Revalia" }, { "title": "Rhodium Libre", "markdownDescription": "https://fonts.google.com/specimen/Rhodium+Libre", - "enum": [ - "Rhodium Libre" - ] + "const": "Rhodium Libre" }, { "title": "Ribeye", "markdownDescription": "https://fonts.google.com/specimen/Ribeye", - "enum": [ - "Ribeye" - ] + "const": "Ribeye" }, { "title": "Ribeye Marrow", "markdownDescription": "https://fonts.google.com/specimen/Ribeye+Marrow", - "enum": [ - "Ribeye Marrow" - ] + "const": "Ribeye Marrow" }, { "title": "Righteous", "markdownDescription": "https://fonts.google.com/specimen/Righteous", - "enum": [ - "Righteous" - ] + "const": "Righteous" }, { "title": "Risque", "markdownDescription": "https://fonts.google.com/specimen/Risque", - "enum": [ - "Risque" - ] + "const": "Risque" }, { "title": "Road Rage", "markdownDescription": "https://fonts.google.com/specimen/Road+Rage", - "enum": [ - "Road Rage" - ] + "const": "Road Rage" }, { "title": "Roboto", "markdownDescription": "https://fonts.google.com/specimen/Roboto", - "enum": [ - "Roboto" - ] + "const": "Roboto" }, { "title": "Roboto Condensed", "markdownDescription": "https://fonts.google.com/specimen/Roboto+Condensed", - "enum": [ - "Roboto Condensed" - ] + "const": "Roboto Condensed" }, { "title": "Roboto Flex", "markdownDescription": "https://fonts.google.com/specimen/Roboto+Flex", - "enum": [ - "Roboto Flex" - ] + "const": "Roboto Flex" }, { "title": "Roboto Mono", "markdownDescription": "https://fonts.google.com/specimen/Roboto+Mono", - "enum": [ - "Roboto Mono" - ] + "const": "Roboto Mono" }, { "title": "Roboto Serif", "markdownDescription": "https://fonts.google.com/specimen/Roboto+Serif", - "enum": [ - "Roboto Serif" - ] + "const": "Roboto Serif" }, { "title": "Roboto Slab", "markdownDescription": "https://fonts.google.com/specimen/Roboto+Slab", - "enum": [ - "Roboto Slab" - ] + "const": "Roboto Slab" }, { "title": "Rochester", "markdownDescription": "https://fonts.google.com/specimen/Rochester", - "enum": [ - "Rochester" - ] + "const": "Rochester" }, { "title": "Rock 3D", "markdownDescription": "https://fonts.google.com/specimen/Rock+3D", - "enum": [ - "Rock 3D" - ] + "const": "Rock 3D" }, { "title": "Rock Salt", "markdownDescription": "https://fonts.google.com/specimen/Rock+Salt", - "enum": [ - "Rock Salt" - ] + "const": "Rock Salt" }, { "title": "RocknRoll One", "markdownDescription": "https://fonts.google.com/specimen/RocknRoll+One", - "enum": [ - "RocknRoll One" - ] + "const": "RocknRoll One" }, { "title": "Rokkitt", "markdownDescription": "https://fonts.google.com/specimen/Rokkitt", - "enum": [ - "Rokkitt" - ] + "const": "Rokkitt" }, { "title": "Romanesco", "markdownDescription": "https://fonts.google.com/specimen/Romanesco", - "enum": [ - "Romanesco" - ] + "const": "Romanesco" }, { "title": "Ropa Sans", "markdownDescription": "https://fonts.google.com/specimen/Ropa+Sans", - "enum": [ - "Ropa Sans" - ] + "const": "Ropa Sans" }, { "title": "Rosario", "markdownDescription": "https://fonts.google.com/specimen/Rosario", - "enum": [ - "Rosario" - ] + "const": "Rosario" }, { "title": "Rosarivo", "markdownDescription": "https://fonts.google.com/specimen/Rosarivo", - "enum": [ - "Rosarivo" - ] + "const": "Rosarivo" }, { "title": "Rouge Script", "markdownDescription": "https://fonts.google.com/specimen/Rouge+Script", - "enum": [ - "Rouge Script" - ] + "const": "Rouge Script" }, { "title": "Rowdies", "markdownDescription": "https://fonts.google.com/specimen/Rowdies", - "enum": [ - "Rowdies" - ] + "const": "Rowdies" }, { "title": "Rozha One", "markdownDescription": "https://fonts.google.com/specimen/Rozha+One", - "enum": [ - "Rozha One" - ] + "const": "Rozha One" }, { "title": "Rubik", "markdownDescription": "https://fonts.google.com/specimen/Rubik", - "enum": [ - "Rubik" - ] + "const": "Rubik" }, { "title": "Rubik 80s Fade", "markdownDescription": "https://fonts.google.com/specimen/Rubik+80s+Fade", - "enum": [ - "Rubik 80s Fade" - ] + "const": "Rubik 80s Fade" }, { "title": "Rubik Beastly", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Beastly", - "enum": [ - "Rubik Beastly" - ] + "const": "Rubik Beastly" }, { "title": "Rubik Bubbles", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Bubbles", - "enum": [ - "Rubik Bubbles" - ] + "const": "Rubik Bubbles" }, { "title": "Rubik Burned", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Burned", - "enum": [ - "Rubik Burned" - ] + "const": "Rubik Burned" }, { "title": "Rubik Dirt", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Dirt", - "enum": [ - "Rubik Dirt" - ] + "const": "Rubik Dirt" }, { "title": "Rubik Distressed", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Distressed", - "enum": [ - "Rubik Distressed" - ] + "const": "Rubik Distressed" }, { "title": "Rubik Gemstones", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Gemstones", - "enum": [ - "Rubik Gemstones" - ] + "const": "Rubik Gemstones" }, { "title": "Rubik Glitch", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Glitch", - "enum": [ - "Rubik Glitch" - ] + "const": "Rubik Glitch" }, { "title": "Rubik Iso", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Iso", - "enum": [ - "Rubik Iso" - ] + "const": "Rubik Iso" }, { "title": "Rubik Marker Hatch", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Marker+Hatch", - "enum": [ - "Rubik Marker Hatch" - ] + "const": "Rubik Marker Hatch" }, { "title": "Rubik Maze", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Maze", - "enum": [ - "Rubik Maze" - ] + "const": "Rubik Maze" }, { "title": "Rubik Microbe", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Microbe", - "enum": [ - "Rubik Microbe" - ] + "const": "Rubik Microbe" }, { "title": "Rubik Mono One", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Mono+One", - "enum": [ - "Rubik Mono One" - ] + "const": "Rubik Mono One" }, { "title": "Rubik Moonrocks", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Moonrocks", - "enum": [ - "Rubik Moonrocks" - ] + "const": "Rubik Moonrocks" }, { "title": "Rubik Pixels", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Pixels", - "enum": [ - "Rubik Pixels" - ] + "const": "Rubik Pixels" }, { "title": "Rubik Puddles", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Puddles", - "enum": [ - "Rubik Puddles" - ] + "const": "Rubik Puddles" }, { "title": "Rubik Spray Paint", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Spray+Paint", - "enum": [ - "Rubik Spray Paint" - ] + "const": "Rubik Spray Paint" }, { "title": "Rubik Storm", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Storm", - "enum": [ - "Rubik Storm" - ] + "const": "Rubik Storm" }, { "title": "Rubik Vinyl", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Vinyl", - "enum": [ - "Rubik Vinyl" - ] + "const": "Rubik Vinyl" }, { "title": "Rubik Wet Paint", "markdownDescription": "https://fonts.google.com/specimen/Rubik+Wet+Paint", - "enum": [ - "Rubik Wet Paint" - ] + "const": "Rubik Wet Paint" }, { "title": "Ruda", "markdownDescription": "https://fonts.google.com/specimen/Ruda", - "enum": [ - "Ruda" - ] + "const": "Ruda" }, { "title": "Rufina", "markdownDescription": "https://fonts.google.com/specimen/Rufina", - "enum": [ - "Rufina" - ] + "const": "Rufina" }, { "title": "Ruge Boogie", "markdownDescription": "https://fonts.google.com/specimen/Ruge+Boogie", - "enum": [ - "Ruge Boogie" - ] + "const": "Ruge Boogie" }, { "title": "Ruluko", "markdownDescription": "https://fonts.google.com/specimen/Ruluko", - "enum": [ - "Ruluko" - ] + "const": "Ruluko" }, { "title": "Rum Raisin", "markdownDescription": "https://fonts.google.com/specimen/Rum+Raisin", - "enum": [ - "Rum Raisin" - ] + "const": "Rum Raisin" }, { "title": "Ruslan Display", "markdownDescription": "https://fonts.google.com/specimen/Ruslan+Display", - "enum": [ - "Ruslan Display" - ] + "const": "Ruslan Display" }, { "title": "Russo One", "markdownDescription": "https://fonts.google.com/specimen/Russo+One", - "enum": [ - "Russo One" - ] + "const": "Russo One" }, { "title": "Ruthie", "markdownDescription": "https://fonts.google.com/specimen/Ruthie", - "enum": [ - "Ruthie" - ] + "const": "Ruthie" }, { "title": "Ruwudu", "markdownDescription": "https://fonts.google.com/specimen/Ruwudu", - "enum": [ - "Ruwudu" - ] + "const": "Ruwudu" }, { "title": "Rye", "markdownDescription": "https://fonts.google.com/specimen/Rye", - "enum": [ - "Rye" - ] + "const": "Rye" }, { "title": "STIX Two Text", "markdownDescription": "https://fonts.google.com/specimen/STIX+Two+Text", - "enum": [ - "STIX Two Text" - ] + "const": "STIX Two Text" }, { "title": "Sacramento", "markdownDescription": "https://fonts.google.com/specimen/Sacramento", - "enum": [ - "Sacramento" - ] + "const": "Sacramento" }, { "title": "Sahitya", "markdownDescription": "https://fonts.google.com/specimen/Sahitya", - "enum": [ - "Sahitya" - ] + "const": "Sahitya" }, { "title": "Sail", "markdownDescription": "https://fonts.google.com/specimen/Sail", - "enum": [ - "Sail" - ] + "const": "Sail" }, { "title": "Saira", "markdownDescription": "https://fonts.google.com/specimen/Saira", - "enum": [ - "Saira" - ] + "const": "Saira" }, { "title": "Saira Condensed", "markdownDescription": "https://fonts.google.com/specimen/Saira+Condensed", - "enum": [ - "Saira Condensed" - ] + "const": "Saira Condensed" }, { "title": "Saira Extra Condensed", "markdownDescription": "https://fonts.google.com/specimen/Saira+Extra+Condensed", - "enum": [ - "Saira Extra Condensed" - ] + "const": "Saira Extra Condensed" }, { "title": "Saira Semi Condensed", "markdownDescription": "https://fonts.google.com/specimen/Saira+Semi+Condensed", - "enum": [ - "Saira Semi Condensed" - ] + "const": "Saira Semi Condensed" }, { "title": "Saira Stencil One", "markdownDescription": "https://fonts.google.com/specimen/Saira+Stencil+One", - "enum": [ - "Saira Stencil One" - ] + "const": "Saira Stencil One" }, { "title": "Salsa", "markdownDescription": "https://fonts.google.com/specimen/Salsa", - "enum": [ - "Salsa" - ] + "const": "Salsa" }, { "title": "Sanchez", "markdownDescription": "https://fonts.google.com/specimen/Sanchez", - "enum": [ - "Sanchez" - ] + "const": "Sanchez" }, { "title": "Sancreek", "markdownDescription": "https://fonts.google.com/specimen/Sancreek", - "enum": [ - "Sancreek" - ] + "const": "Sancreek" }, { "title": "Sansita", "markdownDescription": "https://fonts.google.com/specimen/Sansita", - "enum": [ - "Sansita" - ] + "const": "Sansita" }, { "title": "Sansita Swashed", "markdownDescription": "https://fonts.google.com/specimen/Sansita+Swashed", - "enum": [ - "Sansita Swashed" - ] + "const": "Sansita Swashed" }, { "title": "Sarabun", "markdownDescription": "https://fonts.google.com/specimen/Sarabun", - "enum": [ - "Sarabun" - ] + "const": "Sarabun" }, { "title": "Sarala", "markdownDescription": "https://fonts.google.com/specimen/Sarala", - "enum": [ - "Sarala" - ] + "const": "Sarala" }, { "title": "Sarina", "markdownDescription": "https://fonts.google.com/specimen/Sarina", - "enum": [ - "Sarina" - ] + "const": "Sarina" }, { "title": "Sarpanch", "markdownDescription": "https://fonts.google.com/specimen/Sarpanch", - "enum": [ - "Sarpanch" - ] + "const": "Sarpanch" }, { "title": "Sassy Frass", "markdownDescription": "https://fonts.google.com/specimen/Sassy+Frass", - "enum": [ - "Sassy Frass" - ] + "const": "Sassy Frass" }, { "title": "Satisfy", "markdownDescription": "https://fonts.google.com/specimen/Satisfy", - "enum": [ - "Satisfy" - ] + "const": "Satisfy" }, { "title": "Sawarabi Gothic", "markdownDescription": "https://fonts.google.com/specimen/Sawarabi+Gothic", - "enum": [ - "Sawarabi Gothic" - ] + "const": "Sawarabi Gothic" }, { "title": "Sawarabi Mincho", "markdownDescription": "https://fonts.google.com/specimen/Sawarabi+Mincho", - "enum": [ - "Sawarabi Mincho" - ] + "const": "Sawarabi Mincho" }, { "title": "Scada", "markdownDescription": "https://fonts.google.com/specimen/Scada", - "enum": [ - "Scada" - ] + "const": "Scada" }, { "title": "Scheherazade New", "markdownDescription": "https://fonts.google.com/specimen/Scheherazade+New", - "enum": [ - "Scheherazade New" - ] + "const": "Scheherazade New" }, { "title": "Schibsted Grotesk", "markdownDescription": "https://fonts.google.com/specimen/Schibsted+Grotesk", - "enum": [ - "Schibsted Grotesk" - ] + "const": "Schibsted Grotesk" }, { "title": "Schoolbell", "markdownDescription": "https://fonts.google.com/specimen/Schoolbell", - "enum": [ - "Schoolbell" - ] + "const": "Schoolbell" }, { "title": "Scope One", "markdownDescription": "https://fonts.google.com/specimen/Scope+One", - "enum": [ - "Scope One" - ] + "const": "Scope One" }, { "title": "Seaweed Script", "markdownDescription": "https://fonts.google.com/specimen/Seaweed+Script", - "enum": [ - "Seaweed Script" - ] + "const": "Seaweed Script" }, { "title": "Secular One", "markdownDescription": "https://fonts.google.com/specimen/Secular+One", - "enum": [ - "Secular One" - ] + "const": "Secular One" }, { "title": "Sedgwick Ave", "markdownDescription": "https://fonts.google.com/specimen/Sedgwick+Ave", - "enum": [ - "Sedgwick Ave" - ] + "const": "Sedgwick Ave" }, { "title": "Sedgwick Ave Display", "markdownDescription": "https://fonts.google.com/specimen/Sedgwick+Ave+Display", - "enum": [ - "Sedgwick Ave Display" - ] + "const": "Sedgwick Ave Display" }, { "title": "Sen", "markdownDescription": "https://fonts.google.com/specimen/Sen", - "enum": [ - "Sen" - ] + "const": "Sen" }, { "title": "Send Flowers", "markdownDescription": "https://fonts.google.com/specimen/Send+Flowers", - "enum": [ - "Send Flowers" - ] + "const": "Send Flowers" }, { "title": "Sevillana", "markdownDescription": "https://fonts.google.com/specimen/Sevillana", - "enum": [ - "Sevillana" - ] + "const": "Sevillana" }, { "title": "Seymour One", "markdownDescription": "https://fonts.google.com/specimen/Seymour+One", - "enum": [ - "Seymour One" - ] + "const": "Seymour One" }, { "title": "Shadows Into Light", "markdownDescription": "https://fonts.google.com/specimen/Shadows+Into+Light", - "enum": [ - "Shadows Into Light" - ] + "const": "Shadows Into Light" }, { "title": "Shadows Into Light Two", "markdownDescription": "https://fonts.google.com/specimen/Shadows+Into+Light+Two", - "enum": [ - "Shadows Into Light Two" - ] + "const": "Shadows Into Light Two" }, { "title": "Shalimar", "markdownDescription": "https://fonts.google.com/specimen/Shalimar", - "enum": [ - "Shalimar" - ] + "const": "Shalimar" }, { "title": "Shantell Sans", "markdownDescription": "https://fonts.google.com/specimen/Shantell+Sans", - "enum": [ - "Shantell Sans" - ] + "const": "Shantell Sans" }, { "title": "Shanti", "markdownDescription": "https://fonts.google.com/specimen/Shanti", - "enum": [ - "Shanti" - ] + "const": "Shanti" }, { "title": "Share", "markdownDescription": "https://fonts.google.com/specimen/Share", - "enum": [ - "Share" - ] + "const": "Share" }, { "title": "Share Tech", "markdownDescription": "https://fonts.google.com/specimen/Share+Tech", - "enum": [ - "Share Tech" - ] + "const": "Share Tech" }, { "title": "Share Tech Mono", "markdownDescription": "https://fonts.google.com/specimen/Share+Tech+Mono", - "enum": [ - "Share Tech Mono" - ] + "const": "Share Tech Mono" }, { "title": "Shippori Antique", "markdownDescription": "https://fonts.google.com/specimen/Shippori+Antique", - "enum": [ - "Shippori Antique" - ] + "const": "Shippori Antique" }, { "title": "Shippori Antique B1", "markdownDescription": "https://fonts.google.com/specimen/Shippori+Antique+B1", - "enum": [ - "Shippori Antique B1" - ] + "const": "Shippori Antique B1" }, { "title": "Shippori Mincho", "markdownDescription": "https://fonts.google.com/specimen/Shippori+Mincho", - "enum": [ - "Shippori Mincho" - ] + "const": "Shippori Mincho" }, { "title": "Shippori Mincho B1", "markdownDescription": "https://fonts.google.com/specimen/Shippori+Mincho+B1", - "enum": [ - "Shippori Mincho B1" - ] + "const": "Shippori Mincho B1" }, { "title": "Shizuru", "markdownDescription": "https://fonts.google.com/specimen/Shizuru", - "enum": [ - "Shizuru" - ] + "const": "Shizuru" }, { "title": "Shojumaru", "markdownDescription": "https://fonts.google.com/specimen/Shojumaru", - "enum": [ - "Shojumaru" - ] + "const": "Shojumaru" }, { "title": "Short Stack", "markdownDescription": "https://fonts.google.com/specimen/Short+Stack", - "enum": [ - "Short Stack" - ] + "const": "Short Stack" }, { "title": "Shrikhand", "markdownDescription": "https://fonts.google.com/specimen/Shrikhand", - "enum": [ - "Shrikhand" - ] + "const": "Shrikhand" }, { "title": "Siemreap", "markdownDescription": "https://fonts.google.com/specimen/Siemreap", - "enum": [ - "Siemreap" - ] + "const": "Siemreap" }, { "title": "Sigmar", "markdownDescription": "https://fonts.google.com/specimen/Sigmar", - "enum": [ - "Sigmar" - ] + "const": "Sigmar" }, { "title": "Sigmar One", "markdownDescription": "https://fonts.google.com/specimen/Sigmar+One", - "enum": [ - "Sigmar One" - ] + "const": "Sigmar One" }, { "title": "Signika", "markdownDescription": "https://fonts.google.com/specimen/Signika", - "enum": [ - "Signika" - ] + "const": "Signika" }, { "title": "Signika Negative", "markdownDescription": "https://fonts.google.com/specimen/Signika+Negative", - "enum": [ - "Signika Negative" - ] + "const": "Signika Negative" }, { "title": "Silkscreen", "markdownDescription": "https://fonts.google.com/specimen/Silkscreen", - "enum": [ - "Silkscreen" - ] + "const": "Silkscreen" }, { "title": "Simonetta", "markdownDescription": "https://fonts.google.com/specimen/Simonetta", - "enum": [ - "Simonetta" - ] + "const": "Simonetta" }, { "title": "Single Day", "markdownDescription": "https://fonts.google.com/specimen/Single+Day", - "enum": [ - "Single Day" - ] + "const": "Single Day" }, { "title": "Sintony", "markdownDescription": "https://fonts.google.com/specimen/Sintony", - "enum": [ - "Sintony" - ] + "const": "Sintony" }, { "title": "Sirin Stencil", "markdownDescription": "https://fonts.google.com/specimen/Sirin+Stencil", - "enum": [ - "Sirin Stencil" - ] + "const": "Sirin Stencil" }, { "title": "Six Caps", "markdownDescription": "https://fonts.google.com/specimen/Six+Caps", - "enum": [ - "Six Caps" - ] + "const": "Six Caps" }, { "title": "Skranji", "markdownDescription": "https://fonts.google.com/specimen/Skranji", - "enum": [ - "Skranji" - ] + "const": "Skranji" }, { "title": "Slabo 13px", "markdownDescription": "https://fonts.google.com/specimen/Slabo+13px", - "enum": [ - "Slabo 13px" - ] + "const": "Slabo 13px" }, { "title": "Slabo 27px", "markdownDescription": "https://fonts.google.com/specimen/Slabo+27px", - "enum": [ - "Slabo 27px" - ] + "const": "Slabo 27px" }, { "title": "Slackey", "markdownDescription": "https://fonts.google.com/specimen/Slackey", - "enum": [ - "Slackey" - ] + "const": "Slackey" }, { "title": "Slackside One", "markdownDescription": "https://fonts.google.com/specimen/Slackside+One", - "enum": [ - "Slackside One" - ] + "const": "Slackside One" }, { "title": "Smokum", "markdownDescription": "https://fonts.google.com/specimen/Smokum", - "enum": [ - "Smokum" - ] + "const": "Smokum" }, { "title": "Smooch", "markdownDescription": "https://fonts.google.com/specimen/Smooch", - "enum": [ - "Smooch" - ] + "const": "Smooch" }, { "title": "Smooch Sans", "markdownDescription": "https://fonts.google.com/specimen/Smooch+Sans", - "enum": [ - "Smooch Sans" - ] + "const": "Smooch Sans" }, { "title": "Smythe", "markdownDescription": "https://fonts.google.com/specimen/Smythe", - "enum": [ - "Smythe" - ] + "const": "Smythe" }, { "title": "Sniglet", "markdownDescription": "https://fonts.google.com/specimen/Sniglet", - "enum": [ - "Sniglet" - ] + "const": "Sniglet" }, { "title": "Snippet", "markdownDescription": "https://fonts.google.com/specimen/Snippet", - "enum": [ - "Snippet" - ] + "const": "Snippet" }, { "title": "Snowburst One", "markdownDescription": "https://fonts.google.com/specimen/Snowburst+One", - "enum": [ - "Snowburst One" - ] + "const": "Snowburst One" }, { "title": "Sofadi One", "markdownDescription": "https://fonts.google.com/specimen/Sofadi+One", - "enum": [ - "Sofadi One" - ] + "const": "Sofadi One" }, { "title": "Sofia", "markdownDescription": "https://fonts.google.com/specimen/Sofia", - "enum": [ - "Sofia" - ] + "const": "Sofia" }, { "title": "Sofia Sans", "markdownDescription": "https://fonts.google.com/specimen/Sofia+Sans", - "enum": [ - "Sofia Sans" - ] + "const": "Sofia Sans" }, { "title": "Sofia Sans Condensed", "markdownDescription": "https://fonts.google.com/specimen/Sofia+Sans+Condensed", - "enum": [ - "Sofia Sans Condensed" - ] + "const": "Sofia Sans Condensed" }, { "title": "Sofia Sans Extra Condensed", "markdownDescription": "https://fonts.google.com/specimen/Sofia+Sans+Extra+Condensed", - "enum": [ - "Sofia Sans Extra Condensed" - ] + "const": "Sofia Sans Extra Condensed" }, { "title": "Sofia Sans Semi Condensed", "markdownDescription": "https://fonts.google.com/specimen/Sofia+Sans+Semi+Condensed", - "enum": [ - "Sofia Sans Semi Condensed" - ] + "const": "Sofia Sans Semi Condensed" }, { "title": "Solitreo", "markdownDescription": "https://fonts.google.com/specimen/Solitreo", - "enum": [ - "Solitreo" - ] + "const": "Solitreo" }, { "title": "Solway", "markdownDescription": "https://fonts.google.com/specimen/Solway", - "enum": [ - "Solway" - ] + "const": "Solway" }, { "title": "Sometype Mono", "markdownDescription": "https://fonts.google.com/specimen/Sometype+Mono", - "enum": [ - "Sometype Mono" - ] + "const": "Sometype Mono" }, { "title": "Song Myung", "markdownDescription": "https://fonts.google.com/specimen/Song+Myung", - "enum": [ - "Song Myung" - ] + "const": "Song Myung" }, { "title": "Sono", "markdownDescription": "https://fonts.google.com/specimen/Sono", - "enum": [ - "Sono" - ] + "const": "Sono" }, { "title": "Sonsie One", "markdownDescription": "https://fonts.google.com/specimen/Sonsie+One", - "enum": [ - "Sonsie One" - ] + "const": "Sonsie One" }, { "title": "Sora", "markdownDescription": "https://fonts.google.com/specimen/Sora", - "enum": [ - "Sora" - ] + "const": "Sora" }, { "title": "Sorts Mill Goudy", "markdownDescription": "https://fonts.google.com/specimen/Sorts+Mill+Goudy", - "enum": [ - "Sorts Mill Goudy" - ] + "const": "Sorts Mill Goudy" }, { "title": "Source Code Pro", "markdownDescription": "https://fonts.google.com/specimen/Source+Code+Pro", - "enum": [ - "Source Code Pro" - ] + "const": "Source Code Pro" }, { "title": "Source Sans 3", "markdownDescription": "https://fonts.google.com/specimen/Source+Sans+3", - "enum": [ - "Source Sans 3" - ] + "const": "Source Sans 3" }, { "title": "Source Serif 4", "markdownDescription": "https://fonts.google.com/specimen/Source+Serif+4", - "enum": [ - "Source Serif 4" - ] + "const": "Source Serif 4" }, { "title": "Space Grotesk", "markdownDescription": "https://fonts.google.com/specimen/Space+Grotesk", - "enum": [ - "Space Grotesk" - ] + "const": "Space Grotesk" }, { "title": "Space Mono", "markdownDescription": "https://fonts.google.com/specimen/Space+Mono", - "enum": [ - "Space Mono" - ] + "const": "Space Mono" }, { "title": "Special Elite", "markdownDescription": "https://fonts.google.com/specimen/Special+Elite", - "enum": [ - "Special Elite" - ] + "const": "Special Elite" }, { "title": "Spectral", "markdownDescription": "https://fonts.google.com/specimen/Spectral", - "enum": [ - "Spectral" - ] + "const": "Spectral" }, { "title": "Spectral SC", "markdownDescription": "https://fonts.google.com/specimen/Spectral+SC", - "enum": [ - "Spectral SC" - ] + "const": "Spectral SC" }, { "title": "Spicy Rice", "markdownDescription": "https://fonts.google.com/specimen/Spicy+Rice", - "enum": [ - "Spicy Rice" - ] + "const": "Spicy Rice" }, { "title": "Spinnaker", "markdownDescription": "https://fonts.google.com/specimen/Spinnaker", - "enum": [ - "Spinnaker" - ] + "const": "Spinnaker" }, { "title": "Spirax", "markdownDescription": "https://fonts.google.com/specimen/Spirax", - "enum": [ - "Spirax" - ] + "const": "Spirax" }, { "title": "Splash", "markdownDescription": "https://fonts.google.com/specimen/Splash", - "enum": [ - "Splash" - ] + "const": "Splash" }, { "title": "Spline Sans", "markdownDescription": "https://fonts.google.com/specimen/Spline+Sans", - "enum": [ - "Spline Sans" - ] + "const": "Spline Sans" }, { "title": "Spline Sans Mono", "markdownDescription": "https://fonts.google.com/specimen/Spline+Sans+Mono", - "enum": [ - "Spline Sans Mono" - ] + "const": "Spline Sans Mono" }, { "title": "Squada One", "markdownDescription": "https://fonts.google.com/specimen/Squada+One", - "enum": [ - "Squada One" - ] + "const": "Squada One" }, { "title": "Square Peg", "markdownDescription": "https://fonts.google.com/specimen/Square+Peg", - "enum": [ - "Square Peg" - ] + "const": "Square Peg" }, { "title": "Sree Krushnadevaraya", "markdownDescription": "https://fonts.google.com/specimen/Sree+Krushnadevaraya", - "enum": [ - "Sree Krushnadevaraya" - ] + "const": "Sree Krushnadevaraya" }, { "title": "Sriracha", "markdownDescription": "https://fonts.google.com/specimen/Sriracha", - "enum": [ - "Sriracha" - ] + "const": "Sriracha" }, { "title": "Srisakdi", "markdownDescription": "https://fonts.google.com/specimen/Srisakdi", - "enum": [ - "Srisakdi" - ] + "const": "Srisakdi" }, { "title": "Staatliches", "markdownDescription": "https://fonts.google.com/specimen/Staatliches", - "enum": [ - "Staatliches" - ] + "const": "Staatliches" }, { "title": "Stalemate", "markdownDescription": "https://fonts.google.com/specimen/Stalemate", - "enum": [ - "Stalemate" - ] + "const": "Stalemate" }, { "title": "Stalinist One", "markdownDescription": "https://fonts.google.com/specimen/Stalinist+One", - "enum": [ - "Stalinist One" - ] + "const": "Stalinist One" }, { "title": "Stardos Stencil", "markdownDescription": "https://fonts.google.com/specimen/Stardos+Stencil", - "enum": [ - "Stardos Stencil" - ] + "const": "Stardos Stencil" }, { "title": "Stick", "markdownDescription": "https://fonts.google.com/specimen/Stick", - "enum": [ - "Stick" - ] + "const": "Stick" }, { "title": "Stick No Bills", "markdownDescription": "https://fonts.google.com/specimen/Stick+No+Bills", - "enum": [ - "Stick No Bills" - ] + "const": "Stick No Bills" }, { "title": "Stint Ultra Condensed", "markdownDescription": "https://fonts.google.com/specimen/Stint+Ultra+Condensed", - "enum": [ - "Stint Ultra Condensed" - ] + "const": "Stint Ultra Condensed" }, { "title": "Stint Ultra Expanded", "markdownDescription": "https://fonts.google.com/specimen/Stint+Ultra+Expanded", - "enum": [ - "Stint Ultra Expanded" - ] + "const": "Stint Ultra Expanded" }, { "title": "Stoke", "markdownDescription": "https://fonts.google.com/specimen/Stoke", - "enum": [ - "Stoke" - ] + "const": "Stoke" }, { "title": "Strait", "markdownDescription": "https://fonts.google.com/specimen/Strait", - "enum": [ - "Strait" - ] + "const": "Strait" }, { "title": "Style Script", "markdownDescription": "https://fonts.google.com/specimen/Style+Script", - "enum": [ - "Style Script" - ] + "const": "Style Script" }, { "title": "Stylish", "markdownDescription": "https://fonts.google.com/specimen/Stylish", - "enum": [ - "Stylish" - ] + "const": "Stylish" }, { "title": "Sue Ellen Francisco", "markdownDescription": "https://fonts.google.com/specimen/Sue+Ellen+Francisco", - "enum": [ - "Sue Ellen Francisco" - ] + "const": "Sue Ellen Francisco" }, { "title": "Suez One", "markdownDescription": "https://fonts.google.com/specimen/Suez+One", - "enum": [ - "Suez One" - ] + "const": "Suez One" }, { "title": "Sulphur Point", "markdownDescription": "https://fonts.google.com/specimen/Sulphur+Point", - "enum": [ - "Sulphur Point" - ] + "const": "Sulphur Point" }, { "title": "Sumana", "markdownDescription": "https://fonts.google.com/specimen/Sumana", - "enum": [ - "Sumana" - ] + "const": "Sumana" }, { "title": "Sunflower", "markdownDescription": "https://fonts.google.com/specimen/Sunflower", - "enum": [ - "Sunflower" - ] + "const": "Sunflower" }, { "title": "Sunshiney", "markdownDescription": "https://fonts.google.com/specimen/Sunshiney", - "enum": [ - "Sunshiney" - ] + "const": "Sunshiney" }, { "title": "Supermercado One", "markdownDescription": "https://fonts.google.com/specimen/Supermercado+One", - "enum": [ - "Supermercado One" - ] + "const": "Supermercado One" }, { "title": "Sura", "markdownDescription": "https://fonts.google.com/specimen/Sura", - "enum": [ - "Sura" - ] + "const": "Sura" }, { "title": "Suranna", "markdownDescription": "https://fonts.google.com/specimen/Suranna", - "enum": [ - "Suranna" - ] + "const": "Suranna" }, { "title": "Suravaram", "markdownDescription": "https://fonts.google.com/specimen/Suravaram", - "enum": [ - "Suravaram" - ] + "const": "Suravaram" }, { "title": "Suwannaphum", "markdownDescription": "https://fonts.google.com/specimen/Suwannaphum", - "enum": [ - "Suwannaphum" - ] + "const": "Suwannaphum" }, { "title": "Swanky and Moo Moo", "markdownDescription": "https://fonts.google.com/specimen/Swanky+and+Moo+Moo", - "enum": [ - "Swanky and Moo Moo" - ] + "const": "Swanky and Moo Moo" }, { "title": "Syncopate", "markdownDescription": "https://fonts.google.com/specimen/Syncopate", - "enum": [ - "Syncopate" - ] + "const": "Syncopate" }, { "title": "Syne", "markdownDescription": "https://fonts.google.com/specimen/Syne", - "enum": [ - "Syne" - ] + "const": "Syne" }, { "title": "Syne Mono", "markdownDescription": "https://fonts.google.com/specimen/Syne+Mono", - "enum": [ - "Syne Mono" - ] + "const": "Syne Mono" }, { "title": "Syne Tactile", "markdownDescription": "https://fonts.google.com/specimen/Syne+Tactile", - "enum": [ - "Syne Tactile" - ] + "const": "Syne Tactile" }, { "title": "Tai Heritage Pro", "markdownDescription": "https://fonts.google.com/specimen/Tai+Heritage+Pro", - "enum": [ - "Tai Heritage Pro" - ] + "const": "Tai Heritage Pro" }, { "title": "Tajawal", "markdownDescription": "https://fonts.google.com/specimen/Tajawal", - "enum": [ - "Tajawal" - ] + "const": "Tajawal" }, { "title": "Tangerine", "markdownDescription": "https://fonts.google.com/specimen/Tangerine", - "enum": [ - "Tangerine" - ] + "const": "Tangerine" }, { "title": "Tapestry", "markdownDescription": "https://fonts.google.com/specimen/Tapestry", - "enum": [ - "Tapestry" - ] + "const": "Tapestry" }, { "title": "Taprom", "markdownDescription": "https://fonts.google.com/specimen/Taprom", - "enum": [ - "Taprom" - ] + "const": "Taprom" }, { "title": "Tauri", "markdownDescription": "https://fonts.google.com/specimen/Tauri", - "enum": [ - "Tauri" - ] + "const": "Tauri" }, { "title": "Taviraj", "markdownDescription": "https://fonts.google.com/specimen/Taviraj", - "enum": [ - "Taviraj" - ] + "const": "Taviraj" }, { "title": "Teko", "markdownDescription": "https://fonts.google.com/specimen/Teko", - "enum": [ - "Teko" - ] + "const": "Teko" }, { "title": "Tektur", "markdownDescription": "https://fonts.google.com/specimen/Tektur", - "enum": [ - "Tektur" - ] + "const": "Tektur" }, { "title": "Telex", "markdownDescription": "https://fonts.google.com/specimen/Telex", - "enum": [ - "Telex" - ] + "const": "Telex" }, { "title": "Tenali Ramakrishna", "markdownDescription": "https://fonts.google.com/specimen/Tenali+Ramakrishna", - "enum": [ - "Tenali Ramakrishna" - ] + "const": "Tenali Ramakrishna" }, { "title": "Tenor Sans", "markdownDescription": "https://fonts.google.com/specimen/Tenor+Sans", - "enum": [ - "Tenor Sans" - ] + "const": "Tenor Sans" }, { "title": "Text Me One", "markdownDescription": "https://fonts.google.com/specimen/Text+Me+One", - "enum": [ - "Text Me One" - ] + "const": "Text Me One" }, { "title": "Texturina", "markdownDescription": "https://fonts.google.com/specimen/Texturina", - "enum": [ - "Texturina" - ] + "const": "Texturina" }, { "title": "Thasadith", "markdownDescription": "https://fonts.google.com/specimen/Thasadith", - "enum": [ - "Thasadith" - ] + "const": "Thasadith" }, { "title": "The Girl Next Door", "markdownDescription": "https://fonts.google.com/specimen/The+Girl+Next+Door", - "enum": [ - "The Girl Next Door" - ] + "const": "The Girl Next Door" }, { "title": "The Nautigal", "markdownDescription": "https://fonts.google.com/specimen/The+Nautigal", - "enum": [ - "The Nautigal" - ] + "const": "The Nautigal" }, { "title": "Tienne", "markdownDescription": "https://fonts.google.com/specimen/Tienne", - "enum": [ - "Tienne" - ] + "const": "Tienne" }, { "title": "Tillana", "markdownDescription": "https://fonts.google.com/specimen/Tillana", - "enum": [ - "Tillana" - ] + "const": "Tillana" }, { "title": "Tilt Neon", "markdownDescription": "https://fonts.google.com/specimen/Tilt+Neon", - "enum": [ - "Tilt Neon" - ] + "const": "Tilt Neon" }, { "title": "Tilt Prism", "markdownDescription": "https://fonts.google.com/specimen/Tilt+Prism", - "enum": [ - "Tilt Prism" - ] + "const": "Tilt Prism" }, { "title": "Tilt Warp", "markdownDescription": "https://fonts.google.com/specimen/Tilt+Warp", - "enum": [ - "Tilt Warp" - ] + "const": "Tilt Warp" }, { "title": "Timmana", "markdownDescription": "https://fonts.google.com/specimen/Timmana", - "enum": [ - "Timmana" - ] + "const": "Timmana" }, { "title": "Tinos", "markdownDescription": "https://fonts.google.com/specimen/Tinos", - "enum": [ - "Tinos" - ] + "const": "Tinos" }, { "title": "Tiro Bangla", "markdownDescription": "https://fonts.google.com/specimen/Tiro+Bangla", - "enum": [ - "Tiro Bangla" - ] + "const": "Tiro Bangla" }, { "title": "Tiro Devanagari Hindi", "markdownDescription": "https://fonts.google.com/specimen/Tiro+Devanagari+Hindi", - "enum": [ - "Tiro Devanagari Hindi" - ] + "const": "Tiro Devanagari Hindi" }, { "title": "Tiro Devanagari Marathi", "markdownDescription": "https://fonts.google.com/specimen/Tiro+Devanagari+Marathi", - "enum": [ - "Tiro Devanagari Marathi" - ] + "const": "Tiro Devanagari Marathi" }, { "title": "Tiro Devanagari Sanskrit", "markdownDescription": "https://fonts.google.com/specimen/Tiro+Devanagari+Sanskrit", - "enum": [ - "Tiro Devanagari Sanskrit" - ] + "const": "Tiro Devanagari Sanskrit" }, { "title": "Tiro Gurmukhi", "markdownDescription": "https://fonts.google.com/specimen/Tiro+Gurmukhi", - "enum": [ - "Tiro Gurmukhi" - ] + "const": "Tiro Gurmukhi" }, { "title": "Tiro Kannada", "markdownDescription": "https://fonts.google.com/specimen/Tiro+Kannada", - "enum": [ - "Tiro Kannada" - ] + "const": "Tiro Kannada" }, { "title": "Tiro Tamil", "markdownDescription": "https://fonts.google.com/specimen/Tiro+Tamil", - "enum": [ - "Tiro Tamil" - ] + "const": "Tiro Tamil" }, { "title": "Tiro Telugu", "markdownDescription": "https://fonts.google.com/specimen/Tiro+Telugu", - "enum": [ - "Tiro Telugu" - ] + "const": "Tiro Telugu" }, { "title": "Titan One", "markdownDescription": "https://fonts.google.com/specimen/Titan+One", - "enum": [ - "Titan One" - ] + "const": "Titan One" }, { "title": "Titillium Web", "markdownDescription": "https://fonts.google.com/specimen/Titillium+Web", - "enum": [ - "Titillium Web" - ] + "const": "Titillium Web" }, { "title": "Tomorrow", "markdownDescription": "https://fonts.google.com/specimen/Tomorrow", - "enum": [ - "Tomorrow" - ] + "const": "Tomorrow" }, { "title": "Tourney", "markdownDescription": "https://fonts.google.com/specimen/Tourney", - "enum": [ - "Tourney" - ] + "const": "Tourney" }, { "title": "Trade Winds", "markdownDescription": "https://fonts.google.com/specimen/Trade+Winds", - "enum": [ - "Trade Winds" - ] + "const": "Trade Winds" }, { "title": "Train One", "markdownDescription": "https://fonts.google.com/specimen/Train+One", - "enum": [ - "Train One" - ] + "const": "Train One" }, { "title": "Trirong", "markdownDescription": "https://fonts.google.com/specimen/Trirong", - "enum": [ - "Trirong" - ] + "const": "Trirong" }, { "title": "Trispace", "markdownDescription": "https://fonts.google.com/specimen/Trispace", - "enum": [ - "Trispace" - ] + "const": "Trispace" }, { "title": "Trocchi", "markdownDescription": "https://fonts.google.com/specimen/Trocchi", - "enum": [ - "Trocchi" - ] + "const": "Trocchi" }, { "title": "Trochut", "markdownDescription": "https://fonts.google.com/specimen/Trochut", - "enum": [ - "Trochut" - ] + "const": "Trochut" }, { "title": "Truculenta", "markdownDescription": "https://fonts.google.com/specimen/Truculenta", - "enum": [ - "Truculenta" - ] + "const": "Truculenta" }, { "title": "Trykker", "markdownDescription": "https://fonts.google.com/specimen/Trykker", - "enum": [ - "Trykker" - ] + "const": "Trykker" }, { "title": "Tsukimi Rounded", "markdownDescription": "https://fonts.google.com/specimen/Tsukimi+Rounded", - "enum": [ - "Tsukimi Rounded" - ] + "const": "Tsukimi Rounded" }, { "title": "Tulpen One", "markdownDescription": "https://fonts.google.com/specimen/Tulpen+One", - "enum": [ - "Tulpen One" - ] + "const": "Tulpen One" }, { "title": "Turret Road", "markdownDescription": "https://fonts.google.com/specimen/Turret+Road", - "enum": [ - "Turret Road" - ] + "const": "Turret Road" }, { "title": "Twinkle Star", "markdownDescription": "https://fonts.google.com/specimen/Twinkle+Star", - "enum": [ - "Twinkle Star" - ] + "const": "Twinkle Star" }, { "title": "Ubuntu", "markdownDescription": "https://fonts.google.com/specimen/Ubuntu", - "enum": [ - "Ubuntu" - ] + "const": "Ubuntu" }, { "title": "Ubuntu Condensed", "markdownDescription": "https://fonts.google.com/specimen/Ubuntu+Condensed", - "enum": [ - "Ubuntu Condensed" - ] + "const": "Ubuntu Condensed" }, { "title": "Ubuntu Mono", "markdownDescription": "https://fonts.google.com/specimen/Ubuntu+Mono", - "enum": [ - "Ubuntu Mono" - ] + "const": "Ubuntu Mono" }, { "title": "Uchen", "markdownDescription": "https://fonts.google.com/specimen/Uchen", - "enum": [ - "Uchen" - ] + "const": "Uchen" }, { "title": "Ultra", "markdownDescription": "https://fonts.google.com/specimen/Ultra", - "enum": [ - "Ultra" - ] + "const": "Ultra" }, { "title": "Unbounded", "markdownDescription": "https://fonts.google.com/specimen/Unbounded", - "enum": [ - "Unbounded" - ] + "const": "Unbounded" }, { "title": "Uncial Antiqua", "markdownDescription": "https://fonts.google.com/specimen/Uncial+Antiqua", - "enum": [ - "Uncial Antiqua" - ] + "const": "Uncial Antiqua" }, { "title": "Underdog", "markdownDescription": "https://fonts.google.com/specimen/Underdog", - "enum": [ - "Underdog" - ] + "const": "Underdog" }, { "title": "Unica One", "markdownDescription": "https://fonts.google.com/specimen/Unica+One", - "enum": [ - "Unica One" - ] + "const": "Unica One" }, { "title": "UnifrakturCook", "markdownDescription": "https://fonts.google.com/specimen/UnifrakturCook", - "enum": [ - "UnifrakturCook" - ] + "const": "UnifrakturCook" }, { "title": "UnifrakturMaguntia", "markdownDescription": "https://fonts.google.com/specimen/UnifrakturMaguntia", - "enum": [ - "UnifrakturMaguntia" - ] + "const": "UnifrakturMaguntia" }, { "title": "Unkempt", "markdownDescription": "https://fonts.google.com/specimen/Unkempt", - "enum": [ - "Unkempt" - ] + "const": "Unkempt" }, { "title": "Unlock", "markdownDescription": "https://fonts.google.com/specimen/Unlock", - "enum": [ - "Unlock" - ] + "const": "Unlock" }, { "title": "Unna", "markdownDescription": "https://fonts.google.com/specimen/Unna", - "enum": [ - "Unna" - ] + "const": "Unna" }, { "title": "Updock", "markdownDescription": "https://fonts.google.com/specimen/Updock", - "enum": [ - "Updock" - ] + "const": "Updock" }, { "title": "Urbanist", "markdownDescription": "https://fonts.google.com/specimen/Urbanist", - "enum": [ - "Urbanist" - ] + "const": "Urbanist" }, { "title": "VT323", "markdownDescription": "https://fonts.google.com/specimen/VT323", - "enum": [ - "VT323" - ] + "const": "VT323" }, { "title": "Vampiro One", "markdownDescription": "https://fonts.google.com/specimen/Vampiro+One", - "enum": [ - "Vampiro One" - ] + "const": "Vampiro One" }, { "title": "Varela", "markdownDescription": "https://fonts.google.com/specimen/Varela", - "enum": [ - "Varela" - ] + "const": "Varela" }, { "title": "Varela Round", "markdownDescription": "https://fonts.google.com/specimen/Varela+Round", - "enum": [ - "Varela Round" - ] + "const": "Varela Round" }, { "title": "Varta", "markdownDescription": "https://fonts.google.com/specimen/Varta", - "enum": [ - "Varta" - ] + "const": "Varta" }, { "title": "Vast Shadow", "markdownDescription": "https://fonts.google.com/specimen/Vast+Shadow", - "enum": [ - "Vast Shadow" - ] + "const": "Vast Shadow" }, { "title": "Vazirmatn", "markdownDescription": "https://fonts.google.com/specimen/Vazirmatn", - "enum": [ - "Vazirmatn" - ] + "const": "Vazirmatn" }, { "title": "Vesper Libre", "markdownDescription": "https://fonts.google.com/specimen/Vesper+Libre", - "enum": [ - "Vesper Libre" - ] + "const": "Vesper Libre" }, { "title": "Viaoda Libre", "markdownDescription": "https://fonts.google.com/specimen/Viaoda+Libre", - "enum": [ - "Viaoda Libre" - ] + "const": "Viaoda Libre" }, { "title": "Vibes", "markdownDescription": "https://fonts.google.com/specimen/Vibes", - "enum": [ - "Vibes" - ] + "const": "Vibes" }, { "title": "Vibur", "markdownDescription": "https://fonts.google.com/specimen/Vibur", - "enum": [ - "Vibur" - ] + "const": "Vibur" }, { "title": "Victor Mono", "markdownDescription": "https://fonts.google.com/specimen/Victor+Mono", - "enum": [ - "Victor Mono" - ] + "const": "Victor Mono" }, { "title": "Vidaloka", "markdownDescription": "https://fonts.google.com/specimen/Vidaloka", - "enum": [ - "Vidaloka" - ] + "const": "Vidaloka" }, { "title": "Viga", "markdownDescription": "https://fonts.google.com/specimen/Viga", - "enum": [ - "Viga" - ] + "const": "Viga" }, { "title": "Vina Sans", "markdownDescription": "https://fonts.google.com/specimen/Vina+Sans", - "enum": [ - "Vina Sans" - ] + "const": "Vina Sans" }, { "title": "Voces", "markdownDescription": "https://fonts.google.com/specimen/Voces", - "enum": [ - "Voces" - ] + "const": "Voces" }, { "title": "Volkhov", "markdownDescription": "https://fonts.google.com/specimen/Volkhov", - "enum": [ - "Volkhov" - ] + "const": "Volkhov" }, { "title": "Vollkorn", "markdownDescription": "https://fonts.google.com/specimen/Vollkorn", - "enum": [ - "Vollkorn" - ] + "const": "Vollkorn" }, { "title": "Vollkorn SC", "markdownDescription": "https://fonts.google.com/specimen/Vollkorn+SC", - "enum": [ - "Vollkorn SC" - ] + "const": "Vollkorn SC" }, { "title": "Voltaire", "markdownDescription": "https://fonts.google.com/specimen/Voltaire", - "enum": [ - "Voltaire" - ] + "const": "Voltaire" }, { "title": "Vujahday Script", "markdownDescription": "https://fonts.google.com/specimen/Vujahday+Script", - "enum": [ - "Vujahday Script" - ] + "const": "Vujahday Script" }, { "title": "Waiting for the Sunrise", "markdownDescription": "https://fonts.google.com/specimen/Waiting+for+the+Sunrise", - "enum": [ - "Waiting for the Sunrise" - ] + "const": "Waiting for the Sunrise" }, { "title": "Wallpoet", "markdownDescription": "https://fonts.google.com/specimen/Wallpoet", - "enum": [ - "Wallpoet" - ] + "const": "Wallpoet" }, { "title": "Walter Turncoat", "markdownDescription": "https://fonts.google.com/specimen/Walter+Turncoat", - "enum": [ - "Walter Turncoat" - ] + "const": "Walter Turncoat" }, { "title": "Warnes", "markdownDescription": "https://fonts.google.com/specimen/Warnes", - "enum": [ - "Warnes" - ] + "const": "Warnes" }, { "title": "Water Brush", "markdownDescription": "https://fonts.google.com/specimen/Water+Brush", - "enum": [ - "Water Brush" - ] + "const": "Water Brush" }, { "title": "Waterfall", "markdownDescription": "https://fonts.google.com/specimen/Waterfall", - "enum": [ - "Waterfall" - ] + "const": "Waterfall" }, { "title": "Wavefont", "markdownDescription": "https://fonts.google.com/specimen/Wavefont", - "enum": [ - "Wavefont" - ] + "const": "Wavefont" }, { "title": "Wellfleet", "markdownDescription": "https://fonts.google.com/specimen/Wellfleet", - "enum": [ - "Wellfleet" - ] + "const": "Wellfleet" }, { "title": "Wendy One", "markdownDescription": "https://fonts.google.com/specimen/Wendy+One", - "enum": [ - "Wendy One" - ] + "const": "Wendy One" }, { "title": "Whisper", "markdownDescription": "https://fonts.google.com/specimen/Whisper", - "enum": [ - "Whisper" - ] + "const": "Whisper" }, { "title": "WindSong", "markdownDescription": "https://fonts.google.com/specimen/WindSong", - "enum": [ - "WindSong" - ] + "const": "WindSong" }, { "title": "Wire One", "markdownDescription": "https://fonts.google.com/specimen/Wire+One", - "enum": [ - "Wire One" - ] + "const": "Wire One" }, { "title": "Wix Madefor Display", "markdownDescription": "https://fonts.google.com/specimen/Wix+Madefor+Display", - "enum": [ - "Wix Madefor Display" - ] + "const": "Wix Madefor Display" }, { "title": "Wix Madefor Text", "markdownDescription": "https://fonts.google.com/specimen/Wix+Madefor+Text", - "enum": [ - "Wix Madefor Text" - ] + "const": "Wix Madefor Text" }, { "title": "Work Sans", "markdownDescription": "https://fonts.google.com/specimen/Work+Sans", - "enum": [ - "Work Sans" - ] + "const": "Work Sans" }, { "title": "Xanh Mono", "markdownDescription": "https://fonts.google.com/specimen/Xanh+Mono", - "enum": [ - "Xanh Mono" - ] + "const": "Xanh Mono" }, { "title": "Yaldevi", "markdownDescription": "https://fonts.google.com/specimen/Yaldevi", - "enum": [ - "Yaldevi" - ] + "const": "Yaldevi" }, { "title": "Yanone Kaffeesatz", "markdownDescription": "https://fonts.google.com/specimen/Yanone+Kaffeesatz", - "enum": [ - "Yanone Kaffeesatz" - ] + "const": "Yanone Kaffeesatz" }, { "title": "Yantramanav", "markdownDescription": "https://fonts.google.com/specimen/Yantramanav", - "enum": [ - "Yantramanav" - ] + "const": "Yantramanav" }, { "title": "Yatra One", "markdownDescription": "https://fonts.google.com/specimen/Yatra+One", - "enum": [ - "Yatra One" - ] + "const": "Yatra One" }, { "title": "Yellowtail", "markdownDescription": "https://fonts.google.com/specimen/Yellowtail", - "enum": [ - "Yellowtail" - ] + "const": "Yellowtail" }, { "title": "Yeon Sung", "markdownDescription": "https://fonts.google.com/specimen/Yeon+Sung", - "enum": [ - "Yeon Sung" - ] + "const": "Yeon Sung" }, { "title": "Yeseva One", "markdownDescription": "https://fonts.google.com/specimen/Yeseva+One", - "enum": [ - "Yeseva One" - ] + "const": "Yeseva One" }, { "title": "Yesteryear", "markdownDescription": "https://fonts.google.com/specimen/Yesteryear", - "enum": [ - "Yesteryear" - ] + "const": "Yesteryear" }, { "title": "Yomogi", "markdownDescription": "https://fonts.google.com/specimen/Yomogi", - "enum": [ - "Yomogi" - ] + "const": "Yomogi" }, { "title": "Young Serif", "markdownDescription": "https://fonts.google.com/specimen/Young+Serif", - "enum": [ - "Young Serif" - ] + "const": "Young Serif" }, { "title": "Yrsa", "markdownDescription": "https://fonts.google.com/specimen/Yrsa", - "enum": [ - "Yrsa" - ] + "const": "Yrsa" }, { "title": "Ysabeau", "markdownDescription": "https://fonts.google.com/specimen/Ysabeau", - "enum": [ - "Ysabeau" - ] + "const": "Ysabeau" }, { "title": "Ysabeau Infant", "markdownDescription": "https://fonts.google.com/specimen/Ysabeau+Infant", - "enum": [ - "Ysabeau Infant" - ] + "const": "Ysabeau Infant" }, { "title": "Ysabeau Office", "markdownDescription": "https://fonts.google.com/specimen/Ysabeau+Office", - "enum": [ - "Ysabeau Office" - ] + "const": "Ysabeau Office" }, { "title": "Ysabeau SC", "markdownDescription": "https://fonts.google.com/specimen/Ysabeau+SC", - "enum": [ - "Ysabeau SC" - ] + "const": "Ysabeau SC" }, { "title": "Yuji Boku", "markdownDescription": "https://fonts.google.com/specimen/Yuji+Boku", - "enum": [ - "Yuji Boku" - ] + "const": "Yuji Boku" }, { "title": "Yuji Hentaigana Akari", "markdownDescription": "https://fonts.google.com/specimen/Yuji+Hentaigana+Akari", - "enum": [ - "Yuji Hentaigana Akari" - ] + "const": "Yuji Hentaigana Akari" }, { "title": "Yuji Hentaigana Akebono", "markdownDescription": "https://fonts.google.com/specimen/Yuji+Hentaigana+Akebono", - "enum": [ - "Yuji Hentaigana Akebono" - ] + "const": "Yuji Hentaigana Akebono" }, { "title": "Yuji Mai", "markdownDescription": "https://fonts.google.com/specimen/Yuji+Mai", - "enum": [ - "Yuji Mai" - ] + "const": "Yuji Mai" }, { "title": "Yuji Syuku", "markdownDescription": "https://fonts.google.com/specimen/Yuji+Syuku", - "enum": [ - "Yuji Syuku" - ] + "const": "Yuji Syuku" }, { "title": "Yusei Magic", "markdownDescription": "https://fonts.google.com/specimen/Yusei+Magic", - "enum": [ - "Yusei Magic" - ] + "const": "Yusei Magic" }, { "title": "ZCOOL KuaiLe", "markdownDescription": "https://fonts.google.com/specimen/ZCOOL+KuaiLe", - "enum": [ - "ZCOOL KuaiLe" - ] + "const": "ZCOOL KuaiLe" }, { "title": "ZCOOL QingKe HuangYou", "markdownDescription": "https://fonts.google.com/specimen/ZCOOL+QingKe+HuangYou", - "enum": [ - "ZCOOL QingKe HuangYou" - ] + "const": "ZCOOL QingKe HuangYou" }, { "title": "ZCOOL XiaoWei", "markdownDescription": "https://fonts.google.com/specimen/ZCOOL+XiaoWei", - "enum": [ - "ZCOOL XiaoWei" - ] + "const": "ZCOOL XiaoWei" }, { "title": "Zen Antique", "markdownDescription": "https://fonts.google.com/specimen/Zen+Antique", - "enum": [ - "Zen Antique" - ] + "const": "Zen Antique" }, { "title": "Zen Antique Soft", "markdownDescription": "https://fonts.google.com/specimen/Zen+Antique+Soft", - "enum": [ - "Zen Antique Soft" - ] + "const": "Zen Antique Soft" }, { "title": "Zen Dots", "markdownDescription": "https://fonts.google.com/specimen/Zen+Dots", - "enum": [ - "Zen Dots" - ] + "const": "Zen Dots" }, { "title": "Zen Kaku Gothic Antique", "markdownDescription": "https://fonts.google.com/specimen/Zen+Kaku+Gothic+Antique", - "enum": [ - "Zen Kaku Gothic Antique" - ] + "const": "Zen Kaku Gothic Antique" }, { "title": "Zen Kaku Gothic New", "markdownDescription": "https://fonts.google.com/specimen/Zen+Kaku+Gothic+New", - "enum": [ - "Zen Kaku Gothic New" - ] + "const": "Zen Kaku Gothic New" }, { "title": "Zen Kurenaido", "markdownDescription": "https://fonts.google.com/specimen/Zen+Kurenaido", - "enum": [ - "Zen Kurenaido" - ] + "const": "Zen Kurenaido" }, { "title": "Zen Loop", "markdownDescription": "https://fonts.google.com/specimen/Zen+Loop", - "enum": [ - "Zen Loop" - ] + "const": "Zen Loop" }, { "title": "Zen Maru Gothic", "markdownDescription": "https://fonts.google.com/specimen/Zen+Maru+Gothic", - "enum": [ - "Zen Maru Gothic" - ] + "const": "Zen Maru Gothic" }, { "title": "Zen Old Mincho", "markdownDescription": "https://fonts.google.com/specimen/Zen+Old+Mincho", - "enum": [ - "Zen Old Mincho" - ] + "const": "Zen Old Mincho" }, { "title": "Zen Tokyo Zoo", "markdownDescription": "https://fonts.google.com/specimen/Zen+Tokyo+Zoo", - "enum": [ - "Zen Tokyo Zoo" - ] + "const": "Zen Tokyo Zoo" }, { "title": "Zeyada", "markdownDescription": "https://fonts.google.com/specimen/Zeyada", - "enum": [ - "Zeyada" - ] + "const": "Zeyada" }, { "title": "Zhi Mang Xing", "markdownDescription": "https://fonts.google.com/specimen/Zhi+Mang+Xing", - "enum": [ - "Zhi Mang Xing" - ] + "const": "Zhi Mang Xing" }, { "title": "Zilla Slab", "markdownDescription": "https://fonts.google.com/specimen/Zilla+Slab", - "enum": [ - "Zilla Slab" - ] + "const": "Zilla Slab" }, { "title": "Zilla Slab Highlight", "markdownDescription": "https://fonts.google.com/specimen/Zilla+Slab+Highlight", - "enum": [ - "Zilla Slab Highlight" - ] + "const": "Zilla Slab Highlight" } ] } \ No newline at end of file diff --git a/docs/schema/assets/icons.json b/docs/schema/assets/icons.json index 17c729a7d..dfe6118af 100644 --- a/docs/schema/assets/icons.json +++ b/docs/schema/assets/icons.json @@ -2029,6 +2029,7 @@ "fontawesome/solid/yen-sign", "fontawesome/solid/yin-yang", "fontawesome/solid/z", + "logo-monochrome", "logo", "material/ab-testing", "material/abacus", @@ -10168,6 +10169,7 @@ "simple/apacheecharts", "simple/apacheflink", "simple/apachegroovy", + "simple/apacheguacamole", "simple/apachehadoop", "simple/apachehive", "simple/apachejmeter", @@ -10324,6 +10326,7 @@ "simple/bitwarden", "simple/bitwig", "simple/blackberry", + "simple/blackmagicdesign", "simple/blazemeter", "simple/blazor", "simple/blender", @@ -10616,6 +10619,7 @@ "simple/delonghi", "simple/delphi", "simple/delta", + "simple/deluge", "simple/deno", "simple/denon", "simple/dependabot", @@ -10637,6 +10641,7 @@ "simple/digg", "simple/digikeyelectronics", "simple/digitalocean", + "simple/dinersclub", "simple/dior", "simple/directus", "simple/discogs", @@ -10774,6 +10779,7 @@ "simple/facebooklive", "simple/faceit", "simple/facepunch", + "simple/fairphone", "simple/falco", "simple/falcon", "simple/fampay", @@ -10862,6 +10868,7 @@ "simple/foxtel", "simple/fozzy", "simple/framer", + "simple/framework", "simple/framework7", "simple/franprix", "simple/fraunhofergesellschaft", @@ -11067,6 +11074,7 @@ "simple/hibernate", "simple/hibob", "simple/hilton", + "simple/hiltonhotelsandresorts", "simple/hitachi", "simple/hive", "simple/hive_blockchain", @@ -11150,6 +11158,7 @@ "simple/inkdrop", "simple/inkscape", "simple/insomnia", + "simple/insta360", "simple/instacart", "simple/instagram", "simple/instapaper", @@ -11427,6 +11436,7 @@ "simple/mastodon", "simple/materialdesign", "simple/materialdesignicons", + "simple/materialformkdocs", "simple/matillion", "simple/matomo", "simple/matrix", @@ -11458,6 +11468,7 @@ "simple/mercedes", "simple/merck", "simple/mercurial", + "simple/mermaid", "simple/messenger", "simple/meta", "simple/metabase", @@ -11541,6 +11552,7 @@ "simple/moscowmetro", "simple/motorola", "simple/mozilla", + "simple/mpv", "simple/mqtt", "simple/msi", "simple/msibusiness", @@ -11749,6 +11761,7 @@ "simple/paypal", "simple/paytm", "simple/pcgamingwiki", + "simple/pdm", "simple/peakdesign", "simple/pearson", "simple/peerlist", @@ -11799,6 +11812,7 @@ "simple/planetscale", "simple/plangrid", "simple/platformdotsh", + "simple/platformio", "simple/platzi", "simple/plausibleanalytics", "simple/playcanvas", @@ -11838,6 +11852,7 @@ "simple/popos", "simple/porsche", "simple/portainer", + "simple/portswigger", "simple/postcss", "simple/postgresql", "simple/posthog", @@ -12063,6 +12078,7 @@ "simple/rust", "simple/rxdb", "simple/ryanair", + "simple/rye", "simple/s7airlines", "simple/sabanci", "simple/safari", @@ -12082,6 +12098,7 @@ "simple/sap", "simple/sass", "simple/sat1", + "simple/satellite", "simple/saturn", "simple/saucelabs", "simple/scala", @@ -12444,6 +12461,7 @@ "simple/trello", "simple/trendmicro", "simple/treyarch", + "simple/tricentis", "simple/trilium", "simple/triller", "simple/trino", @@ -12612,6 +12630,7 @@ "simple/webauthn", "simple/webcomponentsdotorg", "simple/webdriverio", + "simple/webex", "simple/webflow", "simple/webgl", "simple/webhint", @@ -12628,6 +12647,7 @@ "simple/weightsandbiases", "simple/welcometothejungle", "simple/wellfound", + "simple/wellsfargo", "simple/wemo", "simple/westerndigital", "simple/wetransfer", @@ -12710,6 +12730,7 @@ "simple/youtube", "simple/youtubegaming", "simple/youtubemusic", + "simple/youtubeshorts", "simple/youtubestudio", "simple/youtubetv", "simple/yubico", diff --git a/docs/schema/extensions.json b/docs/schema/extensions.json index 50bb5fc5c..6e4b128b5 100644 --- a/docs/schema/extensions.json +++ b/docs/schema/extensions.json @@ -4,15 +4,36 @@ "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/", "type": "array", "items": { - "oneOf": [ + "anyOf": [ { - "$ref": "extensions/markdown.json" + "$ref": "#/$defs/external" }, { - "$ref": "extensions/pymdownx.json" + "$ref": "#/$defs/external-community" } ] }, "uniqueItems": true, - "minItems": 1 + "minItems": 1, + "$defs": { + "external": { + "description": "External markdown extensions, schema provided by us", + "anyOf": [ + { + "$ref": "extensions/markdown.json" + }, + { + "$ref": "extensions/pymdownx.json" + } + ] + }, + "external-community": { + "description": "External markdown extensions, schema provided by our community", + "anyOf": [ + { + "$ref": "https://raw.githubusercontent.com/Neoteroi/mkdocs-plugins/main/docs/extensions-schema.json" + } + ] + } + } } diff --git a/docs/schema/extensions/markdown.json b/docs/schema/extensions/markdown.json index 0de7f1fba..746040faf 100644 --- a/docs/schema/extensions/markdown.json +++ b/docs/schema/extensions/markdown.json @@ -59,6 +59,14 @@ "md_in_html" ] }, + { + "title": "Sane Lists – Python Markdown", + "markdownDescription": "https://python-markdown.github.io/extensions/sane_lists/", + "enum": [ + "markdown.extensions.sane_lists", + "sane_lists" + ] + }, { "title": "Tables – Python Markdown", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown/#tables", diff --git a/docs/schema/extensions/pymdownx.json b/docs/schema/extensions/pymdownx.json index c6f50c79b..9da8895fc 100644 --- a/docs/schema/extensions/pymdownx.json +++ b/docs/schema/extensions/pymdownx.json @@ -27,9 +27,7 @@ { "title": "Arithmatex – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#arithmatex", - "enum": [ - "pymdownx.arithmatex" - ] + "const": "pymdownx.arithmatex" } ] }, @@ -63,9 +61,7 @@ { "title": "BetterEm – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#betterem", - "enum": [ - "pymdownx.betterem" - ] + "const": "pymdownx.betterem" } ] }, @@ -74,9 +70,7 @@ { "title": "Caret – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#caret-mark-tilde", - "enum": [ - "pymdownx.caret" - ] + "const": "pymdownx.caret" }, { "type": "object", @@ -114,9 +108,7 @@ { "title": "Critic – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#critic", - "enum": [ - "pymdownx.critic" - ] + "const": "pymdownx.critic" }, { "type": "object", @@ -145,18 +137,14 @@ { "title": "Details – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#details", - "enum": [ - "pymdownx.details" - ] + "const": "pymdownx.details" }, { "oneOf": [ { "title": "Emoji – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#emoji", - "enum": [ - "pymdownx.emoji" - ] + "const": "pymdownx.emoji" }, { "type": "object", @@ -208,9 +196,7 @@ { "title": "Highlight – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#highlight", - "enum": [ - "pymdownx.highlight" - ] + "const": "pymdownx.highlight" }, { "type": "object", @@ -267,18 +253,14 @@ { "title": "InlineHilite – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#inlinehilite", - "enum": [ - "pymdownx.inlinehilite" - ] + "const": "pymdownx.inlinehilite" }, { "oneOf": [ { "title": "Keys – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#keys", - "enum": [ - "pymdownx.keys" - ] + "const": "pymdownx.keys" }, { "type": "object", @@ -320,9 +302,7 @@ { "title": "MagicLink – Python Markdown Extensions", "markdownDescription": "https://facelessuser.github.io/pymdown-extensions/extensions/magiclink/", - "enum": [ - "pymdownx.magiclink" - ] + "const": "pymdownx.magiclink" }, { "type": "object", @@ -410,9 +390,7 @@ { "title": "Mark – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#caret-mark-tilde", - "enum": [ - "pymdownx.mark" - ] + "const": "pymdownx.mark" }, { "type": "object", @@ -440,9 +418,7 @@ { "title": "SmartSymbols – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#smartsymbols", - "enum": [ - "pymdownx.smartsymbols" - ] + "const": "pymdownx.smartsymbols" }, { "type": "object", @@ -569,9 +545,7 @@ { "title": "Snippets – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#snippets", - "enum": [ - "pymdownx.snippets" - ] + "const": "pymdownx.snippets" } ] }, @@ -580,9 +554,7 @@ { "title": "SuperFences – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#superfences", - "enum": [ - "pymdownx.superfences" - ] + "const": "pymdownx.superfences" }, { "type": "object", @@ -663,9 +635,7 @@ { "title": "Tasklist – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#tasklist", - "enum": [ - "pymdownx.tasklist" - ] + "const": "pymdownx.tasklist" }, { "type": "object", @@ -697,9 +667,7 @@ { "title": "Tilde – Python Markdown Extensions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#caret-mark-tilde", - "enum": [ - "pymdownx.tilde" - ] + "const": "pymdownx.tilde" }, { "type": "object", diff --git a/docs/schema/extra.json b/docs/schema/extra.json index c53f418fa..de1ea6c78 100644 --- a/docs/schema/extra.json +++ b/docs/schema/extra.json @@ -13,99 +13,71 @@ "title": "Analytics provider", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#google-analytics", "type": "object", - "properties": { - "provider": { - "title": "Analytics provider", - "anyOf": [ - { - "title": "Google Analytics", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#google-analytics", - "enum": [ - "google" - ] - }, - { - "type": "string" - } - ] - }, - "property": { - "anyOf": [ - { - "title": "Google Analytics 4", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#google-analytics", - "pattern": "^G-\\w{10}$" - }, - { - "title": "Universal Analytics", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#google-analytics", - "pattern": "^UA-\\w{9}-\\w$" - }, - { - "title": "Unknown property", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#google-analytics", - "type": "string" - } - ] - }, - "feedback": { - "title": "Was this page helpful?", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#was-this-page-helpful", - "type": "object", - "properties": { - "title": { - "title": "Feedback widget title", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#was-this-page-helpful", - "type": "string", - "default": "Was this page helpful?" - }, - "ratings": { - "title": "Feedback ratings", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#was-this-page-helpful", - "type": "array", - "items": { - "title": "Feedback rating", - "type": "object", - "properties": { - "icon": { - "$ref": "#/$defs/icon" - }, - "name": { - "title": "Feedback rating name", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.name", - "type": "string" - }, - "data": { - "title": "Feedback rating data", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.data", - "type": "number" - }, - "note": { - "title": "Feedback rating data", - "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.note", - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "icon", - "name", - "data", - "note" - ] + "allOf": [ + { + "if": { + "properties": { + "provider": { + "const": "google" } } }, - "additionalProperties": false, - "required": [ - "title" - ] + "then": { + "properties": { + "provider": { + "title": "Google Analytics", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#google-analytics", + "const": "google" + }, + "property": { + "anyOf": [ + { + "title": "Google Analytics 4", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#google-analytics", + "pattern": "^G-\\w{10}$" + }, + { + "title": "Unknown property", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#google-analytics", + "type": "string" + } + ] + }, + "feedback": { + "$ref": "#/$defs/feedback" + } + }, + "required": [ + "provider", + "property" + ], + "additionalProperties": false + } + }, + { + "if": { + "properties": { + "provider": { + "type": "string" + } + } + }, + "then": { + "properties": { + "provider": { + "title": "Custom analytics provider", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#custom-site-analytics", + "type": "string" + }, + "feedback": { + "$ref": "#/$defs/feedback" + } + }, + "required": [ + "provider" + ] + } } - }, - "additionalProperties": false, - "required": [ - "provider", - "property" ], "defaultSnippets": [ { @@ -213,21 +185,15 @@ "oneOf": [ { "title": "Button to accept cookies", - "enum": [ - "accept" - ] + "const": "accept" }, { "title": "Button to reject cookies", - "enum": [ - "reject" - ] + "const": "reject" }, { "title": "Button to manage settings", - "enum": [ - "manage" - ] + "const": "manage" } ] }, @@ -334,9 +300,7 @@ "provider": { "title": "Versioning provider", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-versioning/#versioning", - "enum": [ - "mike" - ] + "const": "mike" }, "default": { "title": "Default version", @@ -406,6 +370,59 @@ "type": "string" } ] + }, + "feedback": { + "title": "Was this page helpful?", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#was-this-page-helpful", + "type": "object", + "properties": { + "title": { + "title": "Feedback widget title", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#was-this-page-helpful", + "type": "string", + "default": "Was this page helpful?" + }, + "ratings": { + "title": "Feedback ratings", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#was-this-page-helpful", + "type": "array", + "items": { + "title": "Feedback rating", + "type": "object", + "properties": { + "icon": { + "$ref": "#/$defs/icon" + }, + "name": { + "title": "Feedback rating name", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.name", + "type": "string" + }, + "data": { + "title": "Feedback rating data", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.data", + "type": "number" + }, + "note": { + "title": "Feedback rating data", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-analytics/#+analytics.feedback.ratings.note", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "icon", + "name", + "data", + "note" + ] + } + } + }, + "additionalProperties": false, + "required": [ + "title" + ] } }, "defaultSnippets": [ @@ -414,7 +431,7 @@ "body": { "analytics": { "provider": "${1:google}", - "property": "${2:UA-XXXXXXXX-X}" + "property": "${2:G-XXXXXXXXXX}" } } } diff --git a/docs/schema/plugins/blog.json b/docs/schema/plugins/blog.json index 0163ec227..aaf4ba305 100644 --- a/docs/schema/plugins/blog.json +++ b/docs/schema/plugins/blog.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/", - "enum": [ - "blog" - ] + "const": "blog" }, { "type": "object", @@ -114,15 +112,11 @@ "oneOf": [ { "title": "Post excerpts are optional", - "enum": [ - "optional" - ] + "const": "optional" }, { "title": "Post excerpts are required, thus the build will fail", - "enum": [ - "required" - ] + "const": "required" } ], "default": "optional" @@ -215,6 +209,18 @@ } ] }, + "archive_pagination": { + "title": "Pagination for archive pages", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.archive_pagination", + "type": "boolean", + "default": true + }, + "archive_pagination_per_page": { + "title": "Posts per page for archive pages", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.archive_pagination_per_page", + "type": "number", + "default": 10 + }, "archive_toc": { "title": "Archive table of contents", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.archive_toc", @@ -259,6 +265,27 @@ "type": "string", "default": "\"-\"" }, + "categories_sort_by": { + "title": "Sort categories by this function", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.categories_sort_by", + "default": "!!python/name:material.plugins.blog.view_name", + "oneOf": [ + { + "type": "string" + }, + { + "enum": [ + "!!python/name:material.plugins.blog.view_name", + "!!python/name:material.plugins.blog.view_post_count" + ] + } + ] + }, + "categories_sort_reverse": { + "title": "Soft categories in reverse", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.categories_sort_reverse", + "default": false + }, "categories_allowed": { "title": "Categories allowed", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.categories_allowed", @@ -269,6 +296,18 @@ "uniqueItems": true, "default": [] }, + "categories_pagination": { + "title": "Pagination for categories", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.categories_pagination", + "type": "boolean", + "default": true + }, + "categories_pagination_per_page": { + "title": "Posts per page for categories", + "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.categories_pagination_per_page", + "type": "number", + "default": 10 + }, "categories_toc": { "title": "Categories table of contents", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.categories_toc", diff --git a/docs/schema/plugins/external/gen-files.json b/docs/schema/plugins/external/gen-files.json index f1ee3d4ab..ceec5dea2 100644 --- a/docs/schema/plugins/external/gen-files.json +++ b/docs/schema/plugins/external/gen-files.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://github.com/oprypin/mkdocs-gen-files", - "enum": [ - "git-authors" - ] + "const": "git-authors" }, { "type": "object", diff --git a/docs/schema/plugins/external/git-authors.json b/docs/schema/plugins/external/git-authors.json index 5ac5653d7..f7b5e3102 100644 --- a/docs/schema/plugins/external/git-authors.json +++ b/docs/schema/plugins/external/git-authors.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://timvink.github.io/mkdocs-git-authors-plugin/", - "enum": [ - "git-authors" - ] + "const": "git-authors" }, { "type": "object", diff --git a/docs/schema/plugins/external/git-committers.json b/docs/schema/plugins/external/git-committers.json index 292fc9e8e..06a70f41a 100644 --- a/docs/schema/plugins/external/git-committers.json +++ b/docs/schema/plugins/external/git-committers.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://github.com/ojacques/mkdocs-git-committers-plugin-2", - "enum": [ - "git-committers" - ] + "const": "git-committers" }, { "type": "object", diff --git a/docs/schema/plugins/external/git-revision-date.json b/docs/schema/plugins/external/git-revision-date.json index 71c5a0213..968bed6a3 100644 --- a/docs/schema/plugins/external/git-revision-date.json +++ b/docs/schema/plugins/external/git-revision-date.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://github.com/zhaoterryy/mkdocs-git-revision-date-plugin", - "enum": [ - "git-revision-date" - ] + "const": "git-revision-date" }, { "type": "object", diff --git a/docs/schema/plugins/external/literate-nav.json b/docs/schema/plugins/external/literate-nav.json index 2cac166a8..1cdeb0bb8 100644 --- a/docs/schema/plugins/external/literate-nav.json +++ b/docs/schema/plugins/external/literate-nav.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://github.com/oprypin/mkdocs-literate-nav", - "enum": [ - "literate-nav" - ] + "const": "literate-nav" }, { "type": "object", diff --git a/docs/schema/plugins/external/macros.json b/docs/schema/plugins/external/macros.json index 56a3c2958..122de24bc 100644 --- a/docs/schema/plugins/external/macros.json +++ b/docs/schema/plugins/external/macros.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://github.com/fralau/mkdocs_macros_plugin", - "enum": [ - "macros" - ] + "const": "macros" }, { "type": "object", diff --git a/docs/schema/plugins/external/section-index.json b/docs/schema/plugins/external/section-index.json index 66bf9cda6..3c8352646 100644 --- a/docs/schema/plugins/external/section-index.json +++ b/docs/schema/plugins/external/section-index.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://github.com/oprypin/mkdocs-section-index", - "enum": [ - "section-index" - ] + "const": "section-index" }, { "type": "object", diff --git a/docs/schema/plugins/info.json b/docs/schema/plugins/info.json index f026b010c..320b73c57 100644 --- a/docs/schema/plugins/info.json +++ b/docs/schema/plugins/info.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/info/", - "enum": [ - "info" - ] + "const": "info" }, { "type": "object", diff --git a/docs/schema/plugins/meta.json b/docs/schema/plugins/meta.json index 4aa12445e..7e8c5e7e8 100644 --- a/docs/schema/plugins/meta.json +++ b/docs/schema/plugins/meta.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/meta/", - "enum": [ - "meta" - ] + "const": "meta" }, { "type": "object", diff --git a/docs/schema/plugins/offline.json b/docs/schema/plugins/offline.json index 3c0f5ea65..838168d57 100644 --- a/docs/schema/plugins/offline.json +++ b/docs/schema/plugins/offline.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/offline/", - "enum": [ - "offline" - ] + "const": "offline" }, { "type": "object", diff --git a/docs/schema/plugins/optimize.json b/docs/schema/plugins/optimize.json index 346eee078..f61a73fc0 100644 --- a/docs/schema/plugins/optimize.json +++ b/docs/schema/plugins/optimize.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/optimize/", - "enum": [ - "optimize" - ] + "const": "optimize" }, { "type": "object", diff --git a/docs/schema/plugins/privacy.json b/docs/schema/plugins/privacy.json index 85593a117..d884e616c 100644 --- a/docs/schema/plugins/privacy.json +++ b/docs/schema/plugins/privacy.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/privacy/", - "enum": [ - "privacy" - ] + "const": "privacy" }, { "type": "object", diff --git a/docs/schema/plugins/projects.json b/docs/schema/plugins/projects.json index c28814981..1ea7d8522 100644 --- a/docs/schema/plugins/projects.json +++ b/docs/schema/plugins/projects.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/projects/", - "enum": [ - "projects" - ] + "const": "projects" }, { "type": "object", diff --git a/docs/schema/plugins/search.json b/docs/schema/plugins/search.json index 45b8988fd..dd1ad9e36 100644 --- a/docs/schema/plugins/search.json +++ b/docs/schema/plugins/search.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/search/", - "enum": [ - "search" - ] + "const": "search" }, { "type": "object", @@ -73,117 +71,79 @@ "oneOf": [ { "title": "Site search language: Arabic", - "enum": [ - "ar" - ] + "const": "ar" }, { "title": "Site search language: Danish", - "enum": [ - "da" - ] + "const": "da" }, { "title": "Site search language: German", - "enum": [ - "de" - ] + "const": "de" }, { "title": "Site search language: Dutch", - "enum": [ - "du" - ] + "const": "du" }, { "title": "Site search language: English", - "enum": [ - "en" - ] + "const": "en" }, { "title": "Site search language: Spanish", - "enum": [ - "es" - ] + "const": "es" }, { "title": "Site search language: Finnish", - "enum": [ - "fi" - ] + "const": "fi" }, { "title": "Site search language: French", - "enum": [ - "fr" - ] + "const": "fr" }, { "title": "Site search language: Hungarian", - "enum": [ - "hu" - ] + "const": "hu" }, { "title": "Site search language: Italian", - "enum": [ - "it" - ] + "const": "it" }, { "title": "Site search language: Japanese", - "enum": [ - "ja" - ] + "const": "ja" }, { "title": "Site search language: Norwegian", - "enum": [ - "no" - ] + "const": "no" }, { "title": "Site search language: Portuguese", - "enum": [ - "pt" - ] + "const": "pt" }, { "title": "Site search language: Romanian", - "enum": [ - "ro" - ] + "const": "ro" }, { "title": "Site search language: Russian", - "enum": [ - "ru" - ] + "const": "ru" }, { "title": "Site search language: Swedish", - "enum": [ - "sv" - ] + "const": "sv" }, { "title": "Site search language: Thai", - "enum": [ - "th" - ] + "const": "th" }, { "title": "Site search language: Turkish", - "enum": [ - "tr" - ] + "const": "tr" }, { "title": "Site search language: Vietnamese", - "enum": [ - "vi" - ] + "const": "vi" } ] } diff --git a/docs/schema/plugins/social.json b/docs/schema/plugins/social.json index efc29594a..82a20ce4b 100644 --- a/docs/schema/plugins/social.json +++ b/docs/schema/plugins/social.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/social/", - "enum": [ - "social" - ] + "const": "social" }, { "type": "object", diff --git a/docs/schema/plugins/tags.json b/docs/schema/plugins/tags.json index b85385796..0261ba32e 100644 --- a/docs/schema/plugins/tags.json +++ b/docs/schema/plugins/tags.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/tags/", - "enum": [ - "tags" - ] + "const": "tags" }, { "type": "object", diff --git a/docs/schema/plugins/typeset.json b/docs/schema/plugins/typeset.json index d6fcdb188..1975da5e5 100644 --- a/docs/schema/plugins/typeset.json +++ b/docs/schema/plugins/typeset.json @@ -4,9 +4,7 @@ "oneOf": [ { "markdownDescription": "https://squidfunk.github.io/mkdocs-material/plugins/typeset/", - "enum": [ - "typeset" - ] + "const": "typeset" }, { "type": "object", diff --git a/docs/schema/theme.json b/docs/schema/theme.json index 5a93df098..d871a55b4 100644 --- a/docs/schema/theme.json +++ b/docs/schema/theme.json @@ -9,9 +9,7 @@ "markdownDescription": "https://www.mkdocs.org/user-guide/configuration/#name", "oneOf": [ { - "enum": [ - "material" - ] + "const": "material" }, { "type": "null" @@ -48,375 +46,251 @@ { "title": "Site language: Custom", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#custom-translations", - "enum": [ - "custom" - ] + "const": "custom" }, { "title": "Site language: Afrikaans", - "enum": [ - "af" - ] + "const": "af" }, { "title": "Site language: Arabic", - "enum": [ - "ar" - ] + "const": "ar" }, { "title": "Site language: Bulgarian", - "enum": [ - "bg" - ] + "const": "bg" }, { "title": "Site language: Bengali (Bangla)", - "enum": [ - "bn" - ] + "const": "bn" }, { "title": "Site language: Catalan", - "enum": [ - "ca" - ] + "const": "ca" }, { "title": "Site language: Czech", - "enum": [ - "cs" - ] + "const": "cs" }, { "title": "Site language: Danish", - "enum": [ - "da" - ] + "const": "da" }, { "title": "Site language: German", - "enum": [ - "de" - ] + "const": "de" }, { "title": "Site language: Greek", - "enum": [ - "el" - ] + "const": "el" }, { "title": "Site language: English", - "enum": [ - "en" - ] + "const": "en" }, { "title": "Site language: Esperanto", - "enum": [ - "eo" - ] + "const": "eo" }, { "title": "Site language: Spanish", - "enum": [ - "es" - ] + "const": "es" }, { "title": "Site language: Estonian", - "enum": [ - "et" - ] + "const": "et" }, { "title": "Site language: Persian (Farsi)", - "enum": [ - "fa" - ] + "const": "fa" }, { "title": "Site language: Finnish", - "enum": [ - "fi" - ] + "const": "fi" }, { "title": "Site language: French", - "enum": [ - "fr" - ] + "const": "fr" }, { "title": "Site language: Galician", - "enum": [ - "gl" - ] + "const": "gl" }, { "title": "Site language: Hebrew", - "enum": [ - "he" - ] + "const": "he" }, { "title": "Site language: Hindi", - "enum": [ - "hi" - ] + "const": "hi" }, { "title": "Site language: Croatian", - "enum": [ - "hr" - ] + "const": "hr" }, { "title": "Site language: Hungarian", - "enum": [ - "hu" - ] + "const": "hu" }, { "title": "Site language: Armenian", - "enum": [ - "hy" - ] + "const": "hy" }, { "title": "Site language: Indonesian", - "enum": [ - "id" - ] + "const": "id" }, { "title": "Site language: Icelandic", - "enum": [ - "is" - ] + "const": "is" }, { "title": "Site language: Italian", - "enum": [ - "it" - ] + "const": "it" }, { "title": "Site language: Japanese", - "enum": [ - "ja" - ] + "const": "ja" }, { "title": "Site language: Georgian", - "enum": [ - "ka" - ] + "const": "ka" }, { "title": "Site language: Kannada", - "enum": [ - "kn" - ] + "const": "kn" }, { "title": "Site language: Korean", - "enum": [ - "ko" - ] + "const": "ko" }, { "title": "Site language: Lithuanian", - "enum": [ - "lt" - ] + "const": "lt" }, { "title": "Site language: Latvian", - "enum": [ - "lv" - ] + "const": "lv" }, { "title": "Site language: Macedonian", - "enum": [ - "mk" - ] + "const": "mk" }, { "title": "Site language: Mongolian", - "enum": [ - "mn" - ] + "const": "mn" }, { "title": "Site language: Bahasa Malaysia", - "enum": [ - "ms" - ] + "const": "ms" }, { "title": "Site language: Burmese", - "enum": [ - "my" - ] + "const": "my" }, { "title": "Site language: Dutch", - "enum": [ - "nl" - ] + "const": "nl" }, { "title": "Site language: Norwegian (Bokmål)", - "enum": [ - "nb" - ] + "const": "nb" }, { "title": "Site language: Norwegian (Nynorsk)", - "enum": [ - "nn" - ] + "const": "nn" }, { "title": "Site language: Polish", - "enum": [ - "pl" - ] + "const": "pl" }, { "title": "Site language: Portuguese", - "enum": [ - "pt" - ] + "const": "pt" }, { "title": "Site language: Portuguese (Brasilian)", - "enum": [ - "pt-BR" - ] + "const": "pt-BR" }, { "title": "Site language: Romanian", - "enum": [ - "ro" - ] + "const": "ro" }, { "title": "Site language: Russian", - "enum": [ - "ru" - ] + "const": "ru" }, { "title": "Site language: Sanskrit", - "enum": [ - "sa" - ] + "const": "sa" }, { "title": "Site language: Serbo-Croatian", - "enum": [ - "sh" - ] + "const": "sh" }, { "title": "Site language: Sinhalese", - "enum": [ - "si" - ] + "const": "si" }, { "title": "Site language: Slovak", - "enum": [ - "sk" - ] + "const": "sk" }, { "title": "Site language: Slovenian", - "enum": [ - "sl" - ] + "const": "sl" }, { "title": "Site language: Serbian", - "enum": [ - "sr" - ] + "const": "sr" }, { "title": "Site language: Swedish", - "enum": [ - "sv" - ] + "const": "sv" }, { "title": "Site language: Telugu", - "enum": [ - "te" - ] + "const": "te" }, { "title": "Site language: Thai", - "enum": [ - "th" - ] + "const": "th" }, { "title": "Site language: Tagalog", - "enum": [ - "tl" - ] + "const": "tl" }, { "title": "Site language: Turkish", - "enum": [ - "tr" - ] + "const": "tr" }, { "title": "Site language: Ukrainian", - "enum": [ - "uk" - ] + "const": "uk" }, { "title": "Site language: Urdu", - "enum": [ - "ur" - ] + "const": "ur" }, { "title": "Site language: Uzbek", - "enum": [ - "uz" - ] + "const": "uz" }, { "title": "Site language: Vietnamese", - "enum": [ - "vi" - ] + "const": "vi" }, { "title": "Site language: Chinese (Simplified)", - "enum": [ - "zh" - ] + "const": "zh" }, { "title": "Site language: Chinese (Traditional)", - "enum": [ - "zh-Hant" - ] + "const": "zh-Hant" }, { "title": "Site language: Chinese (Taiwanese)", - "enum": [ - "zh-TW" - ] + "const": "zh-TW" } ], "default": "en" @@ -597,191 +471,137 @@ { "title": "Mark as read", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-header/#mark-as-read", - "enum": [ - "announce.dismiss" - ] + "const": "announce.dismiss" }, { "title": "Edit this page", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/adding-a-git-repository/#code-actions", - "enum": [ - "content.action.edit" - ] + "const": "content.action.edit" }, { "title": "View source of this page", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/adding-a-git-repository/#code-actions", - "enum": [ - "content.action.view" - ] + "const": "content.action.view" }, { "title": "Code annotations", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/reference/code-blocks/#code-annotations", - "enum": [ - "content.code.annotate" - ] + "const": "content.code.annotate" }, { "title": "Code copy button", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/reference/code-blocks/#code-copy-button", - "enum": [ - "content.code.copy" - ] + "const": "content.code.copy" }, { "title": "Code selection button", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/reference/code-blocks/#code-selection-button", - "enum": [ - "content.code.select" - ] + "const": "content.code.select" }, { "title": "Linked content tabs", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/reference/content-tabs/#linked-content-tabs", - "enum": [ - "content.tabs.link" - ] + "const": "content.tabs.link" }, { "title": "Improved tooltips", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/reference/tooltips/#improved-tooltips", - "enum": [ - "content.tooltips" - ] + "const": "content.tooltips" }, { "title": "Header hides automatically when scrolling", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-the-header/#automatic-hiding", - "enum": [ - "header.autohide" - ] + "const": "header.autohide" }, { "title": "Navigation expansion", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-expansion", - "enum": [ - "navigation.expand" - ] + "const": "navigation.expand" }, { "title": "Navigation footer", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-footer", - "enum": [ - "navigation.footer" - ] + "const": "navigation.footer" }, { "title": "Section index pages", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#section-index-pages", - "enum": [ - "navigation.indexes" - ] + "const": "navigation.indexes" }, { "title": "Instant loading", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#instant-loading", - "enum": [ - "navigation.instant" - ] + "const": "navigation.instant" }, { "title": "Instant prefetching", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#instant-prefetching", - "enum": [ - "navigation.instant.prefetch" - ] + "const": "navigation.instant.prefetch" }, { "title": "Progress indicator", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#progress-indicator", - "enum": [ - "navigation.instant.progress" - ] + "const": "navigation.instant.progress" }, { "title": "Navigation path (Breadcrumbs)", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-path", - "enum": [ - "navigation.path" - ] + "const": "navigation.path" }, { "title": "Navigation pruning", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-pruning", - "enum": [ - "navigation.prune" - ] + "const": "navigation.prune" }, { "title": "Navigation sections", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-sections", - "enum": [ - "navigation.sections" - ] + "const": "navigation.sections" }, { "title": "Navigation tabs", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-tabs", - "enum": [ - "navigation.tabs" - ] + "const": "navigation.tabs" }, { "title": "Sticky navigation tabs", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#sticky-navigation-tabs", - "enum": [ - "navigation.tabs.sticky" - ] + "const": "navigation.tabs.sticky" }, { "title": "Back-to-top button", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#back-to-top-button", - "enum": [ - "navigation.top" - ] + "const": "navigation.top" }, { "title": "Anchor tracking", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#anchor-tracking", - "enum": [ - "navigation.tracking" - ] + "const": "navigation.tracking" }, { "title": "Search higlighting", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#search-highlighting", - "enum": [ - "search.highlight" - ] + "const": "search.highlight" }, { "title": "Search sharing", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#search-sharing", - "enum": [ - "search.share" - ] + "const": "search.share" }, { "title": "Search suggestions", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-site-search/#search-suggestions", - "enum": [ - "search.suggest" - ] + "const": "search.suggest" }, { "title": "Integrated table of contents", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#anchor-following", - "enum": [ - "toc.follow" - ] + "const": "toc.follow" }, { "title": "Integrated table of contents", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-integration", - "enum": [ - "toc.integrate" - ] + "const": "toc.integrate" } ] }, @@ -885,6 +705,7 @@ { "title": "Google Fonts", "markdownDescription": "https://squidfunk.github.io/mkdocs-material/setup/changing-the-fonts/", + "type": "object", "properties": { "text": { "$ref": "assets/fonts.json" diff --git a/docs/setup/changing-the-fonts.md b/docs/setup/changing-the-fonts.md index f3af6ac3f..cb7da2109 100644 --- a/docs/setup/changing-the-fonts.md +++ b/docs/setup/changing-the-fonts.md @@ -67,7 +67,7 @@ theme: while complying with the __General Data Protection Regulation__ (GDPR), by automatically downloading and self-hosting the web font files. - [data privacy]: https://developers.google.com/fonts/faq#what_does_using_the_google_fonts_api_mean_for_the_privacy_of_my_users + [data privacy]: https://developers.google.com/fonts/faq/privacy [built-in privacy plugin]:../plugins/privacy.md ## Customization diff --git a/docs/setup/setting-up-a-blog.md b/docs/setup/setting-up-a-blog.md index e01593a87..d6ef7fc93 100644 --- a/docs/setup/setting-up-a-blog.md +++ b/docs/setup/setting-up-a-blog.md @@ -34,6 +34,24 @@ plugins: For a list of all settings, please consult the [plugin documentation]. +#### Advanced settings :material-alert-decagram:{ .mdx-pulse title="Added on November 23, 2023" } + + + + +The following advanced settings are currently reserved to our [sponsors] +[Insiders]. They are entirely optional, and don't affect the functionality of +the blog, but can be helpful for customizations: + +- [`archive_pagination`][config.archive_pagination] +- [`archive_pagination_per_page`][config.archive_pagination_per_page] +- [`categories_sort_by`][config.categories_sort_by] +- [`categories_sort_reverse`][config.categories_sort_reverse] +- [`categories_pagination`][config.categories_pagination] +- [`categories_pagination_per_page`][config.categories_pagination_per_page] + +We'll add more settings here, as we discover new use cases. + [plugin documentation]: ../plugins/blog.md [Insiders]: ../insiders/index.md @@ -42,6 +60,13 @@ For a list of all settings, please consult the [plugin documentation]. [docs_dir]: https://www.mkdocs.org/user-guide/configuration/#docs_dir [start writing your first post]: #writing-your-first-post + [config.archive_pagination]: ../plugins/blog.md#config.archive_pagination + [config.archive_pagination_per_page]: ../plugins/blog.md#config.archive_pagination_per_page + [config.categories_sort_by]: ../plugins/blog.md#config.categories_sort_by + [config.categories_sort_reverse]: ../plugins/blog.md#config.categories_sort_reverse + [config.categories_pagination]: ../plugins/blog.md#config.categories_pagination + [config.categories_pagination_per_page]: ../plugins/blog.md#config.categories_pagination_per_page + ### RSS diff --git a/docs/setup/setting-up-social-cards.md b/docs/setup/setting-up-social-cards.md index 646af5f2c..b326f6482 100644 --- a/docs/setup/setting-up-social-cards.md +++ b/docs/setup/setting-up-social-cards.md @@ -1,7 +1,3 @@ ---- -status: new ---- - # Setting up social cards Material for MkDocs can automatically create beautiful social cards for your diff --git a/material/__init__.py b/material/__init__.py index ddfc35309..42e06b9d0 100644 --- a/material/__init__.py +++ b/material/__init__.py @@ -18,4 +18,4 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -__version__ = "9.4.8" +__version__ = "9.4.12" diff --git a/material/overrides/assets/javascripts/custom.9c11c319.min.js b/material/overrides/assets/javascripts/custom.fe17d8dd.min.js similarity index 85% rename from material/overrides/assets/javascripts/custom.9c11c319.min.js rename to material/overrides/assets/javascripts/custom.fe17d8dd.min.js index 3ae7f9d17..827691732 100644 --- a/material/overrides/assets/javascripts/custom.9c11c319.min.js +++ b/material/overrides/assets/javascripts/custom.fe17d8dd.min.js @@ -1,4 +1,4 @@ -"use strict";(()=>{var ho=Object.create;var Tr=Object.defineProperty;var vo=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames,Kr=Object.getOwnPropertySymbols,bo=Object.getPrototypeOf,Yr=Object.prototype.hasOwnProperty,yo=Object.prototype.propertyIsEnumerable;var Jr=(e,r,t)=>r in e?Tr(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,Ke=(e,r)=>{for(var t in r||(r={}))Yr.call(r,t)&&Jr(e,t,r[t]);if(Kr)for(var t of Kr(r))yo.call(r,t)&&Jr(e,t,r[t]);return e};var Te=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var go=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of xo(r))!Yr.call(e,n)&&n!==t&&Tr(e,n,{get:()=>r[n],enumerable:!(o=vo(r,n))||o.enumerable});return e};var Gr=(e,r,t)=>(t=e!=null?ho(bo(e)):{},go(r||!e||!e.__esModule?Tr(t,"default",{value:e,enumerable:!0}):t,e));var qe=Te(X=>{(function(){var e,r,t,o,n,i,f,s,u,a,c,p,l,v,d,m,x,w,E,R;R=150,a=20,E=150,u=.75,X.score=function(h,b,S){var T,y,g,_;return y=S.preparedQuery,T=S.allowErrors,T||n(h,y.core_lw,y.core_up)?(_=h.toLowerCase(),g=r(h,_,y),Math.ceil(g)):0},X.isMatch=n=function(h,b,S){var T,y,g,_,F,U,M;if(g=h.length,_=b.length,!g||_>g)return!1;for(T=-1,y=-1;++y<_;){for(F=b.charCodeAt(y),U=S.charCodeAt(y);++T-1)return d(h,b,de,te,ae,q,j);for(Oe=new Array(q),F=new Array(q),Or=w(q,j),V=Math.ceil(u*q)+5,re=V,M=!0,I=-1;++Ife&&(fe=Qe),U=0,te[I]===Sr)if(Er=s(H,h,b),U=_>0?_:l(h,b,de,te,H,I,Er),g=wr+p(H,I,Er,y,U),g>fe)fe=g,re=V;else{if(ve&&--re<=0)return Math.max(fe,Oe[q-1])*Or;ve=!1}wr=Qe,_=F[I],F[I]=U,Oe[I]=fe}}return fe=Oe[q-1],fe*Or},X.isWordStart=s=function(h,b,S){var T,y;return h===0?!0:(T=b[h],y=b[h-1],i(y)||T!==S[h]&&y===S[h-1])},X.isWordEnd=f=function(h,b,S,T){var y,g;return h===T-1?!0:(y=b[h],g=b[h+1],i(g)||y===S[h]&&g!==S[h+1])},i=function(h){return h===" "||h==="."||h==="-"||h==="_"||h==="/"||h==="\\"},x=function(h){var b;return hy?T:y)+10):g+R*y},X.scoreConsecutives=l=function(h,b,S,T,y,g,_){var F,U,M,H,I,j,V;for(U=h.length,H=S.length,M=U-y,I=H-g,F=M-1&&(I=s(M,h,b),I&&(y=M))),U=-1,H=0;++U1&&M>1))return t;for(y=0,V=0,re=0,I=0,_=-1,F=-1;++F-1){V++;continue}else break;for(;++_12*F)return!1;for(g=-1;++g<_;)if(s(g,h,b)&&++y>T)return!1;return!0}}).call(X)});var yr=Te(De=>{(function(){var e,r,t,o,n,i,f,s,u,a;a=qe(),i=a.isMatch,e=a.computeScore,s=a.scoreSize,u=20,t=2.5,De.score=function(c,p,l){var v,d,m,x;return d=l.preparedQuery,v=l.allowErrors,v||i(c,d.core_lw,d.core_up)?(x=c.toLowerCase(),m=e(c,x,d),m=f(c,x,m,l),Math.ceil(m)):0},f=function(c,p,l,v){var d,m,x,w,E,R,h,b,S,T;if(l===0)return 0;for(S=v.preparedQuery,T=v.useExtensionBonus,b=v.pathSeparator,E=c.length-1;c[E]===b;)E--;if(x=c.lastIndexOf(b,E),h=E-x,R=1,T&&(R+=n(p,S.ext,x,E,2),l*=R),x===-1)return l;for(w=S.depth;x>-1&&w-- >0;)x=c.lastIndexOf(b,x-1);return m=x===-1?l:R*e(c.slice(x+1,E+1),p.slice(x+1,E+1),S),d=.5*u/(u+r(c,E+1,b)),d*m+(1-d)*l*s(0,t*h)},De.countDir=r=function(c,p,l){var v,d;if(p<1)return 0;for(v=0,d=-1;++dl)))return 0;for(w=p.length,m=v-E,m0?.9*n(c,p,l,E-2,d-1):x/m}}).call(De)});var qr=Te((Xt,Bt)=>{(function(){var e,r,t,o,n,i,f,s;s=yr(),t=s.countDir,n=s.getExtension,Bt.exports=e=function(){function u(a,c){var p,l,v;if(v=c!=null?c:{},p=v.optCharRegEx,l=v.pathSeparator,!(a&&a.length))return null;this.query=a,this.query_lw=a.toLowerCase(),this.core=r(a,p),this.core_lw=this.core.toLowerCase(),this.core_up=f(this.core),this.depth=t(a,a.length,l),this.ext=n(this.query_lw),this.charCodes=o(this.query_lw)}return u}(),i=/[ _\-:\/\\]/g,r=function(u,a){return a==null&&(a=i),u.replace(a,"")},f=function(u){var a,c,p,l;for(c="",p=0,l=u.length;p{(function(){var e,r,t,o,n;o=qe(),r=yr(),e=qr(),t=function(i){return i.candidate},n=function(i,f){return f.score-i.score},eo.exports=function(i,f,s){var u,a,c,p,l,v,d,m,x,w,E,R,h;for(m=[],c=s.key,l=s.maxResults,p=s.maxInners,E=s.usePathScoring,x=p!=null&&p>0?p:i.length+1,u=c!=null,d=E?r:o,R=0,h=i.length;R0&&(m.push({candidate:a,score:v}),!--x))));R++);return m.sort(n),i=m.map(t),l!=null&&(i=i.slice(0,l)),i}}).call(Zt)});var to=Te(gr=>{(function(){var e,r,t,o,n,i,f,s,u,a;a=qe(),t=a.isMatch,o=a.isWordStart,u=a.scoreConsecutives,s=a.scoreCharacter,f=a.scoreAcronyms,gr.match=n=function(c,p,l){var v,d,m,x,w,E;return v=l.allowErrors,w=l.preparedQuery,x=l.pathSeparator,v||t(c,w.core_lw,w.core_up)?(E=c.toLowerCase(),m=r(c,E,w),m.length===0||c.indexOf(x)>-1&&(d=e(c,E,w,x),m=i(m,d)),m):[]},gr.wrap=function(c,p,l){var v,d,m,x,w,E,R,h,b;if(l.wrap!=null&&(b=l.wrap,E=b.tagClass,h=b.tagOpen,R=b.tagClose),E==null&&(E="highlight"),h==null&&(h=''),R==null&&(R=""),c===p)return h+c+R;if(m=n(c,p,l),m.length===0)return c;for(x="",v=-1,w=0;++vw&&(x+=c.substring(w,d),w=d);++vw&&(x+=h,x+=c.substring(w,d),x+=R,w=d)}return w<=c.length-1&&(x+=c.substring(w)),x},e=function(c,p,l,v){var d,m,x;for(x=c.length-1;c[x]===v;)x--;if(d=c.lastIndexOf(v,x),d===-1)return[];for(m=l.depth;m-- >0;)if(d=c.lastIndexOf(v,d-1),d===-1)return[];return d++,x++,r(c.slice(d,x),p.slice(d,x),l,d)},i=function(c,p){var l,v,d,m,x,w,E;if(x=c.length,w=p.length,w===0)return c.slice();if(x===0)return p.slice();for(d=-1,m=0,v=p[m],E=[];++d0?b:u(c,p,I,j,y,g,te),R=re+s(y,g,te,E,T)),ae=q[g],b=S[g],V>ae?U=m:(V=ae,U=w),R>V?(V=R,U=d):T=0,q[g]=V,S[g]=T,ve[++H]=V>0?U:x;for(y=_-1,g=M-1,H=y*M+g,h=!0,F=[];h&&y>=0&&g>=0;)switch(ve[H]){case w:y--,H-=M;break;case m:g--,H--;break;case d:F.push(y+v),g--,y--,H-=M+1;break;default:h=!1}return F.reverse(),F}}).call(gr)});var Dr=Te((oo,no)=>{(function(){var e,r,t,o,n,i,f,s;t=ro(),o=to(),s=qe(),i=yr(),e=qr(),f=null,r=(typeof process!="undefined"&&process!==null?process.platform:void 0)==="win32"?"\\":"/",no.exports={filter:function(u,a,c){return c==null&&(c={}),a!=null&&a.length&&(u!=null&&u.length)?(c=n(c,a),t(u,a,c)):[]},score:function(u,a,c){return c==null&&(c={}),u!=null&&u.length&&(a!=null&&a.length)?(c=n(c,a),c.usePathScoring?i.score(u,a,c):s.score(u,a,c)):0},match:function(u,a,c){var p,l,v;return c==null&&(c={}),u?a?u===a?function(){v=[];for(var d=0,m=u.length;0<=m?dm;0<=m?d++:d--)v.push(d);return v}.apply(this):(c=n(c,a),o.match(u,a,c)):[]:[]},wrap:function(u,a,c){return c==null&&(c={}),u?a?(c=n(c,a),o.wrap(u,a,c)):[]:[]},prepareQuery:function(u,a){return a==null&&(a={}),a=n(a,u),a.preparedQuery}},n=function(u,a){return u.allowErrors==null&&(u.allowErrors=!1),u.usePathScoring==null&&(u.usePathScoring=!0),u.useExtensionBonus==null&&(u.useExtensionBonus=!1),u.pathSeparator==null&&(u.pathSeparator=r),u.optCharRegEx==null&&(u.optCharRegEx=null),u.wrap==null&&(u.wrap=null),u.preparedQuery==null&&(u.preparedQuery=f&&f.query===a?f:f=new e(a,u)),u}}).call(oo)});/*! ***************************************************************************** +"use strict";(()=>{var ho=Object.create;var Tr=Object.defineProperty;var vo=Object.getOwnPropertyDescriptor;var xo=Object.getOwnPropertyNames,Kr=Object.getOwnPropertySymbols,bo=Object.getPrototypeOf,Yr=Object.prototype.hasOwnProperty,yo=Object.prototype.propertyIsEnumerable;var Jr=(e,r,t)=>r in e?Tr(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,Ke=(e,r)=>{for(var t in r||(r={}))Yr.call(r,t)&&Jr(e,t,r[t]);if(Kr)for(var t of Kr(r))yo.call(r,t)&&Jr(e,t,r[t]);return e};var Te=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var go=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of xo(r))!Yr.call(e,n)&&n!==t&&Tr(e,n,{get:()=>r[n],enumerable:!(o=vo(r,n))||o.enumerable});return e};var Gr=(e,r,t)=>(t=e!=null?ho(bo(e)):{},go(r||!e||!e.__esModule?Tr(t,"default",{value:e,enumerable:!0}):t,e));var qe=Te(X=>{(function(){var e,r,t,o,n,i,f,s,u,a,c,p,l,v,d,m,x,w,E,R;R=150,a=20,E=150,u=.75,X.score=function(h,b,S){var T,y,g,_;return y=S.preparedQuery,T=S.allowErrors,T||n(h,y.core_lw,y.core_up)?(_=h.toLowerCase(),g=r(h,_,y),Math.ceil(g)):0},X.isMatch=n=function(h,b,S){var T,y,g,_,k,U,M;if(g=h.length,_=b.length,!g||_>g)return!1;for(T=-1,y=-1;++y<_;){for(k=b.charCodeAt(y),U=S.charCodeAt(y);++T-1)return d(h,b,de,te,ae,q,j);for(Oe=new Array(q),k=new Array(q),Or=w(q,j),V=Math.ceil(u*q)+5,re=V,M=!0,I=-1;++Ife&&(fe=Qe),U=0,te[I]===Sr)if(Er=s(H,h,b),U=_>0?_:l(h,b,de,te,H,I,Er),g=wr+p(H,I,Er,y,U),g>fe)fe=g,re=V;else{if(ve&&--re<=0)return Math.max(fe,Oe[q-1])*Or;ve=!1}wr=Qe,_=k[I],k[I]=U,Oe[I]=fe}}return fe=Oe[q-1],fe*Or},X.isWordStart=s=function(h,b,S){var T,y;return h===0?!0:(T=b[h],y=b[h-1],i(y)||T!==S[h]&&y===S[h-1])},X.isWordEnd=f=function(h,b,S,T){var y,g;return h===T-1?!0:(y=b[h],g=b[h+1],i(g)||y===S[h]&&g!==S[h+1])},i=function(h){return h===" "||h==="."||h==="-"||h==="_"||h==="/"||h==="\\"},x=function(h){var b;return hy?T:y)+10):g+R*y},X.scoreConsecutives=l=function(h,b,S,T,y,g,_){var k,U,M,H,I,j,V;for(U=h.length,H=S.length,M=U-y,I=H-g,k=M-1&&(I=s(M,h,b),I&&(y=M))),U=-1,H=0;++U1&&M>1))return t;for(y=0,V=0,re=0,I=0,_=-1,k=-1;++k-1){V++;continue}else break;for(;++_12*k)return!1;for(g=-1;++g<_;)if(s(g,h,b)&&++y>T)return!1;return!0}}).call(X)});var yr=Te(De=>{(function(){var e,r,t,o,n,i,f,s,u,a;a=qe(),i=a.isMatch,e=a.computeScore,s=a.scoreSize,u=20,t=2.5,De.score=function(c,p,l){var v,d,m,x;return d=l.preparedQuery,v=l.allowErrors,v||i(c,d.core_lw,d.core_up)?(x=c.toLowerCase(),m=e(c,x,d),m=f(c,x,m,l),Math.ceil(m)):0},f=function(c,p,l,v){var d,m,x,w,E,R,h,b,S,T;if(l===0)return 0;for(S=v.preparedQuery,T=v.useExtensionBonus,b=v.pathSeparator,E=c.length-1;c[E]===b;)E--;if(x=c.lastIndexOf(b,E),h=E-x,R=1,T&&(R+=n(p,S.ext,x,E,2),l*=R),x===-1)return l;for(w=S.depth;x>-1&&w-- >0;)x=c.lastIndexOf(b,x-1);return m=x===-1?l:R*e(c.slice(x+1,E+1),p.slice(x+1,E+1),S),d=.5*u/(u+r(c,E+1,b)),d*m+(1-d)*l*s(0,t*h)},De.countDir=r=function(c,p,l){var v,d;if(p<1)return 0;for(v=0,d=-1;++dl)))return 0;for(w=p.length,m=v-E,m0?.9*n(c,p,l,E-2,d-1):x/m}}).call(De)});var qr=Te((Xt,Bt)=>{(function(){var e,r,t,o,n,i,f,s;s=yr(),t=s.countDir,n=s.getExtension,Bt.exports=e=function(){function u(a,c){var p,l,v;if(v=c!=null?c:{},p=v.optCharRegEx,l=v.pathSeparator,!(a&&a.length))return null;this.query=a,this.query_lw=a.toLowerCase(),this.core=r(a,p),this.core_lw=this.core.toLowerCase(),this.core_up=f(this.core),this.depth=t(a,a.length,l),this.ext=n(this.query_lw),this.charCodes=o(this.query_lw)}return u}(),i=/[ _\-:\/\\]/g,r=function(u,a){return a==null&&(a=i),u.replace(a,"")},f=function(u){var a,c,p,l;for(c="",p=0,l=u.length;p{(function(){var e,r,t,o,n;o=qe(),r=yr(),e=qr(),t=function(i){return i.candidate},n=function(i,f){return f.score-i.score},eo.exports=function(i,f,s){var u,a,c,p,l,v,d,m,x,w,E,R,h;for(m=[],c=s.key,l=s.maxResults,p=s.maxInners,E=s.usePathScoring,x=p!=null&&p>0?p:i.length+1,u=c!=null,d=E?r:o,R=0,h=i.length;R0&&(m.push({candidate:a,score:v}),!--x))));R++);return m.sort(n),i=m.map(t),l!=null&&(i=i.slice(0,l)),i}}).call(Zt)});var to=Te(gr=>{(function(){var e,r,t,o,n,i,f,s,u,a;a=qe(),t=a.isMatch,o=a.isWordStart,u=a.scoreConsecutives,s=a.scoreCharacter,f=a.scoreAcronyms,gr.match=n=function(c,p,l){var v,d,m,x,w,E;return v=l.allowErrors,w=l.preparedQuery,x=l.pathSeparator,v||t(c,w.core_lw,w.core_up)?(E=c.toLowerCase(),m=r(c,E,w),m.length===0||c.indexOf(x)>-1&&(d=e(c,E,w,x),m=i(m,d)),m):[]},gr.wrap=function(c,p,l){var v,d,m,x,w,E,R,h,b;if(l.wrap!=null&&(b=l.wrap,E=b.tagClass,h=b.tagOpen,R=b.tagClose),E==null&&(E="highlight"),h==null&&(h=''),R==null&&(R=""),c===p)return h+c+R;if(m=n(c,p,l),m.length===0)return c;for(x="",v=-1,w=0;++vw&&(x+=c.substring(w,d),w=d);++vw&&(x+=h,x+=c.substring(w,d),x+=R,w=d)}return w<=c.length-1&&(x+=c.substring(w)),x},e=function(c,p,l,v){var d,m,x;for(x=c.length-1;c[x]===v;)x--;if(d=c.lastIndexOf(v,x),d===-1)return[];for(m=l.depth;m-- >0;)if(d=c.lastIndexOf(v,d-1),d===-1)return[];return d++,x++,r(c.slice(d,x),p.slice(d,x),l,d)},i=function(c,p){var l,v,d,m,x,w,E;if(x=c.length,w=p.length,w===0)return c.slice();if(x===0)return p.slice();for(d=-1,m=0,v=p[m],E=[];++d0?b:u(c,p,I,j,y,g,te),R=re+s(y,g,te,E,T)),ae=q[g],b=S[g],V>ae?U=m:(V=ae,U=w),R>V?(V=R,U=d):T=0,q[g]=V,S[g]=T,ve[++H]=V>0?U:x;for(y=_-1,g=M-1,H=y*M+g,h=!0,k=[];h&&y>=0&&g>=0;)switch(ve[H]){case w:y--,H-=M;break;case m:g--,H--;break;case d:k.push(y+v),g--,y--,H-=M+1;break;default:h=!1}return k.reverse(),k}}).call(gr)});var Dr=Te((oo,no)=>{(function(){var e,r,t,o,n,i,f,s;t=ro(),o=to(),s=qe(),i=yr(),e=qr(),f=null,r=(typeof process!="undefined"&&process!==null?process.platform:void 0)==="win32"?"\\":"/",no.exports={filter:function(u,a,c){return c==null&&(c={}),a!=null&&a.length&&(u!=null&&u.length)?(c=n(c,a),t(u,a,c)):[]},score:function(u,a,c){return c==null&&(c={}),u!=null&&u.length&&(a!=null&&a.length)?(c=n(c,a),c.usePathScoring?i.score(u,a,c):s.score(u,a,c)):0},match:function(u,a,c){var p,l,v;return c==null&&(c={}),u?a?u===a?function(){v=[];for(var d=0,m=u.length;0<=m?dm;0<=m?d++:d--)v.push(d);return v}.apply(this):(c=n(c,a),o.match(u,a,c)):[]:[]},wrap:function(u,a,c){return c==null&&(c={}),u?a?(c=n(c,a),o.wrap(u,a,c)):[]:[]},prepareQuery:function(u,a){return a==null&&(a={}),a=n(a,u),a.preparedQuery}},n=function(u,a){return u.allowErrors==null&&(u.allowErrors=!1),u.usePathScoring==null&&(u.usePathScoring=!0),u.useExtensionBonus==null&&(u.useExtensionBonus=!1),u.pathSeparator==null&&(u.pathSeparator=r),u.optCharRegEx==null&&(u.optCharRegEx=null),u.wrap==null&&(u.wrap=null),u.preparedQuery==null&&(u.preparedQuery=f&&f.query===a?f:f=new e(a,u)),u}}).call(oo)});/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any @@ -13,6 +13,6 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */var _r=function(e,r){return _r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,o){t.__proto__=o}||function(t,o){for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])},_r(e,r)};function $(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");_r(e,r);function t(){this.constructor=e}e.prototype=r===null?Object.create(r):(t.prototype=r.prototype,new t)}function Xr(e,r,t,o){function n(i){return i instanceof t?i:new t(function(f){f(i)})}return new(t||(t=Promise))(function(i,f){function s(c){try{a(o.next(c))}catch(p){f(p)}}function u(c){try{a(o.throw(c))}catch(p){f(p)}}function a(c){c.done?i(c.value):n(c.value).then(s,u)}a((o=o.apply(e,r||[])).next())})}function Je(e,r){var t={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},o,n,i,f;return f={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(f[Symbol.iterator]=function(){return this}),f;function s(a){return function(c){return u([a,c])}}function u(a){if(o)throw new TypeError("Generator is already executing.");for(;t;)try{if(o=1,n&&(i=a[0]&2?n.return:a[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,a[1])).done)return i;switch(n=0,i&&(a=[a[0]&2,i.value]),a[0]){case 0:case 1:i=a;break;case 4:return t.label++,{value:a[1],done:!1};case 5:t.label++,n=a[1],a=[0];continue;case 7:a=t.ops.pop(),t.trys.pop();continue;default:if(i=t.trys,!(i=i.length>0&&i[i.length-1])&&(a[0]===6||a[0]===2)){t=0;continue}if(a[0]===3&&(!i||a[1]>i[0]&&a[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,r){var t=typeof Symbol=="function"&&e[Symbol.iterator];if(!t)return e;var o=t.call(e),n,i=[],f;try{for(;(r===void 0||r-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(s){f={error:s}}finally{try{n&&!n.done&&(t=o.return)&&t.call(o)}finally{if(f)throw f.error}}return i}function z(e,r,t){if(t||arguments.length===2)for(var o=0,n=r.length,i;o1||s(l,v)})})}function s(l,v){try{u(o[l](v))}catch(d){p(i[0][3],d)}}function u(l){l.value instanceof xe?Promise.resolve(l.value.v).then(a,c):p(i[0][2],l)}function a(l){s("next",l)}function c(l){s("throw",l)}function p(l,v){l(v),i.shift(),i.length&&s(i[0][0],i[0][1])}}function Zr(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=e[Symbol.asyncIterator],t;return r?r.call(e):(e=typeof Y=="function"?Y(e):e[Symbol.iterator](),t={},o("next"),o("throw"),o("return"),t[Symbol.asyncIterator]=function(){return this},t);function o(i){t[i]=e[i]&&function(f){return new Promise(function(s,u){f=e[i](f),n(s,u,f.done,f.value)})}}function n(i,f,s,u){Promise.resolve(u).then(function(a){i({value:a,done:s})},f)}}function O(e){return typeof e=="function"}function Ye(e){var r=function(o){Error.call(o),o.stack=new Error().stack},t=e(r);return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var Ge=Ye(function(e){return function(t){e(this),this.message=t?t.length+` errors occurred during unsubscription: `+t.map(function(o,n){return n+1+") "+o.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=t}});function ue(e,r){if(e){var t=e.indexOf(r);0<=t&&e.splice(t,1)}}var oe=function(){function e(r){this.initialTeardown=r,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var r,t,o,n,i;if(!this.closed){this.closed=!0;var f=this._parentage;if(f)if(this._parentage=null,Array.isArray(f))try{for(var s=Y(f),u=s.next();!u.done;u=s.next()){var a=u.value;a.remove(this)}}catch(m){r={error:m}}finally{try{u&&!u.done&&(t=s.return)&&t.call(s)}finally{if(r)throw r.error}}else f.remove(this);var c=this.initialTeardown;if(O(c))try{c()}catch(m){i=m instanceof Ge?m.errors:[m]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var l=Y(p),v=l.next();!v.done;v=l.next()){var d=v.value;try{et(d)}catch(m){i=i!=null?i:[],m instanceof Ge?i=z(z([],W(i)),W(m.errors)):i.push(m)}}}catch(m){o={error:m}}finally{try{v&&!v.done&&(n=l.return)&&n.call(l)}finally{if(o)throw o.error}}}if(i)throw new Ge(i)}},e.prototype.add=function(r){var t;if(r&&r!==this)if(this.closed)et(r);else{if(r instanceof e){if(r.closed||r._hasParent(this))return;r._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(r)}},e.prototype._hasParent=function(r){var t=this._parentage;return t===r||Array.isArray(t)&&t.includes(r)},e.prototype._addParent=function(r){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(r),t):t?[t,r]:r},e.prototype._removeParent=function(r){var t=this._parentage;t===r?this._parentage=null:Array.isArray(t)&&ue(t,r)},e.prototype.remove=function(r){var t=this._finalizers;t&&ue(t,r),r instanceof e&&r._removeParent(this)},e.EMPTY=function(){var r=new e;return r.closed=!0,r}(),e}();var Ar=oe.EMPTY;function Xe(e){return e instanceof oe||e&&"closed"in e&&O(e.remove)&&O(e.add)&&O(e.unsubscribe)}function et(e){O(e)?e():e.unsubscribe()}var ee={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var _e={setTimeout:function(e,r){for(var t=[],o=2;o0},enumerable:!1,configurable:!0}),r.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},r.prototype._subscribe=function(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)},r.prototype._innerSubscribe=function(t){var o=this,n=this,i=n.hasError,f=n.isStopped,s=n.observers;return i||f?Ar:(this.currentObservers=null,s.push(t),new oe(function(){o.currentObservers=null,ue(s,t)}))},r.prototype._checkFinalizedStatuses=function(t){var o=this,n=o.hasError,i=o.thrownError,f=o.isStopped;n?t.error(i):f&&t.complete()},r.prototype.asObservable=function(){var t=new C;return t.source=this,t},r.create=function(t,o){return new ut(t,o)},r}(C);var ut=function(e){$(r,e);function r(t,o){var n=e.call(this)||this;return n.destination=t,n.source=o,n}return r.prototype.next=function(t){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,t)},r.prototype.error=function(t){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,t)},r.prototype.complete=function(){var t,o;(o=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||o===void 0||o.call(t)},r.prototype._subscribe=function(t){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(t))!==null&&n!==void 0?n:Ar},r}(B);var ze={now:function(){return(ze.delegate||Date).now()},delegate:void 0};var ct=function(e){$(r,e);function r(t,o,n){t===void 0&&(t=1/0),o===void 0&&(o=1/0),n===void 0&&(n=ze);var i=e.call(this)||this;return i._bufferSize=t,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,t),i._windowTime=Math.max(1,o),i}return r.prototype.next=function(t){var o=this,n=o.isStopped,i=o._buffer,f=o._infiniteTimeWindow,s=o._timestampProvider,u=o._windowTime;n||(i.push(t),!f&&i.push(s.now()+u)),this._trimBuffer(),e.prototype.next.call(this,t)},r.prototype._subscribe=function(t){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(t),n=this,i=n._infiniteTimeWindow,f=n._buffer,s=f.slice(),u=0;u0?e.prototype.requestAsyncId.call(this,t,o,n):(t.actions.push(this),t._scheduled||(t._scheduled=Ce.requestAnimationFrame(function(){return t.flush(void 0)})))},r.prototype.recycleAsyncId=function(t,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,t,o,n);var f=t.actions;o!=null&&((i=f[f.length-1])===null||i===void 0?void 0:i.id)!==o&&(Ce.cancelAnimationFrame(o),t._scheduled=void 0)},r}(er);var mt=function(e){$(r,e);function r(){return e!==null&&e.apply(this,arguments)||this}return r.prototype.flush=function(t){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;t=t||n.shift();do if(i=t.execute(t.state,t.delay))break;while((t=n[0])&&t.id===o&&n.shift());if(this._active=!1,i){for(;(t=n[0])&&t.id===o&&n.shift();)t.unsubscribe();throw i}},r}(rr);var Pr=new mt(lt);var Me=new C(function(e){return e.complete()});function tr(e){return e&&O(e.schedule)}function Rr(e){return e[e.length-1]}function Le(e){return O(Rr(e))?e.pop():void 0}function ne(e){return tr(Rr(e))?e.pop():void 0}function dt(e,r){return typeof Rr(e)=="number"?e.pop():r}var Pe=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function or(e){return O(e==null?void 0:e.then)}function nr(e){return O(e[Ie])}function ir(e){return Symbol.asyncIterator&&O(e==null?void 0:e[Symbol.asyncIterator])}function ar(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Co(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var fr=Co();function ur(e){return O(e==null?void 0:e[fr])}function cr(e){return Br(this,arguments,function(){var t,o,n,i;return Je(this,function(f){switch(f.label){case 0:t=e.getReader(),f.label=1;case 1:f.trys.push([1,,9,10]),f.label=2;case 2:return[4,xe(t.read())];case 3:return o=f.sent(),n=o.value,i=o.done,i?[4,xe(void 0)]:[3,5];case 4:return[2,f.sent()];case 5:return[4,xe(n)];case 6:return[4,f.sent()];case 7:return f.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}})})}function sr(e){return O(e==null?void 0:e.getReader)}function k(e){if(e instanceof C)return e;if(e!=null){if(nr(e))return Mo(e);if(Pe(e))return Lo(e);if(or(e))return Po(e);if(ir(e))return ht(e);if(ur(e))return Ro(e);if(sr(e))return ko(e)}throw ar(e)}function Mo(e){return new C(function(r){var t=e[Ie]();if(O(t.subscribe))return t.subscribe(r);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Lo(e){return new C(function(r){for(var t=0;t0&&(c=new ye({next:function(S){return b.next(S)},error:function(S){m=!0,x(),p=Vr(w,n,S),b.error(S)},complete:function(){d=!0,x(),p=Vr(w,f),b.complete()}}),k(R).subscribe(c))})(a)}}function Vr(e,r){for(var t=[],o=2;ojr()||document.body),me(1));function Ut(e){return Bo.pipe(P(r=>e.contains(r)),pe())}function zt(e){return{x:e.scrollLeft,y:e.scrollTop}}function Vt(e){return N(D(e,"scroll"),D(window,"resize")).pipe(Fr(0,Pr),P(()=>zt(e)),he(zt(e)))}function $t(e,r){if(typeof r=="string"||typeof r=="number")e.innerHTML+=r.toString();else if(r instanceof Node)e.appendChild(r);else if(Array.isArray(r))for(let t of r)$t(e,t)}function J(e,r,...t){let o=document.createElement(e);if(r)for(let n of Object.keys(r))typeof r[n]!="undefined"&&(typeof r[n]!="boolean"?o.setAttribute(n,r[n]):o.setAttribute(n,""));for(let n of t)$t(o,n);return o}function jt(e){if(e>999){let r=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(r)}k`}else return e.toString()}function Nt(e){let r=J("script",{src:e});return Se(()=>(document.head.appendChild(r),N(D(r,"load"),D(r,"error").pipe(Q(()=>kr(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(P(()=>{}),le(()=>document.head.removeChild(r)),ke(1))))}var Zo=new B,Ep=Se(()=>typeof ResizeObserver=="undefined"?Nt("https://unpkg.com/resize-observer-polyfill"):ie(void 0)).pipe(P(()=>new ResizeObserver(e=>{for(let r of e)Zo.next(r)})),Q(e=>N(je,ie(e)).pipe(le(()=>e.disconnect()))),me(1));function qt(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Dt(e){return{width:e.scrollWidth,height:e.scrollHeight}}var en=new B,Pp=Se(()=>ie(new IntersectionObserver(e=>{for(let r of e)en.next(r)},{threshold:0}))).pipe(Q(e=>N(je,ie(e)).pipe(le(()=>e.disconnect()))),me(1));function Qt(e,r=16){return Vt(e).pipe(P(({y:t})=>{let o=qt(e),n=Dt(e);return t>=n.height-o.height-r}),pe())}var $p={drawer:Z("[data-md-toggle=drawer]"),search:Z("[data-md-toggle=search]")};var rn=Z("#__config"),Ne=JSON.parse(rn.textContent);Ne.base=`${new URL(Ne.base,Yt())}`;function Kt(){return Ne}function Jt(e,r){return typeof r!="undefined"?Ne.translations[e].replace("#",r.toString()):Ne.translations[e]}function Yt(){return new URL(location.href)}function tn(e,r){return new C(t=>{let o=new XMLHttpRequest;o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(t.next(o.response),t.complete()):t.error(new Error(o.statusText))}),o.addEventListener("error",()=>{t.error(new Error("Network Error"))}),o.addEventListener("abort",()=>{t.error(new Error("Request aborted"))}),typeof(r==null?void 0:r.progress$)!="undefined"&&(o.addEventListener("progress",n=>{r.progress$.next(n.loaded/n.total*100)}),r.progress$.next(5)),o.send()})}function br(e,r){return tn(e,r).pipe(Q(t=>t.text()),P(t=>JSON.parse(t)),me(1))}function We(e,r=document){return Z(`[data-mdx-component=${e}]`,r)}function Nr(e,r=document){return Ht(`[data-mdx-component=${e}]`,r)}function Gt(e){let r=Ut(e),t=N(D(e,"keyup"),D(e,"focus").pipe(zr(1))).pipe(P(()=>e.value),he(e.value),pe());return r.pipe(Ee(o=>!o),He(t)).subscribe(([,o])=>{let n=document.location.pathname;typeof ga=="function"&&o.length&&ga("send","pageview",`${n}?q=[icon]+${o}`)}),Re([t,r]).pipe(P(([o,n])=>({ref:e,value:o,focus:n})))}var Qr=Gr(Dr());var ao=Gr(Dr());function io(e,r){return(0,ao.wrap)(e.shortcode,r,{wrap:{tagOpen:"",tagClose:""}})}function fo(e,r,t){return J("li",{class:"mdx-iconsearch-result__item"},J("span",{class:"twemoji"},J("img",{src:e.url})),J("button",{class:"md-clipboard--inline",title:Jt("clipboard.copy"),"data-clipboard-text":t?e.shortcode:`:${e.shortcode}:`},J("code",null,t?io(e,r):`:${io(e,r)}:`)))}function uo(e){let r=`@${e.name}`;return J("a",{href:e.url,title:r,class:"mdx-sponsorship__item"},J("img",{src:e.image}))}function co(e){return J("a",{href:"https://github.com/sponsors/squidfunk?metadata_origin=docs",class:"mdx-sponsorship__item mdx-sponsorship__item--private"},"+",e)}function on(e,{index$:r,query$:t}){switch(e.getAttribute("data-mdx-mode")){case"file":return Re([t.pipe(xr("value")),r.pipe(P(({icons:o})=>Object.values(o.data).map(n=>n.replace(/\.svg$/,""))))]).pipe(P(([{value:o},n])=>(0,Qr.filter)(n,o)),Q(o=>r.pipe(P(({icons:n})=>({data:o.map(i=>({shortcode:i,url:[n.base,i,".svg"].join("")}))})))));default:return Re([t.pipe(xr("value")),r.pipe(P(({icons:o,emojis:n})=>[...Object.keys(o.data),...Object.keys(n.data)]))]).pipe(P(([{value:o},n])=>(0,Qr.filter)(n,o)),Q(o=>r.pipe(P(({icons:n,emojis:i})=>({data:o.map(f=>{let s=f in n.data?n:i;return{shortcode:f,url:[s.base,s.data[f]].join("")}})})))))}}function so(e,{index$:r,query$:t}){let o=new B,n=Qt(e).pipe(Ee(Boolean)),i=Z(":scope > :first-child",e);o.pipe(He(t)).subscribe(([{data:u},{value:a}])=>{if(a)switch(u.length){case 0:i.textContent="No matches";break;case 1:i.textContent="1 match";break;default:i.textContent=`${jt(u.length)} matches`}else i.textContent="Type to start searching"});let f=e.getAttribute("data-mdx-mode")==="file",s=Z(":scope > :last-child",e);return o.pipe(Fe(()=>s.innerHTML=""),Q(({data:u})=>N(ie(...u.slice(0,10)),ie(...u.slice(10)).pipe(Hr(10),$r(n),Q(([a])=>a)))),He(t)).subscribe(([u,{value:a}])=>s.appendChild(fo(u,a,f))),on(e,{query$:t,index$:r}).pipe(Fe(u=>o.next(u)),le(()=>o.complete()),P(u=>Ke({ref:e},u)))}function po(e){let r=Kt(),t=br(new URL("assets/javascripts/iconsearch_index.json",r.base)),o=We("iconsearch-query",e),n=We("iconsearch-result",e),i=Gt(o),f=so(n,{index$:t,query$:i});return N(i,f)}function lo(e){let r=br("https://3if8u9o552.execute-api.us-east-1.amazonaws.com/_/"),t=We("sponsorship-count"),o=We("sponsorship-total");return r.subscribe(n=>{e.removeAttribute("hidden");let i=Z(":scope > :first-child",e);for(let f of n.sponsors)f.type==="public"&&i.appendChild(uo(f.user));i.appendChild(co(n.sponsors.filter(({type:f})=>f==="private").length)),t.innerText=`${n.sponsors.length}`,o.innerText=`$ ${n.total.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")} a month`}),r.pipe(P(n=>Ke({ref:e},n)))}function mo(){let{origin:e}=new URL(location.href);D(document.body,"click").subscribe(r=>{if(r.target instanceof HTMLElement){let t=r.target.closest("a");t&&t.origin!==e&&ga("send","event","outbound","click",t.href)}})}mo();var nn=document$.pipe(Q(()=>N(...Nr("iconsearch").map(e=>po(e)),...Nr("sponsorship").map(e=>lo(e)))));nn.subscribe();})(); -//# sourceMappingURL=custom.9c11c319.min.js.map + `):"",this.name="UnsubscriptionError",this.errors=t}});function ue(e,r){if(e){var t=e.indexOf(r);0<=t&&e.splice(t,1)}}var oe=function(){function e(r){this.initialTeardown=r,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var r,t,o,n,i;if(!this.closed){this.closed=!0;var f=this._parentage;if(f)if(this._parentage=null,Array.isArray(f))try{for(var s=Y(f),u=s.next();!u.done;u=s.next()){var a=u.value;a.remove(this)}}catch(m){r={error:m}}finally{try{u&&!u.done&&(t=s.return)&&t.call(s)}finally{if(r)throw r.error}}else f.remove(this);var c=this.initialTeardown;if(O(c))try{c()}catch(m){i=m instanceof Ge?m.errors:[m]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var l=Y(p),v=l.next();!v.done;v=l.next()){var d=v.value;try{et(d)}catch(m){i=i!=null?i:[],m instanceof Ge?i=z(z([],W(i)),W(m.errors)):i.push(m)}}}catch(m){o={error:m}}finally{try{v&&!v.done&&(n=l.return)&&n.call(l)}finally{if(o)throw o.error}}}if(i)throw new Ge(i)}},e.prototype.add=function(r){var t;if(r&&r!==this)if(this.closed)et(r);else{if(r instanceof e){if(r.closed||r._hasParent(this))return;r._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(r)}},e.prototype._hasParent=function(r){var t=this._parentage;return t===r||Array.isArray(t)&&t.includes(r)},e.prototype._addParent=function(r){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(r),t):t?[t,r]:r},e.prototype._removeParent=function(r){var t=this._parentage;t===r?this._parentage=null:Array.isArray(t)&&ue(t,r)},e.prototype.remove=function(r){var t=this._finalizers;t&&ue(t,r),r instanceof e&&r._removeParent(this)},e.EMPTY=function(){var r=new e;return r.closed=!0,r}(),e}();var Ar=oe.EMPTY;function Xe(e){return e instanceof oe||e&&"closed"in e&&O(e.remove)&&O(e.add)&&O(e.unsubscribe)}function et(e){O(e)?e():e.unsubscribe()}var ee={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var _e={setTimeout:function(e,r){for(var t=[],o=2;o0},enumerable:!1,configurable:!0}),r.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},r.prototype._subscribe=function(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)},r.prototype._innerSubscribe=function(t){var o=this,n=this,i=n.hasError,f=n.isStopped,s=n.observers;return i||f?Ar:(this.currentObservers=null,s.push(t),new oe(function(){o.currentObservers=null,ue(s,t)}))},r.prototype._checkFinalizedStatuses=function(t){var o=this,n=o.hasError,i=o.thrownError,f=o.isStopped;n?t.error(i):f&&t.complete()},r.prototype.asObservable=function(){var t=new C;return t.source=this,t},r.create=function(t,o){return new ut(t,o)},r}(C);var ut=function(e){$(r,e);function r(t,o){var n=e.call(this)||this;return n.destination=t,n.source=o,n}return r.prototype.next=function(t){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.next)===null||n===void 0||n.call(o,t)},r.prototype.error=function(t){var o,n;(n=(o=this.destination)===null||o===void 0?void 0:o.error)===null||n===void 0||n.call(o,t)},r.prototype.complete=function(){var t,o;(o=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||o===void 0||o.call(t)},r.prototype._subscribe=function(t){var o,n;return(n=(o=this.source)===null||o===void 0?void 0:o.subscribe(t))!==null&&n!==void 0?n:Ar},r}(B);var ze={now:function(){return(ze.delegate||Date).now()},delegate:void 0};var ct=function(e){$(r,e);function r(t,o,n){t===void 0&&(t=1/0),o===void 0&&(o=1/0),n===void 0&&(n=ze);var i=e.call(this)||this;return i._bufferSize=t,i._windowTime=o,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=o===1/0,i._bufferSize=Math.max(1,t),i._windowTime=Math.max(1,o),i}return r.prototype.next=function(t){var o=this,n=o.isStopped,i=o._buffer,f=o._infiniteTimeWindow,s=o._timestampProvider,u=o._windowTime;n||(i.push(t),!f&&i.push(s.now()+u)),this._trimBuffer(),e.prototype.next.call(this,t)},r.prototype._subscribe=function(t){this._throwIfClosed(),this._trimBuffer();for(var o=this._innerSubscribe(t),n=this,i=n._infiniteTimeWindow,f=n._buffer,s=f.slice(),u=0;u0?e.prototype.requestAsyncId.call(this,t,o,n):(t.actions.push(this),t._scheduled||(t._scheduled=Ce.requestAnimationFrame(function(){return t.flush(void 0)})))},r.prototype.recycleAsyncId=function(t,o,n){var i;if(n===void 0&&(n=0),n!=null?n>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,t,o,n);var f=t.actions;o!=null&&((i=f[f.length-1])===null||i===void 0?void 0:i.id)!==o&&(Ce.cancelAnimationFrame(o),t._scheduled=void 0)},r}(er);var mt=function(e){$(r,e);function r(){return e!==null&&e.apply(this,arguments)||this}return r.prototype.flush=function(t){this._active=!0;var o=this._scheduled;this._scheduled=void 0;var n=this.actions,i;t=t||n.shift();do if(i=t.execute(t.state,t.delay))break;while((t=n[0])&&t.id===o&&n.shift());if(this._active=!1,i){for(;(t=n[0])&&t.id===o&&n.shift();)t.unsubscribe();throw i}},r}(rr);var Pr=new mt(lt);var Me=new C(function(e){return e.complete()});function tr(e){return e&&O(e.schedule)}function Rr(e){return e[e.length-1]}function Le(e){return O(Rr(e))?e.pop():void 0}function ne(e){return tr(Rr(e))?e.pop():void 0}function dt(e,r){return typeof Rr(e)=="number"?e.pop():r}var Pe=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function or(e){return O(e==null?void 0:e.then)}function nr(e){return O(e[Ie])}function ir(e){return Symbol.asyncIterator&&O(e==null?void 0:e[Symbol.asyncIterator])}function ar(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Co(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var fr=Co();function ur(e){return O(e==null?void 0:e[fr])}function cr(e){return Br(this,arguments,function(){var t,o,n,i;return Je(this,function(f){switch(f.label){case 0:t=e.getReader(),f.label=1;case 1:f.trys.push([1,,9,10]),f.label=2;case 2:return[4,xe(t.read())];case 3:return o=f.sent(),n=o.value,i=o.done,i?[4,xe(void 0)]:[3,5];case 4:return[2,f.sent()];case 5:return[4,xe(n)];case 6:return[4,f.sent()];case 7:return f.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}})})}function sr(e){return O(e==null?void 0:e.getReader)}function F(e){if(e instanceof C)return e;if(e!=null){if(nr(e))return Mo(e);if(Pe(e))return Lo(e);if(or(e))return Po(e);if(ir(e))return ht(e);if(ur(e))return Ro(e);if(sr(e))return Fo(e)}throw ar(e)}function Mo(e){return new C(function(r){var t=e[Ie]();if(O(t.subscribe))return t.subscribe(r);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Lo(e){return new C(function(r){for(var t=0;t0&&(c=new ye({next:function(S){return b.next(S)},error:function(S){m=!0,x(),p=Vr(w,n,S),b.error(S)},complete:function(){d=!0,x(),p=Vr(w,f),b.complete()}}),F(R).subscribe(c))})(a)}}function Vr(e,r){for(var t=[],o=2;ojr()||document.body),me(1));function Ut(e){return Bo.pipe(P(r=>e.contains(r)),pe())}function zt(e){return{x:e.scrollLeft,y:e.scrollTop}}function Vt(e){return N(D(e,"scroll"),D(window,"resize")).pipe(kr(0,Pr),P(()=>zt(e)),he(zt(e)))}function $t(e,r){if(typeof r=="string"||typeof r=="number")e.innerHTML+=r.toString();else if(r instanceof Node)e.appendChild(r);else if(Array.isArray(r))for(let t of r)$t(e,t)}function J(e,r,...t){let o=document.createElement(e);if(r)for(let n of Object.keys(r))typeof r[n]!="undefined"&&(typeof r[n]!="boolean"?o.setAttribute(n,r[n]):o.setAttribute(n,""));for(let n of t)$t(o,n);return o}function jt(e){if(e>999){let r=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(r)}k`}else return e.toString()}function Nt(e){let r=J("script",{src:e});return Se(()=>(document.head.appendChild(r),N(D(r,"load"),D(r,"error").pipe(Q(()=>Fr(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(P(()=>{}),le(()=>document.head.removeChild(r)),Fe(1))))}var Zo=new B,Ep=Se(()=>typeof ResizeObserver=="undefined"?Nt("https://unpkg.com/resize-observer-polyfill"):ie(void 0)).pipe(P(()=>new ResizeObserver(e=>{for(let r of e)Zo.next(r)})),Q(e=>N(je,ie(e)).pipe(le(()=>e.disconnect()))),me(1));function qt(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Dt(e){return{width:e.scrollWidth,height:e.scrollHeight}}var en=new B,Pp=Se(()=>ie(new IntersectionObserver(e=>{for(let r of e)en.next(r)},{threshold:0}))).pipe(Q(e=>N(je,ie(e)).pipe(le(()=>e.disconnect()))),me(1));function Qt(e,r=16){return Vt(e).pipe(P(({y:t})=>{let o=qt(e),n=Dt(e);return t>=n.height-o.height-r}),pe())}var $p={drawer:Z("[data-md-toggle=drawer]"),search:Z("[data-md-toggle=search]")};var rn=Z("#__config"),Ne=JSON.parse(rn.textContent);Ne.base=`${new URL(Ne.base,Yt())}`;function Kt(){return Ne}function Jt(e,r){return typeof r!="undefined"?Ne.translations[e].replace("#",r.toString()):Ne.translations[e]}function Yt(){return new URL(location.href)}function tn(e,r){return new C(t=>{let o=new XMLHttpRequest;o.open("GET",`${e}`),o.responseType="blob",o.addEventListener("load",()=>{o.status>=200&&o.status<300?(t.next(o.response),t.complete()):t.error(new Error(o.statusText))}),o.addEventListener("error",()=>{t.error(new Error("Network Error"))}),o.addEventListener("abort",()=>{t.error(new Error("Request aborted"))}),typeof(r==null?void 0:r.progress$)!="undefined"&&(o.addEventListener("progress",n=>{if(n.lengthComputable)r.progress$.next(n.loaded/n.total*100);else{let i=Number(o.getResponseHeader("Content-Length"))||0;r.progress$.next(n.loaded/i*100)}}),r.progress$.next(5)),o.send()})}function br(e,r){return tn(e,r).pipe(Q(t=>t.text()),P(t=>JSON.parse(t)),me(1))}function We(e,r=document){return Z(`[data-mdx-component=${e}]`,r)}function Nr(e,r=document){return Ht(`[data-mdx-component=${e}]`,r)}function Gt(e){let r=Ut(e),t=N(D(e,"keyup"),D(e,"focus").pipe(zr(1))).pipe(P(()=>e.value),he(e.value),pe());return r.pipe(Ee(o=>!o),He(t)).subscribe(([,o])=>{let n=document.location.pathname;typeof ga=="function"&&o.length&&ga("send","pageview",`${n}?q=[icon]+${o}`)}),Re([t,r]).pipe(P(([o,n])=>({ref:e,value:o,focus:n})))}var Qr=Gr(Dr());var ao=Gr(Dr());function io(e,r){return(0,ao.wrap)(e.shortcode,r,{wrap:{tagOpen:"",tagClose:""}})}function fo(e,r,t){return J("li",{class:"mdx-iconsearch-result__item"},J("span",{class:"twemoji"},J("img",{src:e.url})),J("button",{class:"md-clipboard--inline",title:Jt("clipboard.copy"),"data-clipboard-text":t?e.shortcode:`:${e.shortcode}:`},J("code",null,t?io(e,r):`:${io(e,r)}:`)))}function uo(e){let r=`@${e.name}`;return J("a",{href:e.url,title:r,class:"mdx-sponsorship__item"},J("img",{src:e.image}))}function co(e){return J("a",{href:"https://github.com/sponsors/squidfunk?metadata_origin=docs",class:"mdx-sponsorship__item mdx-sponsorship__item--private"},"+",e)}function on(e,{index$:r,query$:t}){switch(e.getAttribute("data-mdx-mode")){case"file":return Re([t.pipe(xr("value")),r.pipe(P(({icons:o})=>Object.values(o.data).map(n=>n.replace(/\.svg$/,""))))]).pipe(P(([{value:o},n])=>(0,Qr.filter)(n,o)),Q(o=>r.pipe(P(({icons:n})=>({data:o.map(i=>({shortcode:i,url:[n.base,i,".svg"].join("")}))})))));default:return Re([t.pipe(xr("value")),r.pipe(P(({icons:o,emojis:n})=>[...Object.keys(o.data),...Object.keys(n.data)]))]).pipe(P(([{value:o},n])=>(0,Qr.filter)(n,o)),Q(o=>r.pipe(P(({icons:n,emojis:i})=>({data:o.map(f=>{let s=f in n.data?n:i;return{shortcode:f,url:[s.base,s.data[f]].join("")}})})))))}}function so(e,{index$:r,query$:t}){let o=new B,n=Qt(e).pipe(Ee(Boolean)),i=Z(":scope > :first-child",e);o.pipe(He(t)).subscribe(([{data:u},{value:a}])=>{if(a)switch(u.length){case 0:i.textContent="No matches";break;case 1:i.textContent="1 match";break;default:i.textContent=`${jt(u.length)} matches`}else i.textContent="Type to start searching"});let f=e.getAttribute("data-mdx-mode")==="file",s=Z(":scope > :last-child",e);return o.pipe(ke(()=>s.innerHTML=""),Q(({data:u})=>N(ie(...u.slice(0,10)),ie(...u.slice(10)).pipe(Hr(10),$r(n),Q(([a])=>a)))),He(t)).subscribe(([u,{value:a}])=>s.appendChild(fo(u,a,f))),on(e,{query$:t,index$:r}).pipe(ke(u=>o.next(u)),le(()=>o.complete()),P(u=>Ke({ref:e},u)))}function po(e){let r=Kt(),t=br(new URL("assets/javascripts/iconsearch_index.json",r.base)),o=We("iconsearch-query",e),n=We("iconsearch-result",e),i=Gt(o),f=so(n,{index$:t,query$:i});return N(i,f)}function lo(e){let r=br("https://3if8u9o552.execute-api.us-east-1.amazonaws.com/_/"),t=We("sponsorship-count"),o=We("sponsorship-total");return r.subscribe(n=>{e.removeAttribute("hidden");let i=Z(":scope > :first-child",e);for(let f of n.sponsors)f.type==="public"&&i.appendChild(uo(f.user));i.appendChild(co(n.sponsors.filter(({type:f})=>f==="private").length)),t.innerText=`${n.sponsors.length}`,o.innerText=`$ ${n.total.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")} a month`}),r.pipe(P(n=>Ke({ref:e},n)))}function mo(){let{origin:e}=new URL(location.href);D(document.body,"click").subscribe(r=>{if(r.target instanceof HTMLElement){let t=r.target.closest("a");t&&t.origin!==e&&ga("send","event","outbound","click",t.href)}})}mo();var nn=document$.pipe(Q(()=>N(...Nr("iconsearch").map(e=>po(e)),...Nr("sponsorship").map(e=>lo(e)))));nn.subscribe();})(); +//# sourceMappingURL=custom.fe17d8dd.min.js.map diff --git a/material/overrides/assets/javascripts/custom.9c11c319.min.js.map b/material/overrides/assets/javascripts/custom.fe17d8dd.min.js.map similarity index 76% rename from material/overrides/assets/javascripts/custom.9c11c319.min.js.map rename to material/overrides/assets/javascripts/custom.fe17d8dd.min.js.map index 37bc358e5..2e36bd683 100644 --- a/material/overrides/assets/javascripts/custom.9c11c319.min.js.map +++ b/material/overrides/assets/javascripts/custom.fe17d8dd.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["node_modules/fuzzaldrin-plus/lib/scorer.js", "node_modules/fuzzaldrin-plus/lib/pathScorer.js", "node_modules/fuzzaldrin-plus/lib/query.js", "node_modules/fuzzaldrin-plus/lib/filter.js", "node_modules/fuzzaldrin-plus/lib/matcher.js", "node_modules/fuzzaldrin-plus/lib/fuzzaldrin.js", "node_modules/rxjs/node_modules/tslib/tslib.es6.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/templates/assets/javascripts/browser/element/_/index.ts", "src/templates/assets/javascripts/browser/element/focus/index.ts", "src/templates/assets/javascripts/browser/element/offset/content/index.ts", "src/templates/assets/javascripts/utilities/h/index.ts", "src/templates/assets/javascripts/utilities/round/index.ts", "src/templates/assets/javascripts/browser/script/index.ts", "src/templates/assets/javascripts/browser/element/size/_/index.ts", "src/templates/assets/javascripts/browser/element/size/content/index.ts", "src/templates/assets/javascripts/browser/element/visibility/index.ts", "src/templates/assets/javascripts/browser/toggle/index.ts", "src/templates/assets/javascripts/_/index.ts", "src/templates/assets/javascripts/browser/location/_/index.ts", "src/templates/assets/javascripts/browser/request/index.ts", "src/overrides/assets/javascripts/components/_/index.ts", "src/overrides/assets/javascripts/components/iconsearch/query/index.ts", "src/overrides/assets/javascripts/components/iconsearch/result/index.ts", "src/overrides/assets/javascripts/templates/iconsearch/index.tsx", "src/overrides/assets/javascripts/templates/sponsorship/index.tsx", "src/overrides/assets/javascripts/components/iconsearch/_/index.ts", "src/overrides/assets/javascripts/components/sponsorship/index.ts", "src/overrides/assets/javascripts/integrations/analytics/index.ts", "src/overrides/assets/javascripts/custom.ts"], - "sourcesContent": ["(function() {\n var AcronymResult, computeScore, emptyAcronymResult, isAcronymFullWord, isMatch, isSeparator, isWordEnd, isWordStart, miss_coeff, pos_bonus, scoreAcronyms, scoreCharacter, scoreConsecutives, scoreExact, scoreExactMatch, scorePattern, scorePosition, scoreSize, tau_size, wm;\n\n wm = 150;\n\n pos_bonus = 20;\n\n tau_size = 150;\n\n miss_coeff = 0.75;\n\n exports.score = function(string, query, options) {\n var allowErrors, preparedQuery, score, string_lw;\n preparedQuery = options.preparedQuery, allowErrors = options.allowErrors;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return 0;\n }\n string_lw = string.toLowerCase();\n score = computeScore(string, string_lw, preparedQuery);\n return Math.ceil(score);\n };\n\n exports.isMatch = isMatch = function(subject, query_lw, query_up) {\n var i, j, m, n, qj_lw, qj_up, si;\n m = subject.length;\n n = query_lw.length;\n if (!m || n > m) {\n return false;\n }\n i = -1;\n j = -1;\n while (++j < n) {\n qj_lw = query_lw.charCodeAt(j);\n qj_up = query_up.charCodeAt(j);\n while (++i < m) {\n si = subject.charCodeAt(i);\n if (si === qj_lw || si === qj_up) {\n break;\n }\n }\n if (i === m) {\n return false;\n }\n }\n return true;\n };\n\n exports.computeScore = computeScore = function(subject, subject_lw, preparedQuery) {\n var acro, acro_score, align, csc_diag, csc_row, csc_score, csc_should_rebuild, i, j, m, miss_budget, miss_left, n, pos, query, query_lw, record_miss, score, score_diag, score_row, score_up, si_lw, start, sz;\n query = preparedQuery.query;\n query_lw = preparedQuery.query_lw;\n m = subject.length;\n n = query.length;\n acro = scoreAcronyms(subject, subject_lw, query, query_lw);\n acro_score = acro.score;\n if (acro.count === n) {\n return scoreExact(n, m, acro_score, acro.pos);\n }\n pos = subject_lw.indexOf(query_lw);\n if (pos > -1) {\n return scoreExactMatch(subject, subject_lw, query, query_lw, pos, n, m);\n }\n score_row = new Array(n);\n csc_row = new Array(n);\n sz = scoreSize(n, m);\n miss_budget = Math.ceil(miss_coeff * n) + 5;\n miss_left = miss_budget;\n csc_should_rebuild = true;\n j = -1;\n while (++j < n) {\n score_row[j] = 0;\n csc_row[j] = 0;\n }\n i = -1;\n while (++i < m) {\n si_lw = subject_lw[i];\n if (!si_lw.charCodeAt(0) in preparedQuery.charCodes) {\n if (csc_should_rebuild) {\n j = -1;\n while (++j < n) {\n csc_row[j] = 0;\n }\n csc_should_rebuild = false;\n }\n continue;\n }\n score = 0;\n score_diag = 0;\n csc_diag = 0;\n record_miss = true;\n csc_should_rebuild = true;\n j = -1;\n while (++j < n) {\n score_up = score_row[j];\n if (score_up > score) {\n score = score_up;\n }\n csc_score = 0;\n if (query_lw[j] === si_lw) {\n start = isWordStart(i, subject, subject_lw);\n csc_score = csc_diag > 0 ? csc_diag : scoreConsecutives(subject, subject_lw, query, query_lw, i, j, start);\n align = score_diag + scoreCharacter(i, j, start, acro_score, csc_score);\n if (align > score) {\n score = align;\n miss_left = miss_budget;\n } else {\n if (record_miss && --miss_left <= 0) {\n return Math.max(score, score_row[n - 1]) * sz;\n }\n record_miss = false;\n }\n }\n score_diag = score_up;\n csc_diag = csc_row[j];\n csc_row[j] = csc_score;\n score_row[j] = score;\n }\n }\n score = score_row[n - 1];\n return score * sz;\n };\n\n exports.isWordStart = isWordStart = function(pos, subject, subject_lw) {\n var curr_s, prev_s;\n if (pos === 0) {\n return true;\n }\n curr_s = subject[pos];\n prev_s = subject[pos - 1];\n return isSeparator(prev_s) || (curr_s !== subject_lw[pos] && prev_s === subject_lw[pos - 1]);\n };\n\n exports.isWordEnd = isWordEnd = function(pos, subject, subject_lw, len) {\n var curr_s, next_s;\n if (pos === len - 1) {\n return true;\n }\n curr_s = subject[pos];\n next_s = subject[pos + 1];\n return isSeparator(next_s) || (curr_s === subject_lw[pos] && next_s !== subject_lw[pos + 1]);\n };\n\n isSeparator = function(c) {\n return c === ' ' || c === '.' || c === '-' || c === '_' || c === '/' || c === '\\\\';\n };\n\n scorePosition = function(pos) {\n var sc;\n if (pos < pos_bonus) {\n sc = pos_bonus - pos;\n return 100 + sc * sc;\n } else {\n return Math.max(100 + pos_bonus - pos, 0);\n }\n };\n\n exports.scoreSize = scoreSize = function(n, m) {\n return tau_size / (tau_size + Math.abs(m - n));\n };\n\n scoreExact = function(n, m, quality, pos) {\n return 2 * n * (wm * quality + scorePosition(pos)) * scoreSize(n, m);\n };\n\n exports.scorePattern = scorePattern = function(count, len, sameCase, start, end) {\n var bonus, sz;\n sz = count;\n bonus = 6;\n if (sameCase === count) {\n bonus += 2;\n }\n if (start) {\n bonus += 3;\n }\n if (end) {\n bonus += 1;\n }\n if (count === len) {\n if (start) {\n if (sameCase === len) {\n sz += 2;\n } else {\n sz += 1;\n }\n }\n if (end) {\n bonus += 1;\n }\n }\n return sameCase + sz * (sz + bonus);\n };\n\n exports.scoreCharacter = scoreCharacter = function(i, j, start, acro_score, csc_score) {\n var posBonus;\n posBonus = scorePosition(i);\n if (start) {\n return posBonus + wm * ((acro_score > csc_score ? acro_score : csc_score) + 10);\n }\n return posBonus + wm * csc_score;\n };\n\n exports.scoreConsecutives = scoreConsecutives = function(subject, subject_lw, query, query_lw, i, j, startOfWord) {\n var k, m, mi, n, nj, sameCase, sz;\n m = subject.length;\n n = query.length;\n mi = m - i;\n nj = n - j;\n k = mi < nj ? mi : nj;\n sameCase = 0;\n sz = 0;\n if (query[j] === subject[i]) {\n sameCase++;\n }\n while (++sz < k && query_lw[++j] === subject_lw[++i]) {\n if (query[j] === subject[i]) {\n sameCase++;\n }\n }\n if (sz < k) {\n i--;\n }\n if (sz === 1) {\n return 1 + 2 * sameCase;\n }\n return scorePattern(sz, n, sameCase, startOfWord, isWordEnd(i, subject, subject_lw, m));\n };\n\n exports.scoreExactMatch = scoreExactMatch = function(subject, subject_lw, query, query_lw, pos, n, m) {\n var end, i, pos2, sameCase, start;\n start = isWordStart(pos, subject, subject_lw);\n if (!start) {\n pos2 = subject_lw.indexOf(query_lw, pos + 1);\n if (pos2 > -1) {\n start = isWordStart(pos2, subject, subject_lw);\n if (start) {\n pos = pos2;\n }\n }\n }\n i = -1;\n sameCase = 0;\n while (++i < n) {\n if (query[pos + i] === subject[i]) {\n sameCase++;\n }\n }\n end = isWordEnd(pos + n - 1, subject, subject_lw, m);\n return scoreExact(n, m, scorePattern(n, n, sameCase, start, end), pos);\n };\n\n AcronymResult = (function() {\n function AcronymResult(score, pos, count) {\n this.score = score;\n this.pos = pos;\n this.count = count;\n }\n\n return AcronymResult;\n\n })();\n\n emptyAcronymResult = new AcronymResult(0, 0.1, 0);\n\n exports.scoreAcronyms = scoreAcronyms = function(subject, subject_lw, query, query_lw) {\n var count, fullWord, i, j, m, n, qj_lw, sameCase, score, sepCount, sumPos;\n m = subject.length;\n n = query.length;\n if (!(m > 1 && n > 1)) {\n return emptyAcronymResult;\n }\n count = 0;\n sepCount = 0;\n sumPos = 0;\n sameCase = 0;\n i = -1;\n j = -1;\n while (++j < n) {\n qj_lw = query_lw[j];\n if (isSeparator(qj_lw)) {\n i = subject_lw.indexOf(qj_lw, i + 1);\n if (i > -1) {\n sepCount++;\n continue;\n } else {\n break;\n }\n }\n while (++i < m) {\n if (qj_lw === subject_lw[i] && isWordStart(i, subject, subject_lw)) {\n if (query[j] === subject[i]) {\n sameCase++;\n }\n sumPos += i;\n count++;\n break;\n }\n }\n if (i === m) {\n break;\n }\n }\n if (count < 2) {\n return emptyAcronymResult;\n }\n fullWord = count === n ? isAcronymFullWord(subject, subject_lw, query, count) : false;\n score = scorePattern(count, n, sameCase, true, fullWord);\n return new AcronymResult(score, sumPos / count, count + sepCount);\n };\n\n isAcronymFullWord = function(subject, subject_lw, query, nbAcronymInQuery) {\n var count, i, m, n;\n m = subject.length;\n n = query.length;\n count = 0;\n if (m > 12 * n) {\n return false;\n }\n i = -1;\n while (++i < m) {\n if (isWordStart(i, subject, subject_lw) && ++count > nbAcronymInQuery) {\n return false;\n }\n }\n return true;\n };\n\n}).call(this);\n", "(function() {\n var computeScore, countDir, file_coeff, getExtension, getExtensionScore, isMatch, scorePath, scoreSize, tau_depth, _ref;\n\n _ref = require('./scorer'), isMatch = _ref.isMatch, computeScore = _ref.computeScore, scoreSize = _ref.scoreSize;\n\n tau_depth = 20;\n\n file_coeff = 2.5;\n\n exports.score = function(string, query, options) {\n var allowErrors, preparedQuery, score, string_lw;\n preparedQuery = options.preparedQuery, allowErrors = options.allowErrors;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return 0;\n }\n string_lw = string.toLowerCase();\n score = computeScore(string, string_lw, preparedQuery);\n score = scorePath(string, string_lw, score, options);\n return Math.ceil(score);\n };\n\n scorePath = function(subject, subject_lw, fullPathScore, options) {\n var alpha, basePathScore, basePos, depth, end, extAdjust, fileLength, pathSeparator, preparedQuery, useExtensionBonus;\n if (fullPathScore === 0) {\n return 0;\n }\n preparedQuery = options.preparedQuery, useExtensionBonus = options.useExtensionBonus, pathSeparator = options.pathSeparator;\n end = subject.length - 1;\n while (subject[end] === pathSeparator) {\n end--;\n }\n basePos = subject.lastIndexOf(pathSeparator, end);\n fileLength = end - basePos;\n extAdjust = 1.0;\n if (useExtensionBonus) {\n extAdjust += getExtensionScore(subject_lw, preparedQuery.ext, basePos, end, 2);\n fullPathScore *= extAdjust;\n }\n if (basePos === -1) {\n return fullPathScore;\n }\n depth = preparedQuery.depth;\n while (basePos > -1 && depth-- > 0) {\n basePos = subject.lastIndexOf(pathSeparator, basePos - 1);\n }\n basePathScore = basePos === -1 ? fullPathScore : extAdjust * computeScore(subject.slice(basePos + 1, end + 1), subject_lw.slice(basePos + 1, end + 1), preparedQuery);\n alpha = 0.5 * tau_depth / (tau_depth + countDir(subject, end + 1, pathSeparator));\n return alpha * basePathScore + (1 - alpha) * fullPathScore * scoreSize(0, file_coeff * fileLength);\n };\n\n exports.countDir = countDir = function(path, end, pathSeparator) {\n var count, i;\n if (end < 1) {\n return 0;\n }\n count = 0;\n i = -1;\n while (++i < end && path[i] === pathSeparator) {\n continue;\n }\n while (++i < end) {\n if (path[i] === pathSeparator) {\n count++;\n while (++i < end && path[i] === pathSeparator) {\n continue;\n }\n }\n }\n return count;\n };\n\n exports.getExtension = getExtension = function(str) {\n var pos;\n pos = str.lastIndexOf(\".\");\n if (pos < 0) {\n return \"\";\n } else {\n return str.substr(pos + 1);\n }\n };\n\n getExtensionScore = function(candidate, ext, startPos, endPos, maxDepth) {\n var m, matched, n, pos;\n if (!ext.length) {\n return 0;\n }\n pos = candidate.lastIndexOf(\".\", endPos);\n if (!(pos > startPos)) {\n return 0;\n }\n n = ext.length;\n m = endPos - pos;\n if (m < n) {\n n = m;\n m = ext.length;\n }\n pos++;\n matched = -1;\n while (++matched < n) {\n if (candidate[pos + matched] !== ext[matched]) {\n break;\n }\n }\n if (matched === 0 && maxDepth > 0) {\n return 0.9 * getExtensionScore(candidate, ext, startPos, pos - 2, maxDepth - 1);\n }\n return matched / m;\n };\n\n}).call(this);\n", "(function() {\n var Query, coreChars, countDir, getCharCodes, getExtension, opt_char_re, truncatedUpperCase, _ref;\n\n _ref = require(\"./pathScorer\"), countDir = _ref.countDir, getExtension = _ref.getExtension;\n\n module.exports = Query = (function() {\n function Query(query, _arg) {\n var optCharRegEx, pathSeparator, _ref1;\n _ref1 = _arg != null ? _arg : {}, optCharRegEx = _ref1.optCharRegEx, pathSeparator = _ref1.pathSeparator;\n if (!(query && query.length)) {\n return null;\n }\n this.query = query;\n this.query_lw = query.toLowerCase();\n this.core = coreChars(query, optCharRegEx);\n this.core_lw = this.core.toLowerCase();\n this.core_up = truncatedUpperCase(this.core);\n this.depth = countDir(query, query.length, pathSeparator);\n this.ext = getExtension(this.query_lw);\n this.charCodes = getCharCodes(this.query_lw);\n }\n\n return Query;\n\n })();\n\n opt_char_re = /[ _\\-:\\/\\\\]/g;\n\n coreChars = function(query, optCharRegEx) {\n if (optCharRegEx == null) {\n optCharRegEx = opt_char_re;\n }\n return query.replace(optCharRegEx, '');\n };\n\n truncatedUpperCase = function(str) {\n var char, upper, _i, _len;\n upper = \"\";\n for (_i = 0, _len = str.length; _i < _len; _i++) {\n char = str[_i];\n upper += char.toUpperCase()[0];\n }\n return upper;\n };\n\n getCharCodes = function(str) {\n var charCodes, i, len;\n len = str.length;\n i = -1;\n charCodes = [];\n while (++i < len) {\n charCodes[str.charCodeAt(i)] = true;\n }\n return charCodes;\n };\n\n}).call(this);\n", "(function() {\n var Query, pathScorer, pluckCandidates, scorer, sortCandidates;\n\n scorer = require('./scorer');\n\n pathScorer = require('./pathScorer');\n\n Query = require('./query');\n\n pluckCandidates = function(a) {\n return a.candidate;\n };\n\n sortCandidates = function(a, b) {\n return b.score - a.score;\n };\n\n module.exports = function(candidates, query, options) {\n var bKey, candidate, key, maxInners, maxResults, score, scoreProvider, scoredCandidates, spotLeft, string, usePathScoring, _i, _len;\n scoredCandidates = [];\n key = options.key, maxResults = options.maxResults, maxInners = options.maxInners, usePathScoring = options.usePathScoring;\n spotLeft = (maxInners != null) && maxInners > 0 ? maxInners : candidates.length + 1;\n bKey = key != null;\n scoreProvider = usePathScoring ? pathScorer : scorer;\n for (_i = 0, _len = candidates.length; _i < _len; _i++) {\n candidate = candidates[_i];\n string = bKey ? candidate[key] : candidate;\n if (!string) {\n continue;\n }\n score = scoreProvider.score(string, query, options);\n if (score > 0) {\n scoredCandidates.push({\n candidate: candidate,\n score: score\n });\n if (!--spotLeft) {\n break;\n }\n }\n }\n scoredCandidates.sort(sortCandidates);\n candidates = scoredCandidates.map(pluckCandidates);\n if (maxResults != null) {\n candidates = candidates.slice(0, maxResults);\n }\n return candidates;\n };\n\n}).call(this);\n", "(function() {\n var basenameMatch, computeMatch, isMatch, isWordStart, match, mergeMatches, scoreAcronyms, scoreCharacter, scoreConsecutives, _ref;\n\n _ref = require('./scorer'), isMatch = _ref.isMatch, isWordStart = _ref.isWordStart, scoreConsecutives = _ref.scoreConsecutives, scoreCharacter = _ref.scoreCharacter, scoreAcronyms = _ref.scoreAcronyms;\n\n exports.match = match = function(string, query, options) {\n var allowErrors, baseMatches, matches, pathSeparator, preparedQuery, string_lw;\n allowErrors = options.allowErrors, preparedQuery = options.preparedQuery, pathSeparator = options.pathSeparator;\n if (!(allowErrors || isMatch(string, preparedQuery.core_lw, preparedQuery.core_up))) {\n return [];\n }\n string_lw = string.toLowerCase();\n matches = computeMatch(string, string_lw, preparedQuery);\n if (matches.length === 0) {\n return matches;\n }\n if (string.indexOf(pathSeparator) > -1) {\n baseMatches = basenameMatch(string, string_lw, preparedQuery, pathSeparator);\n matches = mergeMatches(matches, baseMatches);\n }\n return matches;\n };\n\n exports.wrap = function(string, query, options) {\n var matchIndex, matchPos, matchPositions, output, strPos, tagClass, tagClose, tagOpen, _ref1;\n if ((options.wrap != null)) {\n _ref1 = options.wrap, tagClass = _ref1.tagClass, tagOpen = _ref1.tagOpen, tagClose = _ref1.tagClose;\n }\n if (tagClass == null) {\n tagClass = 'highlight';\n }\n if (tagOpen == null) {\n tagOpen = '';\n }\n if (tagClose == null) {\n tagClose = '';\n }\n if (string === query) {\n return tagOpen + string + tagClose;\n }\n matchPositions = match(string, query, options);\n if (matchPositions.length === 0) {\n return string;\n }\n output = '';\n matchIndex = -1;\n strPos = 0;\n while (++matchIndex < matchPositions.length) {\n matchPos = matchPositions[matchIndex];\n if (matchPos > strPos) {\n output += string.substring(strPos, matchPos);\n strPos = matchPos;\n }\n while (++matchIndex < matchPositions.length) {\n if (matchPositions[matchIndex] === matchPos + 1) {\n matchPos++;\n } else {\n matchIndex--;\n break;\n }\n }\n matchPos++;\n if (matchPos > strPos) {\n output += tagOpen;\n output += string.substring(strPos, matchPos);\n output += tagClose;\n strPos = matchPos;\n }\n }\n if (strPos <= string.length - 1) {\n output += string.substring(strPos);\n }\n return output;\n };\n\n basenameMatch = function(subject, subject_lw, preparedQuery, pathSeparator) {\n var basePos, depth, end;\n end = subject.length - 1;\n while (subject[end] === pathSeparator) {\n end--;\n }\n basePos = subject.lastIndexOf(pathSeparator, end);\n if (basePos === -1) {\n return [];\n }\n depth = preparedQuery.depth;\n while (depth-- > 0) {\n basePos = subject.lastIndexOf(pathSeparator, basePos - 1);\n if (basePos === -1) {\n return [];\n }\n }\n basePos++;\n end++;\n return computeMatch(subject.slice(basePos, end), subject_lw.slice(basePos, end), preparedQuery, basePos);\n };\n\n mergeMatches = function(a, b) {\n var ai, bj, i, j, m, n, out;\n m = a.length;\n n = b.length;\n if (n === 0) {\n return a.slice();\n }\n if (m === 0) {\n return b.slice();\n }\n i = -1;\n j = 0;\n bj = b[j];\n out = [];\n while (++i < m) {\n ai = a[i];\n while (bj <= ai && ++j < n) {\n if (bj < ai) {\n out.push(bj);\n }\n bj = b[j];\n }\n out.push(ai);\n }\n while (j < n) {\n out.push(b[j++]);\n }\n return out;\n };\n\n computeMatch = function(subject, subject_lw, preparedQuery, offset) {\n var DIAGONAL, LEFT, STOP, UP, acro_score, align, backtrack, csc_diag, csc_row, csc_score, i, j, m, matches, move, n, pos, query, query_lw, score, score_diag, score_row, score_up, si_lw, start, trace;\n if (offset == null) {\n offset = 0;\n }\n query = preparedQuery.query;\n query_lw = preparedQuery.query_lw;\n m = subject.length;\n n = query.length;\n acro_score = scoreAcronyms(subject, subject_lw, query, query_lw).score;\n score_row = new Array(n);\n csc_row = new Array(n);\n STOP = 0;\n UP = 1;\n LEFT = 2;\n DIAGONAL = 3;\n trace = new Array(m * n);\n pos = -1;\n j = -1;\n while (++j < n) {\n score_row[j] = 0;\n csc_row[j] = 0;\n }\n i = -1;\n while (++i < m) {\n score = 0;\n score_up = 0;\n csc_diag = 0;\n si_lw = subject_lw[i];\n j = -1;\n while (++j < n) {\n csc_score = 0;\n align = 0;\n score_diag = score_up;\n if (query_lw[j] === si_lw) {\n start = isWordStart(i, subject, subject_lw);\n csc_score = csc_diag > 0 ? csc_diag : scoreConsecutives(subject, subject_lw, query, query_lw, i, j, start);\n align = score_diag + scoreCharacter(i, j, start, acro_score, csc_score);\n }\n score_up = score_row[j];\n csc_diag = csc_row[j];\n if (score > score_up) {\n move = LEFT;\n } else {\n score = score_up;\n move = UP;\n }\n if (align > score) {\n score = align;\n move = DIAGONAL;\n } else {\n csc_score = 0;\n }\n score_row[j] = score;\n csc_row[j] = csc_score;\n trace[++pos] = score > 0 ? move : STOP;\n }\n }\n i = m - 1;\n j = n - 1;\n pos = i * n + j;\n backtrack = true;\n matches = [];\n while (backtrack && i >= 0 && j >= 0) {\n switch (trace[pos]) {\n case UP:\n i--;\n pos -= n;\n break;\n case LEFT:\n j--;\n pos--;\n break;\n case DIAGONAL:\n matches.push(i + offset);\n j--;\n i--;\n pos -= n + 1;\n break;\n default:\n backtrack = false;\n }\n }\n matches.reverse();\n return matches;\n };\n\n}).call(this);\n", "(function() {\n var Query, defaultPathSeparator, filter, matcher, parseOptions, pathScorer, preparedQueryCache, scorer;\n\n filter = require('./filter');\n\n matcher = require('./matcher');\n\n scorer = require('./scorer');\n\n pathScorer = require('./pathScorer');\n\n Query = require('./query');\n\n preparedQueryCache = null;\n\n defaultPathSeparator = (typeof process !== \"undefined\" && process !== null ? process.platform : void 0) === \"win32\" ? '\\\\' : '/';\n\n module.exports = {\n filter: function(candidates, query, options) {\n if (options == null) {\n options = {};\n }\n if (!((query != null ? query.length : void 0) && (candidates != null ? candidates.length : void 0))) {\n return [];\n }\n options = parseOptions(options, query);\n return filter(candidates, query, options);\n },\n score: function(string, query, options) {\n if (options == null) {\n options = {};\n }\n if (!((string != null ? string.length : void 0) && (query != null ? query.length : void 0))) {\n return 0;\n }\n options = parseOptions(options, query);\n if (options.usePathScoring) {\n return pathScorer.score(string, query, options);\n } else {\n return scorer.score(string, query, options);\n }\n },\n match: function(string, query, options) {\n var _i, _ref, _results;\n if (options == null) {\n options = {};\n }\n if (!string) {\n return [];\n }\n if (!query) {\n return [];\n }\n if (string === query) {\n return (function() {\n _results = [];\n for (var _i = 0, _ref = string.length; 0 <= _ref ? _i < _ref : _i > _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }\n return _results;\n }).apply(this);\n }\n options = parseOptions(options, query);\n return matcher.match(string, query, options);\n },\n wrap: function(string, query, options) {\n if (options == null) {\n options = {};\n }\n if (!string) {\n return [];\n }\n if (!query) {\n return [];\n }\n options = parseOptions(options, query);\n return matcher.wrap(string, query, options);\n },\n prepareQuery: function(query, options) {\n if (options == null) {\n options = {};\n }\n options = parseOptions(options, query);\n return options.preparedQuery;\n }\n };\n\n parseOptions = function(options, query) {\n if (options.allowErrors == null) {\n options.allowErrors = false;\n }\n if (options.usePathScoring == null) {\n options.usePathScoring = true;\n }\n if (options.useExtensionBonus == null) {\n options.useExtensionBonus = false;\n }\n if (options.pathSeparator == null) {\n options.pathSeparator = defaultPathSeparator;\n }\n if (options.optCharRegEx == null) {\n options.optCharRegEx = null;\n }\n if (options.wrap == null) {\n options.wrap = null;\n }\n if (options.preparedQuery == null) {\n options.preparedQuery = preparedQueryCache && preparedQueryCache.query === query ? preparedQueryCache : (preparedQueryCache = new Query(query, options));\n }\n return options;\n };\n\n}).call(this);\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n", "/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n", "/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n", "/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered finalizers to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _finalizers: Exclude[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the finalization\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a finalizer to this subscription, so that finalization will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever finalizer is passed to it\n * will automatically be executed (unless the finalizer itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as finalizers to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The finalization logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the finalizer if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever finalizer is handed to it automatically.\n execFinalizer(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = this._finalizers ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a finalizer from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same finalizer instance of a function or an unsubscribable object to a `Subscription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All finalizer instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The finalizer to remove from this subscription\n */\n remove(teardown: Exclude): void {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execFinalizer(finalizer: Unsubscribable | (() => void)) {\n if (isFunction(finalizer)) {\n finalizer();\n } else {\n finalizer.unsubscribe();\n }\n}\n", "import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification, subscriber: Subscriber) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearTimeoutFunction = (handle: TimerHandle) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(handler: () => void, timeout?: number, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate?.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle as any);\n },\n delegate: undefined,\n};\n", "import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\n\n/**\n * Handles an error on another job either with the user-configured {@link onUnhandledError},\n * or by throwing it on that new job so it can be picked up by `window.onerror`, `process.on('error')`, etc.\n *\n * This should be called whenever there is an error that is out-of-band with the subscription\n * or when an error hits a terminal boundary of the subscription and no error handler was provided.\n *\n * @param err the error to report\n */\nexport function reportUnhandledError(err: any) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n // Execute the user-configured error handler.\n onUnhandledError(err);\n } else {\n // Throw so it is picked up by the runtime's uncaught error mechanism.\n throw err;\n }\n });\n}\n", "/* tslint:disable:no-empty */\nexport function noop() { }\n", "import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification(value: T) {\n return createNotification('N', value, undefined) as NextNotification;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n", "import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n", "import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber\n */\nexport class Subscriber extends Subscription implements Observer {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber | Observer; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber | Observer) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\n/**\n * This bind is captured here because we want to be able to have\n * compatibility with monoid libraries that tend to use a method named\n * `bind`. In particular, a library called Monio requires this.\n */\nconst _bind = Function.prototype.bind;\n\nfunction bind any>(fn: Fn, thisArg: any): Fn {\n return _bind.call(fn, thisArg);\n}\n\n/**\n * Internal optimization only, DO NOT EXPOSE.\n * @internal\n */\nclass ConsumerObserver implements Observer {\n constructor(private partialObserver: Partial>) {}\n\n next(value: T): void {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n\n error(err: any): void {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n } catch (error) {\n handleUnhandledError(error);\n }\n } else {\n handleUnhandledError(err);\n }\n }\n\n complete(): void {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n } catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\n\nexport class SafeSubscriber extends Subscriber {\n constructor(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let partialObserver: Partial>;\n if (isFunction(observerOrNext) || !observerOrNext) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n partialObserver = {\n next: (observerOrNext ?? undefined) as (((value: T) => void) | undefined),\n error: error ?? undefined,\n complete: complete ?? undefined,\n };\n } else {\n // The first argument is a partial observer.\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n } else {\n // The \"normal\" path. Just use the partial observer directly.\n partialObserver = observerOrNext;\n }\n }\n\n // Wrap the partial observer to ensure it's a full observer, and\n // make sure proper error handling is accounted for.\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\n\nfunction handleUnhandledError(error: any) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(error);\n }\n}\n\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification, subscriber: Subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n", "/**\n * Symbol.observable or a string \"@@observable\". Used for interop\n *\n * @deprecated We will no longer be exporting this symbol in upcoming versions of RxJS.\n * Instead polyfill and use Symbol.observable directly *or* use https://www.npmjs.com/package/symbol-observable\n */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n", "/**\n * This function takes one parameter and just returns it. Simply put,\n * this is like `(x: T): T => x`.\n *\n * ## Examples\n *\n * This is useful in some cases when using things like `mergeMap`\n *\n * ```ts\n * import { interval, take, map, range, mergeMap, identity } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(5));\n *\n * const result$ = source$.pipe(\n * map(i => range(i)),\n * mergeMap(identity) // same as mergeMap(x => x)\n * );\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * Or when you want to selectively apply an operator\n *\n * ```ts\n * import { interval, take, identity } from 'rxjs';\n *\n * const shouldLimit = () => Math.random() < 0.5;\n *\n * const source$ = interval(1000);\n *\n * const result$ = source$.pipe(shouldLimit() ? take(5) : identity);\n *\n * result$.subscribe({\n * next: console.log\n * });\n * ```\n *\n * @param x Any value that is returned by this function\n * @returns The value passed as the first parameter to this function\n */\nexport function identity(x: T): T {\n return x;\n}\n", "import { identity } from './identity';\nimport { UnaryFunction } from '../types';\n\nexport function pipe(): typeof identity;\nexport function pipe(fn1: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction): UnaryFunction;\nexport function pipe(fn1: UnaryFunction, fn2: UnaryFunction, fn3: UnaryFunction): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction\n): UnaryFunction;\nexport function pipe(\n fn1: UnaryFunction,\n fn2: UnaryFunction,\n fn3: UnaryFunction,\n fn4: UnaryFunction,\n fn5: UnaryFunction,\n fn6: UnaryFunction,\n fn7: UnaryFunction,\n fn8: UnaryFunction,\n fn9: UnaryFunction,\n ...fns: UnaryFunction[]\n): UnaryFunction;\n\n/**\n * pipe() can be called on one or more functions, each of which can take one argument (\"UnaryFunction\")\n * and uses it to return a value.\n * It returns a function that takes one argument, passes it to the first UnaryFunction, and then\n * passes the result to the next one, passes that result to the next one, and so on. \n */\nexport function pipe(...fns: Array>): UnaryFunction {\n return pipeFromArray(fns);\n}\n\n/** @internal */\nexport function pipeFromArray(fns: Array>): UnaryFunction {\n if (fns.length === 0) {\n return identity as UnaryFunction;\n }\n\n if (fns.length === 1) {\n return fns[0];\n }\n\n return function piped(input: T): R {\n return fns.reduce((prev: any, fn: UnaryFunction) => fn(prev), input as any);\n };\n}\n", "import { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable\n */\nexport class Observable implements Subscribable {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable, subscriber: Subscriber) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = (subscribe?: (subscriber: Subscriber) => TeardownLogic) => {\n return new Observable(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift(operator?: Operator): Observable {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observerOrNext?: Partial> | ((value: T) => void)): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * Use it when you have all these Observables, but still nothing is happening.\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * #### Examples\n *\n * Subscribe with an {@link guide/observer Observer}\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Subscribe with functions ({@link deprecations/subscribe-arguments deprecated})\n *\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // 'Adding: 1'\n * // 'Adding: 2'\n * // 'Adding: 3'\n * // 'Sum equals: 6'\n * ```\n *\n * Cancel a subscription\n *\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 'unsubscribed!' after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * #### Example\n *\n * ```ts\n * import { interval, take } from 'rxjs';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ' + value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total: ' + total)\n * );\n *\n * // Expected:\n * // 'observable -> 0'\n * // 'observable -> 1'\n * // 'observable -> 2'\n * // 'observable -> 3'\n * // 'Total: 6'\n * ```\n *\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable;\n pipe(op1: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction,\n ...operations: OperatorFunction[]\n ): Observable;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ## Example\n *\n * ```ts\n * import { interval, filter, map, scan } from 'rxjs';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x));\n * ```\n */\n pipe(...operations: OperatorFunction[]): Observable {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver(value: any): value is Observer {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber(value: any): value is Subscriber {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n", "import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction } from '../types';\nimport { isFunction } from './isFunction';\n\n/**\n * Used to determine if an object is an Observable with a lift function.\n */\nexport function hasLift(source: any): source is { lift: InstanceType['lift'] } {\n return isFunction(source?.lift);\n}\n\n/**\n * Creates an `OperatorFunction`. Used to define operators throughout the library in a concise way.\n * @param init The logic to connect the liftedSource to the subscriber at the moment of subscription.\n */\nexport function operate(\n init: (liftedSource: Observable, subscriber: Subscriber) => (() => void) | void\n): OperatorFunction {\n return (source: Observable) => {\n if (hasLift(source)) {\n return source.lift(function (this: Subscriber, liftedSource: Observable) {\n try {\n return init(liftedSource, this);\n } catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n", "import { Subscriber } from '../Subscriber';\n\n/**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\nexport function createOperatorSubscriber(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n onFinalize?: () => void\n): Subscriber {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber extends Subscriber {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional finalization logic here. This will only be called on finalization if the\n * subscriber itself is not already closed. This is called after all other finalization logic is executed.\n * @param shouldUnsubscribe An optional check to see if an unsubscribe call should truly unsubscribe.\n * NOTE: This currently **ONLY** exists to support the strange behavior of {@link groupBy}, where unsubscription\n * to the resulting observable does not actually disconnect from the source if there are active subscriptions\n * to any grouped observable. (DO NOT EXPOSE OR USE EXTERNALLY!!!)\n */\n constructor(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void,\n private shouldUnsubscribe?: () => boolean\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure finalization.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n }\n}\n", "import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n", "import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n", "import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject extends Observable implements SubscriptionLike {\n closed = false;\n\n private currentObservers: Observer[] | null = null;\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = (destination: Observer, source: Observable): AnonymousSubject => {\n return new AnonymousSubject(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift(operator: Operator): Observable {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create custom Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable {\n const observable: any = new Observable();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject\n */\nexport class AnonymousSubject extends Subject {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer,\n source?: Observable\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n", "import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n", "import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple of exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject extends Subject {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will stay buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action\n */\nexport class Action extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler.\n * @return {void}\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n", "import type { TimerHandle } from './timerHandle';\ntype SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => TimerHandle;\ntype ClearIntervalFunction = (handle: TimerHandle) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(handler: () => void, timeout?: number, ...args) {\n const { delegate } = intervalProvider;\n if (delegate?.setInterval) {\n return delegate.setInterval(handler, timeout, ...args);\n }\n return setInterval(handler, timeout, ...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle as any);\n },\n delegate: undefined,\n};\n", "import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncAction extends Action {\n public id: TimerHandle | undefined;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id ?? this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: TimerHandle, delay: number = 0): TimerHandle {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id?: TimerHandle, delay: number | null = 0): TimerHandle | undefined {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n * @return {any}\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n", "import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return {number} A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param {function(state: ?T): ?Subscription} work A function representing a\n * task, or some unit of work to be executed by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler itself.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @return {Subscription} A subscription in order to be able to unsubscribe\n * the scheduled work.\n */\n public schedule(work: (this: SchedulerAction, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\n", "import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\nimport { TimerHandle } from './timerHandle';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @type {boolean}\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @type {any}\n * @internal\n */\n public _scheduled: TimerHandle | undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * Schedule task as if you used setTimeout(task, duration)\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n", "import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\nimport { TimerHandle } from './timerHandle';\n\nexport class AnimationFrameAction extends AsyncAction {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: TimerHandle, delay: number = 0): TimerHandle | undefined {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if (delay != null ? delay > 0 : this.delay > 0) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested animation frame and set the scheduled flag to\n // undefined so the next AnimationFrameAction will request its own.\n const { actions } = scheduler;\n if (id != null && actions[actions.length - 1]?.id !== id) {\n animationFrameProvider.cancelAnimationFrame(id as number);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n", "import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n const flushId = this._scheduled;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n", "import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * Perform task when `window.requestAnimationFrame` would fire\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html:
\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n", "import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * A simple Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * A simple Observable that only emits the complete notification. It can be used\n * for composing with other Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n *\n * Emit the number 7, then complete\n *\n * ```ts\n * import { EMPTY, startWith } from 'rxjs';\n *\n * const result = EMPTY.pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * Map and flatten only odd numbers to the sequence `'a'`, `'b'`, `'c'`\n *\n * ```ts\n * import { interval, mergeMap, of, EMPTY } from 'rxjs';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : EMPTY),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link NEVER}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\n\n/**\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport function isScheduler(value: any): value is SchedulerLike {\n return value && isFunction(value.schedule);\n}\n", "import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n", "export const isArrayLike = ((x: any): x is ArrayLike => x && typeof x.length === 'number' && typeof x !== 'function');", "import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike {\n return isFunction(value?.then);\n}\n", "import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable {\n return isFunction(input[Symbol_observable]);\n}\n", "import { isFunction } from './isFunction';\n\nexport function isAsyncIterable(obj: any): obj is AsyncIterable {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n", "/**\n * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`.\n * @param input The object that was passed.\n */\nexport function createInvalidObservableTypeError(input: any) {\n // TODO: We should create error codes that can be looked up, so this can be less verbose.\n return new TypeError(\n `You provided ${\n input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`\n } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`\n );\n}\n", "export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n", "import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable {\n return isFunction(input?.[Symbol_iterator]);\n}\n", "import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator(readableStream: ReadableStreamLike): AsyncGenerator {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike(obj: any): obj is ReadableStreamLike {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an