@@ -30,5 +30,6 @@ W ramach projektu zaimplementowane zostały następujace funkcjonalności:
## Wykorzystane technologie
W ramach realizacji projektu udało mi się zapoznać z następującymi technologami i narzędziami
+
- C++
-- WinApi
\ No newline at end of file
+- WinApi
diff --git a/_i18n/pl/_projects/night-catcher.md b/_i18n/pl/_projects/night-catcher.md
index edccfa01..74bf49c5 100644
--- a/_i18n/pl/_projects/night-catcher.md
+++ b/_i18n/pl/_projects/night-catcher.md
@@ -34,12 +34,13 @@ W ramach projektu zaimplementowane zostały następujace funkcjonalności:
## Wykorzystane technologie
W ramach realizacji projektu udało mi się zapoznać z następującymi technologami i narzędziami
+
- .NET
-- C#
+- C#
- Animacje 2D
- Unity Cinemachine
- Visual Studio
-- Unity Profiler
+- Unity Profiler
- Wwise
- NUnit
- Hack&Plan
diff --git a/_i18n/pl/_projects/polygangs.md b/_i18n/pl/_projects/polygangs.md
index 1124da5f..897205c3 100644
--- a/_i18n/pl/_projects/polygangs.md
+++ b/_i18n/pl/_projects/polygangs.md
@@ -21,6 +21,7 @@ Gra skupia się na odwzorowaniu życia w polskim mieście w latach 90 XX wieku.
## Obowiązki
W ramach tego projektu byłem odpowiedzialny za:
+
- naprawę błędów
- projektowanie i tworzenie nowych mechanik
- przeglądy kodu
@@ -31,4 +32,4 @@ W ramach tego projektu byłem odpowiedzialny za:
## Zdobyte doświadczenie
-Był to jeden z pierwszych tytułów gier, w którym pracowałem w pełni komercyjnym projekcie w branży game-dev. Nauczył mnie dystanstu do tworzonego przeze mnie kodu, uwzględniania dostępności nowych funkcjonalności przy projektowaniu dla osób nietechnicznych i podejmowania kompromisu technologicznego, szybkiego prototypowania oraz testowania skutecznych rozwiązań.
\ No newline at end of file
+Był to jeden z pierwszych tytułów gier, w którym pracowałem w pełni komercyjnym projekcie w branży game-dev. Nauczył mnie dystanstu do tworzonego przeze mnie kodu, uwzględniania dostępności nowych funkcjonalności przy projektowaniu dla osób nietechnicznych i podejmowania kompromisu technologicznego, szybkiego prototypowania oraz testowania skutecznych rozwiązań.
diff --git a/_i18n/pl/_projects/todo-app.md b/_i18n/pl/_projects/todo-app.md
index 1076c2a1..ba0e077d 100644
--- a/_i18n/pl/_projects/todo-app.md
+++ b/_i18n/pl/_projects/todo-app.md
@@ -5,7 +5,7 @@
# Opis projektu
-Projekt został zrealizowany z ciekawości i pasji zgłębiania tworzenia oprogramowania. Do podstawowego szablonu udostępnionego przez producenta dorzuciłem warstwę zapisywanie zadań, dzięki czemu zostają one załadowane w momencie ponownego uruchomeinia programu oraz testy jednosktowe. Do aplikacji został dołączony prosty instalator, który może pomóc użytkownikowi z wykonywanymi zadaniami.
+Projekt został zrealizowany z ciekawości i pasji zgłębiania tworzenia oprogramowania. Do podstawowego szablonu udostępnionego przez producenta dorzuciłem warstwę zapisywanie zadań, dzięki czemu zostają one załadowane w momencie ponownego uruchomeinia programu oraz testy jednosktowe. Do aplikacji został dołączony prosty instalator, który może pomóc użytkownikowi z wykonywanymi zadaniami.
@@ -16,14 +16,14 @@ Projekt został zrealizowany z ciekawości i pasji zgłębiania tworzenia oprogr
GUI screen of the application
-
-# Wykorzystane technologie
+# Wykorzystane technologie
Podczas pracy z projektem aplikacji zaznajomiłem się z następującymi technologiami:
+
- Avalonia UI
- WPF
- C#
- .NET Core
- Visual Studio
- MVVM
-- XAML
\ No newline at end of file
+- XAML
diff --git a/_i18n/pl/_projects/web-cloud-system.md b/_i18n/pl/_projects/web-cloud-system.md
index 6895aaf0..c822fa42 100644
--- a/_i18n/pl/_projects/web-cloud-system.md
+++ b/_i18n/pl/_projects/web-cloud-system.md
@@ -9,8 +9,9 @@ Jest to projekt, który został wykonany jako jeden z etapów rekrutacyjnych do
## Wykorzystane technologie i narzędzia
W ramach realizacji projektu udało mi się zapoznać z następującymi technologami i narzędziami
-- Entity Framework Core
-- Angular
+
+- Entity Framework Core
+- Angular
- C#
- .NET Core
- MVC
@@ -21,5 +22,5 @@ W ramach realizacji projektu udało mi się zapoznać z następującymi technolo
- TypeScript
- SCSS
- Visual Studio
-- ASP.NET
-- Rest
\ No newline at end of file
+- ASP.NET
+- Rest
diff --git a/_includes/audio.liquid b/_includes/audio.liquid
index f0b40aea..338e2124 100644
--- a/_includes/audio.liquid
+++ b/_includes/audio.liquid
@@ -1,30 +1,30 @@
-
-
-
- {% if include.caption %}
- {{ include.caption }}
- {% endif %}
-
+
+
+
+ {% if include.caption %}
+ {{ include.caption }}
+ {% endif %}
+
diff --git a/_includes/cv/list.liquid b/_includes/cv/list.liquid
index 8ac116cc..1cc2598e 100644
--- a/_includes/cv/list.liquid
+++ b/_includes/cv/list.liquid
@@ -1,5 +1,5 @@
-
- {% for content in entry.contents %}
- {{ content }}
- {% endfor %}
-
+
+ {% for content in entry.contents %}
+ {{ content }}
+ {% endfor %}
+
diff --git a/_includes/cv/list_groups.liquid b/_includes/cv/list_groups.liquid
index a5327ef9..1ca90e4b 100644
--- a/_includes/cv/list_groups.liquid
+++ b/_includes/cv/list_groups.liquid
@@ -1,51 +1,51 @@
-
- {% for content in entry.contents %}
-
-
-
-
- {% if content.icon %}
-
- {% else %}
-
- {% endif %}
-
- {% assign i = 1 %}
- {% for item in content.items %}
- {% assign i = i | plus: 1 %}
- {% endfor %}
- {{ content.category }}
-
- {% for item in content.items %}
-
-
-
- {{ item.name }}
-
- {% if item.level %}
- {{ item.level }}
- {% endif %}
- {% if item.school %}
- {{ item.school }}
- {% endif %}
- {% if item.time %}
-
- {{ item.time }}
-
- {% else %}
-
- {% endif %}
- {% if item.link %}
-
-
- {% if item.linkname %}{{ item.linkname }}{% else %}DOC{% endif %}
-
-
- {% endif %}
-
- {% endfor %}
-
-
-
- {% endfor %}
-
+
+ {% for content in entry.contents %}
+
+
+
+
+ {% if content.icon %}
+
+ {% else %}
+
+ {% endif %}
+
+ {% assign i = 1 %}
+ {% for item in content.items %}
+ {% assign i = i | plus: 1 %}
+ {% endfor %}
+ {{ content.category }}
+
+ {% for item in content.items %}
+
+
+
+ {{ item.name }}
+
+ {% if item.level %}
+ {{ item.level }}
+ {% endif %}
+ {% if item.school %}
+ {{ item.school }}
+ {% endif %}
+ {% if item.time %}
+
+ {{ item.time }}
+
+ {% else %}
+
+ {% endif %}
+ {% if item.link %}
+
+
+ {% if item.linkname %}{{ item.linkname }}{% else %}DOC{% endif %}
+
+
+ {% endif %}
+
+ {% endfor %}
+
+
+
+ {% endfor %}
+
diff --git a/_includes/cv/map.liquid b/_includes/cv/map.liquid
index cb448f10..aee3419f 100644
--- a/_includes/cv/map.liquid
+++ b/_includes/cv/map.liquid
@@ -1,29 +1,29 @@
-
- {% for content in entry.contents %}
-
-
- {{ content.name }}
-
- {% if content.value %}
- {{ content.value }}
- {% endif %}
- {% if content.links %}
-
-
- {% for item in content.links %}
- {% if item.link %}
-
- {% endif %}
- {% endfor %}
-
-
- {% endif %}
-
- {% endfor %}
-
+
+ {% for content in entry.contents %}
+
+
+ {{ content.name }}
+
+ {% if content.value %}
+ {{ content.value }}
+ {% endif %}
+ {% if content.links %}
+
+
+ {% for item in content.links %}
+ {% if item.link %}
+
+ {% endif %}
+ {% endfor %}
+
+
+ {% endif %}
+
+ {% endfor %}
+
diff --git a/_includes/cv/nested_list.liquid b/_includes/cv/nested_list.liquid
index bb44db45..72200dec 100644
--- a/_includes/cv/nested_list.liquid
+++ b/_includes/cv/nested_list.liquid
@@ -1,16 +1,16 @@
-
- {% for content in entry.contents %}
-
- {{ content.title }}
- {% if content.items %}
-
- {% for subitem in content.items %}
-
- {{ subitem }}
-
- {% endfor %}
-
- {% endif %}
-
- {% endfor %}
-
+
+ {% for content in entry.contents %}
+
+ {{ content.title }}
+ {% if content.items %}
+
+ {% for subitem in content.items %}
+
+ {{ subitem }}
+
+ {% endfor %}
+
+ {% endif %}
+
+ {% endfor %}
+
diff --git a/_includes/cv/time_table.liquid b/_includes/cv/time_table.liquid
index 91739fb3..beb1c52e 100644
--- a/_includes/cv/time_table.liquid
+++ b/_includes/cv/time_table.liquid
@@ -1,118 +1,118 @@
-
- {% for content in entry.contents %}
-
-
- {% if content.year %}
-
-
-
-
-
-
- {{- content.year -}}
-
-
-
- {% if content.location %}
-
-
-
-
- {{ content.location }}
-
-
-
- {% endif %}
-
-
-
- {% endif %}
-
- {% if content.title %}
-
{{ content.title }}
- {% endif %}
- {% if content.department or content.institution %}
-
-
- {% if content.institution %}
-
-
-
-
- {{ content.institution }}
-
- {% endif %}
- {% if content.department %}
-
-
-
-
- {{ content.department }}
-
- {% endif %}
-
-
- {% endif %}
- {% if content.maindescription %}
-
{{ content.maindescription }}
- {% endif %}
- {% if content.description %}
-
- {% for item in content.description %}
-
- {% if item.contents %}
- {{ item.title }}
-
- {% for subitem in item.contents %}
-
- {{ subitem }}
-
- {% endfor %}
-
- {% else %}
- {{ item }}
- {% endif %}
-
- {% endfor %}
-
- {% endif %}
- {% if content.items %}
-
- {% for item in content.items %}
-
- {% if item.contents %}
- {{ item.title }}
-
- {% for subitem in item.contents %}
-
- {{ subitem }}
-
- {% endfor %}
-
- {% else %}
- {{ item }}
- {% endif %}
-
- {% endfor %}
-
- {% endif %}
- {% if content.linkitems %}
-
- {% for item in content.linkitems %}
- {% if item.link %}
-
- {% endif %}
- {% endfor %}
-
- {% endif %}
-
-
-
- {% endfor %}
-
+
+ {% for content in entry.contents %}
+
+
+ {% if content.year %}
+
+
+
+
+
+
+ {{- content.year -}}
+
+
+
+ {% if content.location %}
+
+
+
+
+ {{ content.location }}
+
+
+
+ {% endif %}
+
+
+
+ {% endif %}
+
+ {% if content.title %}
+
{{ content.title }}
+ {% endif %}
+ {% if content.department or content.institution %}
+
+
+ {% if content.institution %}
+
+
+
+
+ {{ content.institution }}
+
+ {% endif %}
+ {% if content.department %}
+
+
+
+
+ {{ content.department }}
+
+ {% endif %}
+
+
+ {% endif %}
+ {% if content.maindescription %}
+
{{ content.maindescription }}
+ {% endif %}
+ {% if content.description %}
+
+ {% for item in content.description %}
+
+ {% if item.contents %}
+ {{ item.title }}
+
+ {% for subitem in item.contents %}
+
+ {{ subitem }}
+
+ {% endfor %}
+
+ {% else %}
+ {{ item }}
+ {% endif %}
+
+ {% endfor %}
+
+ {% endif %}
+ {% if content.items %}
+
+ {% for item in content.items %}
+
+ {% if item.contents %}
+ {{ item.title }}
+
+ {% for subitem in item.contents %}
+
+ {{ subitem }}
+
+ {% endfor %}
+
+ {% else %}
+ {{ item }}
+ {% endif %}
+
+ {% endfor %}
+
+ {% endif %}
+ {% if content.linkitems %}
+
+ {% for item in content.linkitems %}
+ {% if item.link %}
+
+ {% endif %}
+ {% endfor %}
+
+ {% endif %}
+
+
+
+ {% endfor %}
+
diff --git a/_includes/date_format.liquid b/_includes/date_format.liquid
index 12f1252f..1ed5cc59 100644
--- a/_includes/date_format.liquid
+++ b/_includes/date_format.liquid
@@ -1,20 +1,20 @@
-{% assign months = 'january|february|march|april|may|june|july|august|september|october|november|december' | split: '|' %}
-{% assign m = include.date_from.date | date: '%-m' | minus: 1 %}
-{% assign day = include.date_from.date | date: '%d' %}
-{% capture month %}months.{{ include.format }}.{{ months[m] }}{% endcapture %}
-{% assign year = include.date_from.date | date: '%Y' %}
-
-{% comment %}
- Here, add language specific date formats
-{% endcomment %}
-
-{% if site.lang == 'en' %}
- {% t month %}
- {{ day }}, {{ year }}
-{% elsif site.lang == 'pt-br' %}
- {{ day }} de {% t month %}, {{ year }}
-{% else %}
- {{ day }}
- {% t month %}
- {{ year }}
-{% endif %}
+{% assign months = 'january|february|march|april|may|june|july|august|september|october|november|december' | split: '|' %}
+{% assign m = include.date_from.date | date: '%-m' | minus: 1 %}
+{% assign day = include.date_from.date | date: '%d' %}
+{% capture month %}months.{{ include.format }}.{{ months[m] }}{% endcapture %}
+{% assign year = include.date_from.date | date: '%Y' %}
+
+{% comment %}
+ Here, add language specific date formats
+{% endcomment %}
+
+{% if site.lang == 'en' %}
+ {% t month %}
+ {{ day }}, {{ year }}
+{% elsif site.lang == 'pt-br' %}
+ {{ day }} de {% t month %}, {{ year }}
+{% else %}
+ {{ day }}
+ {% t month %}
+ {{ year }}
+{% endif %}
diff --git a/_includes/disqus.liquid b/_includes/disqus.liquid
index 6475187b..6979a4ec 100644
--- a/_includes/disqus.liquid
+++ b/_includes/disqus.liquid
@@ -1,13 +1,13 @@
-
+
diff --git a/_includes/figure.liquid b/_includes/figure.liquid
index 60b8f800..9087dd92 100644
--- a/_includes/figure.liquid
+++ b/_includes/figure.liquid
@@ -1,69 +1,69 @@
-{% assign img_path = include.path | remove: '.jpg' | remove: '.jpeg' | remove: '.png' | remove: '.tiff' | remove: '.gif' %}
-
-
-
-
-
- {% if site.imagemagick.enabled %}
-
- {% endif %}
-
-
-
- {% if include.caption %}
- {{ include.caption }}
- {% endif %}
-
+{% assign img_path = include.path | remove: '.jpg' | remove: '.jpeg' | remove: '.png' | remove: '.tiff' | remove: '.gif' %}
+
+
+
+
+
+ {% if site.imagemagick.enabled %}
+
+ {% endif %}
+
+
+
+ {% if include.caption %}
+ {{ include.caption }}
+ {% endif %}
+
diff --git a/_includes/footer.liquid b/_includes/footer.liquid
index 03d8931d..c7cce33d 100644
--- a/_includes/footer.liquid
+++ b/_includes/footer.liquid
@@ -1,31 +1,31 @@
-{% if site.footer_fixed %}
-
-{% else %}
-
-{% endif %}
+{% if site.footer_fixed %}
+
+{% else %}
+
+{% endif %}
diff --git a/_includes/giscus.liquid b/_includes/giscus.liquid
index 7d60f800..10a5d5d8 100644
--- a/_includes/giscus.liquid
+++ b/_includes/giscus.liquid
@@ -1,32 +1,32 @@
-
- {% if site.giscus.repo %}
-
-
Please enable JavaScript to view the comments powered by giscus.
- {% else %}
- {% capture giscus_warning %} > ##### giscus comments misconfigured > Please follow instructions at
- [http://giscus.app](http://giscus.app) and update your giscus configuration. {: .block-danger } {% endcapture %}
- {{ giscus_warning | markdownify }}
- {% endif %}
-
+
+ {% if site.giscus.repo %}
+
+
Please enable JavaScript to view the comments powered by giscus.
+ {% else %}
+ {% capture giscus_warning %} > ##### giscus comments misconfigured > Please follow instructions at
+ [http://giscus.app](http://giscus.app) and update your giscus configuration. {: .block-danger } {% endcapture %}
+ {{ giscus_warning | markdownify }}
+ {% endif %}
+
diff --git a/_includes/header.liquid b/_includes/header.liquid
index a8c5e563..a2ccb9fd 100644
--- a/_includes/header.liquid
+++ b/_includes/header.liquid
@@ -1,181 +1,181 @@
-
-
-
-
-
- {% if site.enable_progressbar %}
-
-
-
-
-
-
- {% endif %}
-
+
+
+
+
+
+ {% if site.enable_progressbar %}
+
+
+
+
+
+
+ {% endif %}
+
diff --git a/_includes/latest_posts.liquid b/_includes/latest_posts.liquid
index 133d3c30..186b4339 100644
--- a/_includes/latest_posts.liquid
+++ b/_includes/latest_posts.liquid
@@ -1,48 +1,48 @@
-
- {% if site.latest_posts != blank %}
- {% assign latest_posts_size = site.posts | size %}
-
3 %}
- style="max-height: 60vw"
- {% endif %}
- >
-
- {% assign latest_posts = site.posts %}
- {% if site.latest_posts.limit %}
- {% assign latest_posts_limit = site.latest_posts.limit %}
- {% else %}
- {% assign latest_posts_limit = latest_posts_size %}
- {% endif %}
- {% for item in latest_posts limit: latest_posts_limit %}
-
- {% include date_format.liquid format='short' date_from=item %}
-
- {% if item.redirect == blank %}
- {{ item.title }}
- {% elsif item.redirect contains '://' %}
- {{ item.title }}
-
-
-
- {% else %}
- {{ item.title }}
- {% endif %}
-
-
- {% endfor %}
-
-
- {% else %}
-
No posts so far...
- {% endif %}
-
+
+ {% if site.latest_posts != blank %}
+ {% assign latest_posts_size = site.posts | size %}
+
3 %}
+ style="max-height: 60vw"
+ {% endif %}
+ >
+
+ {% assign latest_posts = site.posts %}
+ {% if site.latest_posts.limit %}
+ {% assign latest_posts_limit = site.latest_posts.limit %}
+ {% else %}
+ {% assign latest_posts_limit = latest_posts_size %}
+ {% endif %}
+ {% for item in latest_posts limit: latest_posts_limit %}
+
+ {% include date_format.liquid format='short' date_from=item %}
+
+ {% if item.redirect == blank %}
+ {{ item.title }}
+ {% elsif item.redirect contains '://' %}
+ {{ item.title }}
+
+
+
+ {% else %}
+ {{ item.title }}
+ {% endif %}
+
+
+ {% endfor %}
+
+
+ {% else %}
+
No posts so far...
+ {% endif %}
+
diff --git a/_includes/metadata.liquid b/_includes/metadata.liquid
index 0fa7f5b4..f6bf03cb 100644
--- a/_includes/metadata.liquid
+++ b/_includes/metadata.liquid
@@ -1,306 +1,306 @@
-{% if site.enable_google_verification or site.enable_bing_verification %}
-
- {% if site.enable_google_verification %}
-
- {% endif %}
- {% if site.enable_bing_verification %}
-
- {% endif %}
-
-
-{% endif %}
-
-{% capture author_name %}{{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif %} {{ site.last_name }}{% endcapture %}
-
-
-
-
-
-{% if site.title == 'blank' %}
- {% capture title %}{{ author_name }}{% endcapture %}
-{% else %}
- {% capture title %}{{ site.title }}{% endcapture %}
-{% endif %}
-{% if page.title != null and page.title != '' %}
- {% if page.url == '/blog/index.html' %}
- {% capture page_title %}{% t blog.nav_title %}{% endcapture %}
- {% elsif page.url contains '/blog/' %}
- {% assign page_title = page.title %}
- {% else %}
- {% assign is_collection = false %}
- {% for collection in site.collections %}
- {% assign collection_url_part = '/' | append: collection.label | append: '/' %}
- {% if page.url contains contains_collection_url_part %}
- {% assign is_collection = true %}
- {% break %}
- {% endif %}
- {% endfor %}
- {% if is_collection %}
- {% assign page_title = page.title %}
- {% else %}
- {% capture page_title %}{% t page.title %}{% endcapture %}
- {% endif %}
- {% endif %}
-{% else %}
- {% assign page_title = null %}
-{% endif %}
-{% if page_title %}
- {% assign title_array = '' | split: ',' %}
- {% assign splitted_description_by_space = page_title | split: ' ' %}
- {% for outer_part in splitted_description_by_space %}
- {% if outer_part contains '.' %}
- {% capture contains_localization %}{% localization_exists {{ outer_part }} %}{% endcapture %}
- {% if contains_localization == 'true' %}
- {% capture temp_var %}{% t outer_part %}{% endcapture %}
- {% assign title_array = title_array | push: temp_var %}
- {% else %}
- {% capture temp_var %}{{ outer_part }}{% endcapture %}
- {% assign title_array = title_array | push: temp_var %}
- {% endif %}
- {% else %}
- {% capture temp_var %}{{ outer_part }}{% endcapture %}
- {% assign title_array = title_array | push: temp_var %}
- {% endif %}
- {% endfor %}
- {% assign page_title = title_array | join: ' ' %}
-{% endif %}
-{% if page.description %}
- {% capture contains_localization %}{% localization_exists {{ page.description }} %}{% endcapture %}
- {% if contains_localization == 'true' %}
- {% capture description %}{% t page.description %}{% endcapture %}
- {% else %}
- {% capture description %}{{ page.description }}{% endcapture %}
- {% endif %}
-{% elsif site.description %}
- {% capture contains_localization %}{% localization_exists {{ site.description }} %}{% endcapture %}
- {% if contains_localization == 'true' %}
- {% capture description %}{% t site.description %}{% endcapture %}
- {% else %}
- {% capture description %}{{ site.description }}{% endcapture %}
- {% endif %}
-{% endif %}
-
- {% if page.url == '/blog/index.html' %}
- {% t blog.nav_title %} | {{ title }}
- {% elsif page.url contains '/blog/' %}
- {% capture blog_year %}{{ page.url | slice: 0, 11 }}{% endcapture %}
- {% if page.url == blog_year %}
- {{ page.date | date: '%Y' }} | {{ title }}
- {% else %}
- {{ page_title }} | {{ title }}
- {% endif %}
- {% elsif page.title != 'blank' and page.url != '/' %}
- {% if page.title == null or page.title == '' %}
- {{ page.date | date: '%Y' }} | {{ title }}
- {% else %}
- {{ page_title }} | {{ title }}
- {% endif %}
- {% else %}
- {{ title }}
- {% endif %}
-
-
-
-{% if page.keywords or site.keywords %}
-
-{% endif %}
-
-{% assign is_blog_post = false %}
-{% if page.url != '/blog/index.html' and page.url contains '/blog/' %}
- {% unless page.url contains '/tag/' or page.url contains '/category/' %}
- {% assign is_blog_post = true %}
- {% endunless %}
-{% endif %}
-
-{% if site.serve_og_meta %}
-
-
-
-
-
-
- {% if page.og_image or site.og_image %}
-
- {% endif %}
-
-
-
-
-
-
- {% if page.og_image or site.og_image %}
-
- {% endif %}
- {% if site.x_username %}
-
-
- {% endif %}
-{% endif %}
-
-{% if site.serve_schema_org %}
-
- {% comment %} Social links generator for "sameAs schema" {% endcomment %}
- {% assign sameaslinks = '' | split: ',' %}
- {% if site.orcid_id %}
- {% capture link %}https://orcid.org/{{ site.orcid_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.scholar_userid %}
- {% capture link %}https://scholar.google.com/citations?user={{ site.scholar_userid }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.semanticscholar_id %}
- {% capture link %}https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.publons_id %}
- {% capture link %}https://publons.com/a/{{ site.publons_id }}/{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.lattes_id %}
- {% capture link %}http://lattes.cnpq.br/{{ site.lattes_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.osf_id %}
- {% capture link %}https://osf.io/{{ site.osf_id }}/{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.research_gate_profile %}
- {% capture link %}https://www.researchgate.net/profile/{{site.research_gate_profile}}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.scopus_id %}
- {% capture link %}https://www.scopus.com/authid/detail.uri?authorId={{site.scopus_id}}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.github_username %}
- {% capture link %}https://github.com/{{ site.github_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.telegram_username %}
- {% capture link %}https://telegram.me/{{ site.telegram_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.linkedin_username %}
- {% capture link %}https://www.linkedin.com/in/{{ site.linkedin_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.x_username %}
- {% capture link %}https://twitter.com/{{ site.x_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.mastodon_username %}
- {% capture link %}https://{{ site.mastodon_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.medium_username %}
- {% capture link %}https://medium.com/@{{ site.medium_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.quora_username %}
- {% capture link %}https://www.quora.com/profile/{{ site.quora_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.blogger_url %}
- {% capture link %}{{ site.blogger_url }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.work_url %}
- {% capture link %}{{ site.work_url }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.wikidata_id %}
- {% capture link %}https://www.wikidata.org/wiki/{{ site.wikidata_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.wikipedia_id %}
- {% capture link %}https://wikipedia.org/wiki/User:{{ site.wikipedia_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.strava_userid %}
- {% capture link %}https://www.strava.com/athletes/{{ site.strava_userid }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.keybase_username %}
- {% capture link %}https://keybase.io/{{ site.keybase_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.gitlab_username %}
- {% capture link %}https://gitlab.com/{{ site.gitlab_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.dblp_url %}
- {% capture link %}{{ site.dblp_url }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.stackoverflow_id %}
- {% capture link %}https://stackoverflow.com/users/{{ site.stackoverflow_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.kaggle_id %}
- {% capture link %}https://www.kaggle.com/{{ site.kaggle_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.lastfm_id %}
- {% capture link %}https://www.last.fm/user/{{ site.lastfm_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.spotify_id %}
- {% capture link %}https://open.spotify.com/user/{{ site.spotify_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.pinterest_id %}
- {% capture link %}https://www.pinterest.com/{{ site.pinterest_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.unsplash_id %}
- {% capture link %}https://unsplash.com/@{{ site.unsplash_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.instagram_id %}
- {% capture link %}https://instagram.com/{{ site.instagram_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.facebook_id %}
- {% capture link %}https://facebook.com/{{ site.facebook_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.youtube_id %}
- {% capture link %}https://youtube.com/@{{ site.youtube_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.discord_id %}
- {% capture link %}https://discord.com/users/{{ site.discord_id }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if site.zotero_username %}
- {% capture link %}https://www.zotero.org/{{ site.zotero_username }}{% endcapture %}
- {% assign sameaslinks = sameaslinks | push: link %}
- {% endif %}
- {% if sameaslinks != blank %}
- {% assign sameaslinks = sameaslinks | split: '' %}
- {% endif %}
-
-
-{% endif %}
+{% if site.enable_google_verification or site.enable_bing_verification %}
+
+ {% if site.enable_google_verification %}
+
+ {% endif %}
+ {% if site.enable_bing_verification %}
+
+ {% endif %}
+
+
+{% endif %}
+
+{% capture author_name %}{{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif %} {{ site.last_name }}{% endcapture %}
+
+
+
+
+
+{% if site.title == 'blank' %}
+ {% capture title %}{{ author_name }}{% endcapture %}
+{% else %}
+ {% capture title %}{{ site.title }}{% endcapture %}
+{% endif %}
+{% if page.title != null and page.title != '' %}
+ {% if page.url == '/blog/index.html' %}
+ {% capture page_title %}{% t blog.nav_title %}{% endcapture %}
+ {% elsif page.url contains '/blog/' %}
+ {% assign page_title = page.title %}
+ {% else %}
+ {% assign is_collection = false %}
+ {% for collection in site.collections %}
+ {% assign collection_url_part = '/' | append: collection.label | append: '/' %}
+ {% if page.url contains contains_collection_url_part %}
+ {% assign is_collection = true %}
+ {% break %}
+ {% endif %}
+ {% endfor %}
+ {% if is_collection %}
+ {% assign page_title = page.title %}
+ {% else %}
+ {% capture page_title %}{% t page.title %}{% endcapture %}
+ {% endif %}
+ {% endif %}
+{% else %}
+ {% assign page_title = null %}
+{% endif %}
+{% if page_title %}
+ {% assign title_array = '' | split: ',' %}
+ {% assign splitted_description_by_space = page_title | split: ' ' %}
+ {% for outer_part in splitted_description_by_space %}
+ {% if outer_part contains '.' %}
+ {% capture contains_localization %}{% localization_exists {{ outer_part }} %}{% endcapture %}
+ {% if contains_localization == 'true' %}
+ {% capture temp_var %}{% t outer_part %}{% endcapture %}
+ {% assign title_array = title_array | push: temp_var %}
+ {% else %}
+ {% capture temp_var %}{{ outer_part }}{% endcapture %}
+ {% assign title_array = title_array | push: temp_var %}
+ {% endif %}
+ {% else %}
+ {% capture temp_var %}{{ outer_part }}{% endcapture %}
+ {% assign title_array = title_array | push: temp_var %}
+ {% endif %}
+ {% endfor %}
+ {% assign page_title = title_array | join: ' ' %}
+{% endif %}
+{% if page.description %}
+ {% capture contains_localization %}{% localization_exists {{ page.description }} %}{% endcapture %}
+ {% if contains_localization == 'true' %}
+ {% capture description %}{% t page.description %}{% endcapture %}
+ {% else %}
+ {% capture description %}{{ page.description }}{% endcapture %}
+ {% endif %}
+{% elsif site.description %}
+ {% capture contains_localization %}{% localization_exists {{ site.description }} %}{% endcapture %}
+ {% if contains_localization == 'true' %}
+ {% capture description %}{% t site.description %}{% endcapture %}
+ {% else %}
+ {% capture description %}{{ site.description }}{% endcapture %}
+ {% endif %}
+{% endif %}
+
+ {% if page.url == '/blog/index.html' %}
+ {% t blog.nav_title %} | {{ title }}
+ {% elsif page.url contains '/blog/' %}
+ {% capture blog_year %}{{ page.url | slice: 0, 11 }}{% endcapture %}
+ {% if page.url == blog_year %}
+ {{ page.date | date: '%Y' }} | {{ title }}
+ {% else %}
+ {{ page_title }} | {{ title }}
+ {% endif %}
+ {% elsif page.title != 'blank' and page.url != '/' %}
+ {% if page.title == null or page.title == '' %}
+ {{ page.date | date: '%Y' }} | {{ title }}
+ {% else %}
+ {{ page_title }} | {{ title }}
+ {% endif %}
+ {% else %}
+ {{ title }}
+ {% endif %}
+
+
+
+{% if page.keywords or site.keywords %}
+
+{% endif %}
+
+{% assign is_blog_post = false %}
+{% if page.url != '/blog/index.html' and page.url contains '/blog/' %}
+ {% unless page.url contains '/tag/' or page.url contains '/category/' %}
+ {% assign is_blog_post = true %}
+ {% endunless %}
+{% endif %}
+
+{% if site.serve_og_meta %}
+
+
+
+
+
+
+ {% if page.og_image or site.og_image %}
+
+ {% endif %}
+
+
+
+
+
+
+ {% if page.og_image or site.og_image %}
+
+ {% endif %}
+ {% if site.x_username %}
+
+
+ {% endif %}
+{% endif %}
+
+{% if site.serve_schema_org %}
+
+ {% comment %} Social links generator for "sameAs schema" {% endcomment %}
+ {% assign sameaslinks = '' | split: ',' %}
+ {% if site.orcid_id %}
+ {% capture link %}https://orcid.org/{{ site.orcid_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.scholar_userid %}
+ {% capture link %}https://scholar.google.com/citations?user={{ site.scholar_userid }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.semanticscholar_id %}
+ {% capture link %}https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.publons_id %}
+ {% capture link %}https://publons.com/a/{{ site.publons_id }}/{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.lattes_id %}
+ {% capture link %}http://lattes.cnpq.br/{{ site.lattes_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.osf_id %}
+ {% capture link %}https://osf.io/{{ site.osf_id }}/{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.research_gate_profile %}
+ {% capture link %}https://www.researchgate.net/profile/{{site.research_gate_profile}}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.scopus_id %}
+ {% capture link %}https://www.scopus.com/authid/detail.uri?authorId={{site.scopus_id}}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.github_username %}
+ {% capture link %}https://github.com/{{ site.github_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.telegram_username %}
+ {% capture link %}https://telegram.me/{{ site.telegram_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.linkedin_username %}
+ {% capture link %}https://www.linkedin.com/in/{{ site.linkedin_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.x_username %}
+ {% capture link %}https://twitter.com/{{ site.x_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.mastodon_username %}
+ {% capture link %}https://{{ site.mastodon_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.medium_username %}
+ {% capture link %}https://medium.com/@{{ site.medium_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.quora_username %}
+ {% capture link %}https://www.quora.com/profile/{{ site.quora_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.blogger_url %}
+ {% capture link %}{{ site.blogger_url }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.work_url %}
+ {% capture link %}{{ site.work_url }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.wikidata_id %}
+ {% capture link %}https://www.wikidata.org/wiki/{{ site.wikidata_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.wikipedia_id %}
+ {% capture link %}https://wikipedia.org/wiki/User:{{ site.wikipedia_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.strava_userid %}
+ {% capture link %}https://www.strava.com/athletes/{{ site.strava_userid }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.keybase_username %}
+ {% capture link %}https://keybase.io/{{ site.keybase_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.gitlab_username %}
+ {% capture link %}https://gitlab.com/{{ site.gitlab_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.dblp_url %}
+ {% capture link %}{{ site.dblp_url }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.stackoverflow_id %}
+ {% capture link %}https://stackoverflow.com/users/{{ site.stackoverflow_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.kaggle_id %}
+ {% capture link %}https://www.kaggle.com/{{ site.kaggle_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.lastfm_id %}
+ {% capture link %}https://www.last.fm/user/{{ site.lastfm_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.spotify_id %}
+ {% capture link %}https://open.spotify.com/user/{{ site.spotify_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.pinterest_id %}
+ {% capture link %}https://www.pinterest.com/{{ site.pinterest_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.unsplash_id %}
+ {% capture link %}https://unsplash.com/@{{ site.unsplash_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.instagram_id %}
+ {% capture link %}https://instagram.com/{{ site.instagram_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.facebook_id %}
+ {% capture link %}https://facebook.com/{{ site.facebook_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.youtube_id %}
+ {% capture link %}https://youtube.com/@{{ site.youtube_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.discord_id %}
+ {% capture link %}https://discord.com/users/{{ site.discord_id }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if site.zotero_username %}
+ {% capture link %}https://www.zotero.org/{{ site.zotero_username }}{% endcapture %}
+ {% assign sameaslinks = sameaslinks | push: link %}
+ {% endif %}
+ {% if sameaslinks != blank %}
+ {% assign sameaslinks = sameaslinks | split: '' %}
+ {% endif %}
+
+
+{% endif %}
diff --git a/_includes/news.liquid b/_includes/news.liquid
index 715ece31..6af2ef45 100644
--- a/_includes/news.liquid
+++ b/_includes/news.liquid
@@ -1,34 +1,34 @@
-
- {% if site.news != blank %}
- {% assign news_size = site.news | size %}
-
3 %}
- style="max-height: 60vw"
- {% endif %}
- >
-
- {% assign news = site.news | reverse %}
- {% if include.limit and site.announcements.limit %}
- {% assign news_limit = site.announcements.limit %}
- {% else %}
- {% assign news_limit = news_size %}
- {% endif %}
- {% for item in news limit: news_limit %}
-
- {% include date_format.liquid format='short' date_from=item %}
-
- {% if item.inline %}
- {{ item.content | remove: '' | remove: '
' | emojify }}
- {% else %}
- {% t item.title %}
- {% endif %}
-
-
- {% endfor %}
-
-
- {% else %}
-
{% t news.empty %}
- {% endif %}
-
+
+ {% if site.news != blank %}
+ {% assign news_size = site.news | size %}
+
3 %}
+ style="max-height: 60vw"
+ {% endif %}
+ >
+
+ {% assign news = site.news | reverse %}
+ {% if include.limit and site.announcements.limit %}
+ {% assign news_limit = site.announcements.limit %}
+ {% else %}
+ {% assign news_limit = news_size %}
+ {% endif %}
+ {% for item in news limit: news_limit %}
+
+ {% include date_format.liquid format='short' date_from=item %}
+
+ {% if item.inline %}
+ {{ item.content | remove: '' | remove: '
' | emojify }}
+ {% else %}
+ {% t item.title %}
+ {% endif %}
+
+
+ {% endfor %}
+
+
+ {% else %}
+
{% t news.empty %}
+ {% endif %}
+
diff --git a/_includes/pagination.liquid b/_includes/pagination.liquid
index b0556fce..6bd07f5e 100644
--- a/_includes/pagination.liquid
+++ b/_includes/pagination.liquid
@@ -1,26 +1,26 @@
-{% if paginator.total_pages > 1 %}
-
-
-
-{% endif %}
+{% if paginator.total_pages > 1 %}
+
+
+
+{% endif %}
diff --git a/_includes/projects.liquid b/_includes/projects.liquid
index 27128dab..70108dbe 100644
--- a/_includes/projects.liquid
+++ b/_includes/projects.liquid
@@ -1,34 +1,34 @@
-
-
+
+
diff --git a/_includes/projects_horizontal.liquid b/_includes/projects_horizontal.liquid
index e8429dc6..276a4ead 100644
--- a/_includes/projects_horizontal.liquid
+++ b/_includes/projects_horizontal.liquid
@@ -1,34 +1,34 @@
-
+
diff --git a/_includes/reading_time.liquid b/_includes/reading_time.liquid
index 2c8c4c69..6f4f484a 100644
--- a/_includes/reading_time.liquid
+++ b/_includes/reading_time.liquid
@@ -1,5 +1,5 @@
-{% if site.lang == 'en' %}
- {{ include.read_time }} min read
-{% elsif site.lang == 'pt-br' %}
- Leitura de {{ include.read_time }} min
-{% endif %}
+{% if site.lang == 'en' %}
+ {{ include.read_time }} min read
+{% elsif site.lang == 'pt-br' %}
+ Leitura de {{ include.read_time }} min
+{% endif %}
diff --git a/_includes/related_posts.liquid b/_includes/related_posts.liquid
index 40d73c72..f40713bf 100644
--- a/_includes/related_posts.liquid
+++ b/_includes/related_posts.liquid
@@ -1,18 +1,18 @@
-{% assign have_related_posts = false %}
-{% for post in site.related_posts | limit: site.related_blog_posts.max_related %}
- {% unless have_related_posts %}
- {% assign have_related_posts = true %}
-
-
-
-
-
-
-
{% t blog.related_posts.title %}
-
{% t blog.related_posts.description %}
- {% endunless %}
-
-
- {{ post.title }}
-
-{% endfor %}
+{% assign have_related_posts = false %}
+{% for post in site.related_posts | limit: site.related_blog_posts.max_related %}
+ {% unless have_related_posts %}
+ {% assign have_related_posts = true %}
+
+
+
+
+
+
+
{% t blog.related_posts.title %}
+
{% t blog.related_posts.description %}
+ {% endunless %}
+
+
+ {{ post.title }}
+
+{% endfor %}
diff --git a/_includes/repository/repo.liquid b/_includes/repository/repo.liquid
index ac372b26..6c72d321 100644
--- a/_includes/repository/repo.liquid
+++ b/_includes/repository/repo.liquid
@@ -1,21 +1,21 @@
-{% assign repo_url = include.repository | split: '/' %}
-{% if site.data.repositories.github_users contains repo_url.first %}
- {% assign show_owner = false %}
-{% else %}
- {% assign show_owner = true %}
-{% endif %}
-
-
+{% assign repo_url = include.repository | split: '/' %}
+{% if site.data.repositories.github_users contains repo_url.first %}
+ {% assign show_owner = false %}
+{% else %}
+ {% assign show_owner = true %}
+{% endif %}
+
+
diff --git a/_includes/repository/repo_trophies.liquid b/_includes/repository/repo_trophies.liquid
index 08c710a2..07a8d42d 100644
--- a/_includes/repository/repo_trophies.liquid
+++ b/_includes/repository/repo_trophies.liquid
@@ -1,42 +1,42 @@
-
+
diff --git a/_includes/repository/repo_user.liquid b/_includes/repository/repo_user.liquid
index f0fa06d4..09d89344 100644
--- a/_includes/repository/repo_user.liquid
+++ b/_includes/repository/repo_user.liquid
@@ -1,14 +1,14 @@
-
+
diff --git a/_includes/resume/awards.liquid b/_includes/resume/awards.liquid
index f89d5796..13bd9b3f 100644
--- a/_includes/resume/awards.liquid
+++ b/_includes/resume/awards.liquid
@@ -1,19 +1,19 @@
-
- {% for content in data[1] %}
-
-
-
- {% if content.date %} {% assign date = content.date | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %}
- {{ date }}
-
-
-
-
{{ content.awarder }}
-
{{ content.summary }}
-
-
-
- {% endfor %}
-
+
+ {% for content in data[1] %}
+
+
+
+ {% if content.date %} {% assign date = content.date | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %}
+ {{ date }}
+
+
+
+
{{ content.awarder }}
+
{{ content.summary }}
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/basics.liquid b/_includes/resume/basics.liquid
index e8a977f0..7228ca98 100644
--- a/_includes/resume/basics.liquid
+++ b/_includes/resume/basics.liquid
@@ -1,29 +1,29 @@
-
- {% assign skip_basics = 'image,profiles,location' | split: ',' %}
- {% for content in data[1] %}
- {%
- if (content[1] == "") or (skip_basics contains
- content[0])
- %}
- {% continue %}
- {% endif %}
-
- {% assign cv_key = content[0] | prepend: 'cv.' %}
-
-
- {% t cv_key %}
-
-
- {% if content[0] == 'url' %}
- {{ content[1] }}
- {% elsif content[0] == 'email' %}
- {{ content[1] }}
- {% elsif content[0] == 'phone' %}
- {{ content[1] }}
- {% else %}
- {{ content[1] }}
- {% endif %}
-
-
- {% endfor %}
-
+
+ {% assign skip_basics = 'image,profiles,location' | split: ',' %}
+ {% for content in data[1] %}
+ {%
+ if (content[1] == "") or (skip_basics contains
+ content[0])
+ %}
+ {% continue %}
+ {% endif %}
+
+ {% assign cv_key = content[0] | prepend: 'cv.' %}
+
+
+ {% t cv_key %}
+
+
+ {% if content[0] == 'url' %}
+ {{ content[1] }}
+ {% elsif content[0] == 'email' %}
+ {{ content[1] }}
+ {% elsif content[0] == 'phone' %}
+ {{ content[1] }}
+ {% else %}
+ {{ content[1] }}
+ {% endif %}
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/certificates.liquid b/_includes/resume/certificates.liquid
index 95753bdc..70ec00ac 100644
--- a/_includes/resume/certificates.liquid
+++ b/_includes/resume/certificates.liquid
@@ -1,35 +1,35 @@
-
- {% assign certificates = data[1] | sort: 'date' | reverse %}
- {% for content in certificates %}
-
-
-
-
- {% if content.icon %}
-
-
-
- {% else %}
-
- {% endif %}
-
- {% assign i = 1 %}
- {% for item in content.items %}
- {% assign i = i | plus: 1 %}
- {% endfor %}
-
- {{ content.name }}
-
-
-
-
-
- {{ content.issuer }}
-
- {{ content.date }}
-
-
-
-
- {% endfor %}
-
+
+ {% assign certificates = data[1] | sort: 'date' | reverse %}
+ {% for content in certificates %}
+
+
+
+
+ {% if content.icon %}
+
+
+
+ {% else %}
+
+ {% endif %}
+
+ {% assign i = 1 %}
+ {% for item in content.items %}
+ {% assign i = i | plus: 1 %}
+ {% endfor %}
+
+ {{ content.name }}
+
+
+
+
+
+ {{ content.issuer }}
+
+ {{ content.date }}
+
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/education.liquid b/_includes/resume/education.liquid
index bd6a356f..a570605d 100644
--- a/_includes/resume/education.liquid
+++ b/_includes/resume/education.liquid
@@ -1,54 +1,54 @@
-
- {% assign education = data[1] | sort: 'startDate' | reverse %}
- {% for content in education %}
-
-
-
- {% if content.startDate and content.startDate != '' %}
- {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
- {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
- {% assign date = startDate | append: ' - ' %}
- {% assign date = date | append: endDate %}
- {% else %}
- {% assign date = null %}
- {% endif %}
-
-
-
-
- {% if date %}
- {{ date }}
- {% endif %}
-
-
- {% if content.location %}
-
-
-
-
- {{ content.location }}
-
-
-
- {% endif %}
-
-
-
-
-
-
{{ content.institution }}
-
{{ content.area }}
-
- {% for item in content.courses %}
-
- {{ item }}
-
- {% endfor %}
-
-
-
-
- {% endfor %}
-
+
+ {% assign education = data[1] | sort: 'startDate' | reverse %}
+ {% for content in education %}
+
+
+
+ {% if content.startDate and content.startDate != '' %}
+ {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
+ {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
+ {% assign date = startDate | append: ' - ' %}
+ {% assign date = date | append: endDate %}
+ {% else %}
+ {% assign date = null %}
+ {% endif %}
+
+
+
+
+ {% if date %}
+ {{ date }}
+ {% endif %}
+
+
+ {% if content.location %}
+
+
+
+
+ {{ content.location }}
+
+
+
+ {% endif %}
+
+
+
+
+
+
{{ content.institution }}
+
{{ content.area }}
+
+ {% for item in content.courses %}
+
+ {{ item }}
+
+ {% endfor %}
+
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/interests.liquid b/_includes/resume/interests.liquid
index af55468c..b3b72dec 100644
--- a/_includes/resume/interests.liquid
+++ b/_includes/resume/interests.liquid
@@ -1,33 +1,33 @@
-
- {% for content in data[1] %}
-
-
-
-
- {% if content.icon %}
-
-
-
- {% else %}
-
- {% endif %}
-
- {% assign i = 1 %}
- {% for item in content.items %}
- {% assign i = i | plus: 1 %}
- {% endfor %}
- {{ content.name }}
-
- {% for item in content.keywords %}
-
-
-
- {{ item }}
-
-
- {% endfor %}
-
-
-
- {% endfor %}
-
+
+ {% for content in data[1] %}
+
+
+
+
+ {% if content.icon %}
+
+
+
+ {% else %}
+
+ {% endif %}
+
+ {% assign i = 1 %}
+ {% for item in content.items %}
+ {% assign i = i | plus: 1 %}
+ {% endfor %}
+ {{ content.name }}
+
+ {% for item in content.keywords %}
+
+
+
+ {{ item }}
+
+
+ {% endfor %}
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/languages.liquid b/_includes/resume/languages.liquid
index 1fe35e99..36d7875a 100644
--- a/_includes/resume/languages.liquid
+++ b/_includes/resume/languages.liquid
@@ -1,31 +1,31 @@
-
- {% for content in data[1] %}
-
-
-
-
- {% if content.icon %}
-
-
-
- {% else %}
-
- {% endif %}
-
- {% assign i = 1 %}
- {% for item in content.items %}
- {% assign i = i | plus: 1 %}
- {% endfor %}
- {{ content.language }}
-
-
-
-
- {{ content.fluency }}
-
-
-
-
-
- {% endfor %}
-
+
+ {% for content in data[1] %}
+
+
+
+
+ {% if content.icon %}
+
+
+
+ {% else %}
+
+ {% endif %}
+
+ {% assign i = 1 %}
+ {% for item in content.items %}
+ {% assign i = i | plus: 1 %}
+ {% endfor %}
+ {{ content.language }}
+
+
+
+
+ {{ content.fluency }}
+
+
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/projects.liquid b/_includes/resume/projects.liquid
index 317e3d41..5f47ea8b 100644
--- a/_includes/resume/projects.liquid
+++ b/_includes/resume/projects.liquid
@@ -1,32 +1,32 @@
-
- {% for content in data[1] %}
-
-
-
- {% if content.startDate %}
- {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
- {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
- {% assign date = startDate | append: ' - ' %}
- {% assign date = date | append: endDate %}
- {% else %}
- {% assign date = '' %}
- {% endif %}
- {{ date }}
-
-
-
-
{{ content.summary }}
-
- {% for item in content.highlights %}
-
- {{ item }}
-
- {% endfor %}
-
-
-
-
- {% endfor %}
-
+
+ {% for content in data[1] %}
+
+
+
+ {% if content.startDate %}
+ {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
+ {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
+ {% assign date = startDate | append: ' - ' %}
+ {% assign date = date | append: endDate %}
+ {% else %}
+ {% assign date = '' %}
+ {% endif %}
+ {{ date }}
+
+
+
+
{{ content.summary }}
+
+ {% for item in content.highlights %}
+
+ {{ item }}
+
+ {% endfor %}
+
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/publications.liquid b/_includes/resume/publications.liquid
index 9edbfb4d..ef234139 100644
--- a/_includes/resume/publications.liquid
+++ b/_includes/resume/publications.liquid
@@ -1,28 +1,28 @@
-
- {% assign publications = data[1] | sort: 'releaseDate' | reverse %}
- {% for content in publications %}
-
-
-
- {% if content.releaseDate %} {% assign date = content.releaseDate | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %}
-
-
-
-
- {{ date }}
-
-
-
-
-
-
-
-
{{ content.publisher }}
-
{{ content.summary }}
-
-
-
- {% endfor %}
-
+
+ {% assign publications = data[1] | sort: 'releaseDate' | reverse %}
+ {% for content in publications %}
+
+
+
+ {% if content.releaseDate %} {% assign date = content.releaseDate | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %}
+
+
+
+
+ {{ date }}
+
+
+
+
+
+
+
+
{{ content.publisher }}
+
{{ content.summary }}
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/references.liquid b/_includes/resume/references.liquid
index 5d1d19a0..22365685 100644
--- a/_includes/resume/references.liquid
+++ b/_includes/resume/references.liquid
@@ -1,31 +1,31 @@
-
- {% for content in data[1] %}
-
-
-
-
- {% if content.icon %}
-
-
-
- {% else %}
-
- {% endif %}
-
- {% assign i = 1 %}
- {% for item in content.items %}
- {% assign i = i | plus: 1 %}
- {% endfor %}
- {{ content.name }}
-
-
-
-
- {{ content.reference }}
-
-
-
-
-
- {% endfor %}
-
+
+ {% for content in data[1] %}
+
+
+
+
+ {% if content.icon %}
+
+
+
+ {% else %}
+
+ {% endif %}
+
+ {% assign i = 1 %}
+ {% for item in content.items %}
+ {% assign i = i | plus: 1 %}
+ {% endfor %}
+ {{ content.name }}
+
+
+
+
+ {{ content.reference }}
+
+
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/skills.liquid b/_includes/resume/skills.liquid
index 28d42e2d..672fd056 100644
--- a/_includes/resume/skills.liquid
+++ b/_includes/resume/skills.liquid
@@ -1,33 +1,33 @@
-
- {% for content in data[1] %}
-
-
-
-
- {% if content.icon %}
-
-
-
- {% else %}
-
- {% endif %}
-
- {% assign i = 1 %}
- {% for item in content.items %}
- {% assign i = i | plus: 1 %}
- {% endfor %}
- {{ content.name }}
-
- {% for item in content.keywords %}
-
-
-
- {{ item }}
-
-
- {% endfor %}
-
-
-
- {% endfor %}
-
+
+ {% for content in data[1] %}
+
+
+
+
+ {% if content.icon %}
+
+
+
+ {% else %}
+
+ {% endif %}
+
+ {% assign i = 1 %}
+ {% for item in content.items %}
+ {% assign i = i | plus: 1 %}
+ {% endfor %}
+ {{ content.name }}
+
+ {% for item in content.keywords %}
+
+
+
+ {{ item }}
+
+
+ {% endfor %}
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/volunteer.liquid b/_includes/resume/volunteer.liquid
index 269ffc08..c0b41f7d 100644
--- a/_includes/resume/volunteer.liquid
+++ b/_includes/resume/volunteer.liquid
@@ -1,34 +1,34 @@
-
- {% assign volunteer = data[1] | sort: 'startDate' | reverse %}
- {% for content in volunteer %}
-
-
-
- {% if content.startDate %}
- {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
- {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
- {% assign date = startDate | append: ' - ' %}
- {% assign date = date | append: endDate %}
- {% else %}
- {% assign date = '' %}
- {% endif %}
- {{ date }}
-
-
-
-
{{ content.organization }}
-
{{ content.summary }}
-
- {% for item in content.highlights %}
-
- {{ item }}
-
- {% endfor %}
-
-
-
-
- {% endfor %}
-
+
+ {% assign volunteer = data[1] | sort: 'startDate' | reverse %}
+ {% for content in volunteer %}
+
+
+
+ {% if content.startDate %}
+ {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
+ {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
+ {% assign date = startDate | append: ' - ' %}
+ {% assign date = date | append: endDate %}
+ {% else %}
+ {% assign date = '' %}
+ {% endif %}
+ {{ date }}
+
+
+
+
{{ content.organization }}
+
{{ content.summary }}
+
+ {% for item in content.highlights %}
+
+ {{ item }}
+
+ {% endfor %}
+
+
+
+
+ {% endfor %}
+
diff --git a/_includes/resume/work.liquid b/_includes/resume/work.liquid
index 8703e940..50b10744 100644
--- a/_includes/resume/work.liquid
+++ b/_includes/resume/work.liquid
@@ -1,34 +1,34 @@
-
- {% assign work = data[1] | sort: 'startDate' | reverse %}
- {% for content in work %}
-
-
-
- {% if content.startDate %}
- {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
- {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
- {% assign date = startDate | append: ' - ' %}
- {% assign date = date | append: endDate %}
- {% else %}
- {% assign date = '' %}
- {% endif %}
- {{ date }}
-
-
-
-
{{ content.name }}
-
{{ content.summary }}
-
- {% for item in content.highlights %}
-
- {{ item }}
-
- {% endfor %}
-
-
-
-
- {% endfor %}
-
+
+ {% assign work = data[1] | sort: 'startDate' | reverse %}
+ {% for content in work %}
+
+
+
+ {% if content.startDate %}
+ {% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
+ {% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
+ {% assign date = startDate | append: ' - ' %}
+ {% assign date = date | append: endDate %}
+ {% else %}
+ {% assign date = '' %}
+ {% endif %}
+ {{ date }}
+
+
+
+
{{ content.name }}
+
{{ content.summary }}
+
+ {% for item in content.highlights %}
+
+ {{ item }}
+
+ {% endfor %}
+
+
+
+
+ {% endfor %}
+
diff --git a/_includes/scripts/analytics.liquid b/_includes/scripts/analytics.liquid
index 53bb45d7..886cfd3a 100644
--- a/_includes/scripts/analytics.liquid
+++ b/_includes/scripts/analytics.liquid
@@ -1,24 +1,24 @@
-{% if site.enable_google_analytics %}
-
-
-
-{% endif %}
-{% if site.enable_cronitor_analytics %}
-
-
-
-{% endif %}
+{% if site.enable_google_analytics %}
+
+
+
+{% endif %}
+{% if site.enable_cronitor_analytics %}
+
+
+
+{% endif %}
diff --git a/_includes/scripts/badges.liquid b/_includes/scripts/badges.liquid
index dd14cf45..72706905 100644
--- a/_includes/scripts/badges.liquid
+++ b/_includes/scripts/badges.liquid
@@ -1,6 +1,6 @@
-{% if site.enable_publication_badges.altmetric %}
-
-{% endif %}
-{% if site.enable_publication_badges.dimensions %}
-
-{% endif %}
+{% if site.enable_publication_badges.altmetric %}
+
+{% endif %}
+{% if site.enable_publication_badges.dimensions %}
+
+{% endif %}
diff --git a/_includes/scripts/bootstrap.liquid b/_includes/scripts/bootstrap.liquid
index 71fea04e..647aaf1a 100644
--- a/_includes/scripts/bootstrap.liquid
+++ b/_includes/scripts/bootstrap.liquid
@@ -1,8 +1,8 @@
-
-
-
-
+
+
+
+
diff --git a/_includes/scripts/chartjs.liquid b/_includes/scripts/chartjs.liquid
index 20110f1d..8574f749 100644
--- a/_includes/scripts/chartjs.liquid
+++ b/_includes/scripts/chartjs.liquid
@@ -1,19 +1,19 @@
-{% if page.chart and page.chart.chartjs %}
-
-
-{% endif %}
+{% if page.chart and page.chart.chartjs %}
+
+
+{% endif %}
diff --git a/_includes/scripts/diff2html.liquid b/_includes/scripts/diff2html.liquid
index a6b4f370..e3add886 100644
--- a/_includes/scripts/diff2html.liquid
+++ b/_includes/scripts/diff2html.liquid
@@ -1,31 +1,31 @@
-{% if page.code_diff %}
-
-
-
-{% endif %}
+{% if page.code_diff %}
+
+
+
+{% endif %}
diff --git a/_includes/scripts/echarts.liquid b/_includes/scripts/echarts.liquid
index 91dc99fb..8b61abd5 100644
--- a/_includes/scripts/echarts.liquid
+++ b/_includes/scripts/echarts.liquid
@@ -1,47 +1,47 @@
-{% if page.chart and page.chart.echarts %}
-
- {% if site.enable_darkmode %}
-
- {% endif %}
-
-{% endif %}
+{% if page.chart and page.chart.echarts %}
+
+ {% if site.enable_darkmode %}
+
+ {% endif %}
+
+{% endif %}
diff --git a/_includes/scripts/imageLayouts.liquid b/_includes/scripts/imageLayouts.liquid
index f40477bb..bb8c5a2c 100644
--- a/_includes/scripts/imageLayouts.liquid
+++ b/_includes/scripts/imageLayouts.liquid
@@ -1,13 +1,13 @@
-{% if page.images %}
- {% if page.images.compare %}
-
- {% endif %}
- {% if page.images.slider %}
-
- {% endif %}
-{% endif %}
+{% if page.images %}
+ {% if page.images.compare %}
+
+ {% endif %}
+ {% if page.images.slider %}
+
+ {% endif %}
+{% endif %}
diff --git a/_includes/scripts/jquery.liquid b/_includes/scripts/jquery.liquid
index 4eb2b0d9..628f8730 100644
--- a/_includes/scripts/jquery.liquid
+++ b/_includes/scripts/jquery.liquid
@@ -1,6 +1,6 @@
-
-
+
+
diff --git a/_includes/scripts/masonry.liquid b/_includes/scripts/masonry.liquid
index 31e9a40e..cbc3c9a7 100644
--- a/_includes/scripts/masonry.liquid
+++ b/_includes/scripts/masonry.liquid
@@ -1,16 +1,16 @@
-{% if site.enable_masonry %}
-
-
-
-
-{% endif %}
+{% if site.enable_masonry %}
+
+
+
+
+{% endif %}
diff --git a/_includes/scripts/mathjax.liquid b/_includes/scripts/mathjax.liquid
index 34a51f2e..cf5b3a39 100644
--- a/_includes/scripts/mathjax.liquid
+++ b/_includes/scripts/mathjax.liquid
@@ -1,17 +1,17 @@
-{% if site.enable_math %}
-
-
-
-
-{% endif %}
+{% if site.enable_math %}
+
+
+
+
+{% endif %}
diff --git a/_includes/scripts/mermaid.liquid b/_includes/scripts/mermaid.liquid
index 44c3dbd8..e4f18396 100644
--- a/_includes/scripts/mermaid.liquid
+++ b/_includes/scripts/mermaid.liquid
@@ -1,55 +1,55 @@
-{% if page.mermaid and page.mermaid.enabled %}
-
- {% if page.mermaid.zoomable %}
-
- {% endif %}
-
-{% endif %}
+{% if page.mermaid and page.mermaid.enabled %}
+
+ {% if page.mermaid.zoomable %}
+
+ {% endif %}
+
+{% endif %}
diff --git a/_includes/scripts/misc.liquid b/_includes/scripts/misc.liquid
index f622dfac..61223b17 100644
--- a/_includes/scripts/misc.liquid
+++ b/_includes/scripts/misc.liquid
@@ -1,33 +1,33 @@
-{% if site.enable_tooltips %}
-
-
-{% endif %}
-{% if site.enable_medium_zoom %}
-
-
-
-{% endif %}
-{% if page.toc and page.toc.sidebar %}
-
-
-{% endif %}
-
-
-{% if page.pretty_table %}
-
-
-{% endif %}
-
-
-
-
-
+{% if site.enable_tooltips %}
+
+
+{% endif %}
+{% if site.enable_medium_zoom %}
+
+
+
+{% endif %}
+{% if page.toc and page.toc.sidebar %}
+
+
+{% endif %}
+
+
+{% if page.pretty_table %}
+
+
+{% endif %}
+
+
+
+
+
diff --git a/_includes/scripts/progressBar.liquid b/_includes/scripts/progressBar.liquid
index fb341370..08d19155 100644
--- a/_includes/scripts/progressBar.liquid
+++ b/_includes/scripts/progressBar.liquid
@@ -1,78 +1,78 @@
-{% if site.enable_progressbar %}
-
-
-{% endif %}
+{% if site.enable_progressbar %}
+
+
+{% endif %}
diff --git a/_includes/scripts/tikzjax.liquid b/_includes/scripts/tikzjax.liquid
index 2a8941cb..aa2a3c16 100644
--- a/_includes/scripts/tikzjax.liquid
+++ b/_includes/scripts/tikzjax.liquid
@@ -1,3 +1,3 @@
-{% if page.tikzjax %}
-
-{% endif %}
+{% if page.tikzjax %}
+
+{% endif %}
diff --git a/_includes/scripts/vega.liquid b/_includes/scripts/vega.liquid
index deaf76ab..c870cf35 100644
--- a/_includes/scripts/vega.liquid
+++ b/_includes/scripts/vega.liquid
@@ -1,47 +1,47 @@
-{% if page.chart and page.chart.vega_lite %}
-
-
-
-
-
-{% endif %}
+{% if page.chart and page.chart.vega_lite %}
+
+
+
+
+
+{% endif %}
diff --git a/_includes/scripts/wechatModal.liquid b/_includes/scripts/wechatModal.liquid
index 35f99226..17285b30 100644
--- a/_includes/scripts/wechatModal.liquid
+++ b/_includes/scripts/wechatModal.liquid
@@ -1,18 +1,18 @@
-{% if site.wechat_qr %}
-
-
-
-{% endif %}
+{% if site.wechat_qr %}
+
+
+
+{% endif %}
diff --git a/_includes/selected_papers.liquid b/_includes/selected_papers.liquid
index 83c381f3..e9bf0935 100644
--- a/_includes/selected_papers.liquid
+++ b/_includes/selected_papers.liquid
@@ -1,3 +1,3 @@
-
- {% bibliography --group_by none --query @*[selected=true]* %}
-
+
+ {% bibliography --group_by none --query @*[selected=true]* %}
+
diff --git a/_includes/social.liquid b/_includes/social.liquid
index 73790e8f..8d3a7839 100644
--- a/_includes/social.liquid
+++ b/_includes/social.liquid
@@ -1,118 +1,118 @@
-{% if site.email %}
-
-{% endif %}
-{% if site.telegram_username %}
-
-{% endif %}
-{% if site.whatsapp_number %}
-
-{% endif %}
-{% if site.orcid_id %}
-
-{% endif %}
-{% if site.scholar_userid %}
-
-{% endif %}
-{% if site.semanticscholar_id %}
-
-{% endif %}
-{% if site.publons_id %}
-
-{% endif %}
-{% if site.lattes_id %}
-
-{% endif %}
-{% if site.osf_id %}
-
-{% endif %}
-{% if site.research_gate_profile %}
-
-{% endif %}
-{% if site.scopus_id %}
-
-{% endif %}
-{% if site.github_username %}
-
-{% endif %}
-{% if site.linkedin_username %}
-
-{% endif %}
-{% if site.x_username %}
-
-{% endif %}
-{% if site.mastodon_username %}
-
-{% endif %}
-{% if site.medium_username %}
-
-{% endif %}
-{% if site.quora_username %}
-
-{% endif %}
-{% if site.blogger_url %}
-
-{% endif %}
-{% if site.work_url %}
-
-{% endif %}
-{% if site.wikidata_id %}
-
-{% endif %}
-{% if site.wikipedia_id %}
-
-{% endif %}
-{% if site.strava_userid %}
-
-{% endif %}
-{% if site.keybase_username %}
-
-{% endif %}
-{% if site.gitlab_username %}
-
-{% endif %}
-{% if site.dblp_url %}
-
-{% endif %}
-{% if site.stackoverflow_id %}
-
-{% endif %}
-{% if site.kaggle_id %}
-
-{% endif %}
-{% if site.lastfm_id %}
-
-{% endif %}
-{% if site.spotify_id %}
-
-{% endif %}
-{% if site.pinterest_id %}
-
-{% endif %}
-{% if site.unsplash_id %}
-
-{% endif %}
-{% if site.instagram_id %}
-
-{% endif %}
-{% if site.facebook_id %}
-
-{% endif %}
-{% if site.youtube_id %}
-
-{% endif %}
-{% if site.discord_id %}
-
-{% endif %}
-{% if site.zotero_username %}
-
-{% endif %}
-{% if site.rss_icon %}
-
-{% endif %}
-{% if site.wechat_qr %}
-
-
-
-
- {% include scripts/wechatModal.liquid %}
-{% endif %}
+{% if site.email %}
+
+{% endif %}
+{% if site.telegram_username %}
+
+{% endif %}
+{% if site.whatsapp_number %}
+
+{% endif %}
+{% if site.orcid_id %}
+
+{% endif %}
+{% if site.scholar_userid %}
+
+{% endif %}
+{% if site.semanticscholar_id %}
+
+{% endif %}
+{% if site.publons_id %}
+
+{% endif %}
+{% if site.lattes_id %}
+
+{% endif %}
+{% if site.osf_id %}
+
+{% endif %}
+{% if site.research_gate_profile %}
+
+{% endif %}
+{% if site.scopus_id %}
+
+{% endif %}
+{% if site.github_username %}
+
+{% endif %}
+{% if site.linkedin_username %}
+
+{% endif %}
+{% if site.x_username %}
+
+{% endif %}
+{% if site.mastodon_username %}
+
+{% endif %}
+{% if site.medium_username %}
+
+{% endif %}
+{% if site.quora_username %}
+
+{% endif %}
+{% if site.blogger_url %}
+
+{% endif %}
+{% if site.work_url %}
+
+{% endif %}
+{% if site.wikidata_id %}
+
+{% endif %}
+{% if site.wikipedia_id %}
+
+{% endif %}
+{% if site.strava_userid %}
+
+{% endif %}
+{% if site.keybase_username %}
+
+{% endif %}
+{% if site.gitlab_username %}
+
+{% endif %}
+{% if site.dblp_url %}
+
+{% endif %}
+{% if site.stackoverflow_id %}
+
+{% endif %}
+{% if site.kaggle_id %}
+
+{% endif %}
+{% if site.lastfm_id %}
+
+{% endif %}
+{% if site.spotify_id %}
+
+{% endif %}
+{% if site.pinterest_id %}
+
+{% endif %}
+{% if site.unsplash_id %}
+
+{% endif %}
+{% if site.instagram_id %}
+
+{% endif %}
+{% if site.facebook_id %}
+
+{% endif %}
+{% if site.youtube_id %}
+
+{% endif %}
+{% if site.discord_id %}
+
+{% endif %}
+{% if site.zotero_username %}
+
+{% endif %}
+{% if site.rss_icon %}
+
+{% endif %}
+{% if site.wechat_qr %}
+
+
+
+
+ {% include scripts/wechatModal.liquid %}
+{% endif %}
diff --git a/_includes/video.liquid b/_includes/video.liquid
index 3dd33925..8823106f 100644
--- a/_includes/video.liquid
+++ b/_includes/video.liquid
@@ -1,97 +1,97 @@
-{% assign extension = include.path | split: '.' | last %}
-
-
- {% if extension == 'mp4' or extension == 'webm' or extension == 'ogg' %}
-
-
- {% else %}
-
- {% endif %}
- {% if include.caption %}
- {{ include.caption }}
- {% endif %}
-
+{% assign extension = include.path | split: '.' | last %}
+
+
+ {% if extension == 'mp4' or extension == 'webm' or extension == 'ogg' %}
+
+
+ {% else %}
+
+ {% endif %}
+ {% if include.caption %}
+ {{ include.caption }}
+ {% endif %}
+
diff --git a/_layouts/about.liquid b/_layouts/about.liquid
index da33889c..807683e1 100644
--- a/_layouts/about.liquid
+++ b/_layouts/about.liquid
@@ -1,76 +1,76 @@
----
-layout: default
----
-
-
-
-
- {% if page.profile %}
-
- {% if page.profile.image %}
- {% assign profile_image_path = page.profile.image | prepend: 'assets/img/' %}
- {% if page.profile.image_circular %}
- {% assign profile_image_class = 'img-fluid z-depth-1 rounded-circle' %}
- {% else %}
- {% assign profile_image_class = 'img-fluid z-depth-1 rounded' %}
- {% endif %}
- {% capture sizes %}(min-width: {{site.max_width}}) {{ site.max_width | minus: 30 | times: 0.3}}px, (min-width: 576px)
- 30vw, 95vw"{% endcapture %}
- {%
- include figure.liquid path = profile_image_path class = profile_image_class sizes = sizes alt = page.profile.image
- cache_bust = true
- %}
- {% endif %}
- {% assign more_info_size = site.translations[site.lang].main.more_info | size %}
- {% if more_info_size > 0 %}
-
{% t main.more_info %}
- {% endif %}
-
- {% endif %}
-
- {{ content }}
-
-
- {% if page.news and site.announcements.enabled %}
-
- {% include news.liquid limit=true %}
- {% endif %}
-
-
- {% if page.latest_posts %}
-
- {% include latest_posts.liquid %}
- {% endif %}
-
-
- {% if page.selected_papers %}
-
- {% include selected_papers.liquid %}
- {% endif %}
-
-
- {% if page.social %}
-
-
{% include social.liquid %}
-
-
{% t main.contact_note %}
-
- {% endif %}
-
-
+---
+layout: default
+---
+
+
+
+
+ {% if page.profile %}
+
+ {% if page.profile.image %}
+ {% assign profile_image_path = page.profile.image | prepend: 'assets/img/' %}
+ {% if page.profile.image_circular %}
+ {% assign profile_image_class = 'img-fluid z-depth-1 rounded-circle' %}
+ {% else %}
+ {% assign profile_image_class = 'img-fluid z-depth-1 rounded' %}
+ {% endif %}
+ {% capture sizes %}(min-width: {{site.max_width}}) {{ site.max_width | minus: 30 | times: 0.3}}px, (min-width: 576px)
+ 30vw, 95vw"{% endcapture %}
+ {%
+ include figure.liquid path = profile_image_path class = profile_image_class sizes = sizes alt = page.profile.image
+ cache_bust = true
+ %}
+ {% endif %}
+ {% assign more_info_size = site.translations[site.lang].main.more_info | size %}
+ {% if more_info_size > 0 %}
+
{% t main.more_info %}
+ {% endif %}
+
+ {% endif %}
+
+ {{ content }}
+
+
+ {% if page.news and site.announcements.enabled %}
+
+ {% include news.liquid limit=true %}
+ {% endif %}
+
+
+ {% if page.latest_posts %}
+
+ {% include latest_posts.liquid %}
+ {% endif %}
+
+
+ {% if page.selected_papers %}
+
+ {% include selected_papers.liquid %}
+ {% endif %}
+
+
+ {% if page.social %}
+
+
{% include social.liquid %}
+
+
{% t main.contact_note %}
+
+ {% endif %}
+
+
diff --git a/_layouts/archive-category.liquid b/_layouts/archive-category.liquid
index e80b6b00..3808fac7 100644
--- a/_layouts/archive-category.liquid
+++ b/_layouts/archive-category.liquid
@@ -1,30 +1,30 @@
----
-layout: default
----
-
-
-
-
-
-
- {% for post in page.posts %}
-
- {% include date_format.liquid format='short' date_from=post %}
-
- {% if post.redirect == blank %}
- {{ post.title }}
- {% elsif post.redirect contains '://' %}
- {{ post.title }}
- {% else %}
- {{ post.title }}
- {% endif %}
-
-
- {% endfor %}
-
-
-
-
+---
+layout: default
+---
+
+
+
+
+
+
+ {% for post in page.posts %}
+
+ {% include date_format.liquid format='short' date_from=post %}
+
+ {% if post.redirect == blank %}
+ {{ post.title }}
+ {% elsif post.redirect contains '://' %}
+ {{ post.title }}
+ {% else %}
+ {{ post.title }}
+ {% endif %}
+
+
+ {% endfor %}
+
+
+
+
diff --git a/_layouts/archive-tag.liquid b/_layouts/archive-tag.liquid
index 9939bb91..c444358f 100644
--- a/_layouts/archive-tag.liquid
+++ b/_layouts/archive-tag.liquid
@@ -1,30 +1,30 @@
----
-layout: default
----
-
-
-
-
-
-
- {% for post in page.posts %}
-
- {% include date_format.liquid format='short' date_from=post %}
-
- {% if post.redirect == blank %}
- {{ post.title }}
- {% elsif post.redirect contains '://' %}
- {{ post.title }}
- {% else %}
- {{ post.title }}
- {% endif %}
-
-
- {% endfor %}
-
-
-
-
+---
+layout: default
+---
+
+
+
+
+
+
+ {% for post in page.posts %}
+
+ {% include date_format.liquid format='short' date_from=post %}
+
+ {% if post.redirect == blank %}
+ {{ post.title }}
+ {% elsif post.redirect contains '://' %}
+ {{ post.title }}
+ {% else %}
+ {{ post.title }}
+ {% endif %}
+
+
+ {% endfor %}
+
+
+
+
diff --git a/_layouts/archive-year.liquid b/_layouts/archive-year.liquid
index 6c6f1b51..c0dd6ee5 100644
--- a/_layouts/archive-year.liquid
+++ b/_layouts/archive-year.liquid
@@ -1,30 +1,30 @@
----
-layout: default
----
-
-
-
-
-
-
- {% for post in page.posts %}
-
- {% include date_format.liquid format='short' date_from=post %}
-
- {% if post.redirect == blank %}
- {{ post.title }}
- {% elsif post.redirect contains '://' %}
- {{ post.title }}
- {% else %}
- {{ post.title }}
- {% endif %}
-
-
- {% endfor %}
-
-
-
-
+---
+layout: default
+---
+
+
+
+
+
+
+ {% for post in page.posts %}
+
+ {% include date_format.liquid format='short' date_from=post %}
+
+ {% if post.redirect == blank %}
+ {{ post.title }}
+ {% elsif post.redirect contains '://' %}
+ {{ post.title }}
+ {% else %}
+ {{ post.title }}
+ {% endif %}
+
+
+ {% endfor %}
+
+
+
+
diff --git a/_layouts/bib.liquid b/_layouts/bib.liquid
index 5280175d..72df52f1 100644
--- a/_layouts/bib.liquid
+++ b/_layouts/bib.liquid
@@ -1,279 +1,279 @@
----
----
-
- {% if site.enable_publication_thumbnails %}
-
- {% if entry.preview %}
- {% if entry.preview contains '://' %}
-
- {% else %}
- {% assign entry_path = entry.preview | prepend: '/assets/img/publication_preview/' %}
- {%
- include figure.liquid
- path=entry_path
- sizes = "200px"
- class="preview z-depth-1 rounded"
- zoomable=false
- alt=entry.preview
- %}
- {% endif %}
- {% elsif entry.abbr %}
- {% if site.data.venues[entry.abbr] %}
- {% assign venue_style = null %}
- {% if site.data.venues[entry.abbr].color != blank %}
- {% assign venue_style = site.data.venues[entry.abbr].color | prepend: 'style="background-color:' | append: '"' %}
- {% endif %}
-
{{ entry.abbr }}
- {% else %}
-
{{ entry.abbr }}
- {% endif %}
- {% endif %}
-
- {% endif %}
-
-
-
-
-
{{ entry.title }}
-
-
- {% assign author_array_size = entry.author_array | size %}
-
- {% assign author_array_limit = author_array_size %}
- {% if site.max_author_limit and author_array_size > site.max_author_limit %}
- {% assign author_array_limit = site.max_author_limit %}
- {% endif %}
-
- {% for author in entry.author_array limit: author_array_limit %}
- {% assign author_is_self = false %}
- {% assign author_last_name = author.last | remove: '¶' | remove: '&' | remove: '*' | remove: '†' | remove: '^' %}
- {% if site.scholar.last_name contains author_last_name %}
- {% if site.scholar.first_name contains author.first %}
- {% assign author_is_self = true %}
- {% endif %}
- {% endif %}
- {% assign coauthor_url = null %}
- {% assign clean_last_name = author_last_name | downcase | remove_accents %}
- {% if site.data.coauthors[clean_last_name] %}
- {% for coauthor in site.data.coauthors[clean_last_name] %}
- {% if coauthor.firstname contains author.first %}
- {% assign coauthor_url = coauthor.url %}
- {% break %}
- {% endif %}
- {% endfor %}
- {% endif %}
-
- {% if forloop.length > 1 %}
- {% if forloop.first == false %}, {% endif %}
- {% if forloop.last and author_array_limit == author_array_size %}and {% endif %}
- {% endif %}
- {% if author_is_self %}
-
- {{- author.first }}
- {{ author.last -}}
-
- {% else %}
- {% if coauthor_url %}
-
- {{- author.first }}
- {{ author.last -}}
-
- {% else %}
- {{ author.first }}
- {{ author.last }}
- {% endif %}
- {% endif %}
- {% endfor %}
- {% assign more_authors = author_array_size | minus: author_array_limit %}
-
- {% assign more_authors_hide = more_authors | append: ' more author' %}
- {% if more_authors > 0 %}
- {% if more_authors > 1 %}
- {% assign more_authors_hide = more_authors_hide | append: 's' %}
- {% endif %}
- {% assign more_authors_show = '' %}
- {% for author in entry.author_array offset: author_array_limit %}
- {% assign more_authors_show = more_authors_show | append: author.first | append: ' ' | append: author.last %}
- {% unless forloop.last %}
- {% assign more_authors_show = more_authors_show | append: ', ' %}
- {% endunless %}
- {% endfor %}
- , and
-
- {{- more_authors_hide -}}
-
- {% endif %}
-
-
-
- {% assign proceedings = 'inproceedings,incollection' | split: ',' %}
- {% assign thesis = 'thesis,mastersthesis,phdthesis' | split: ',' %}
- {% if entry.type == 'article' %}
- {% capture entrytype %}
{{entry.journal}} {% endcapture %}
- {% elsif proceedings contains entry.type %}
- {% capture entrytype %}
In {{entry.booktitle}} {% endcapture %}
- {% elsif thesis contains entry.type %}
- {% capture entrytype %}
{{entry.school}} {% endcapture %}
- {% else %}
- {% capture entrytype %}{% endcapture %}
- {% endif %}
- {% if entry.month %}
- {% capture entrymonth %}{{ " " }}{{ entry.month | capitalize }}{% endcapture %}
- {% endif %}
- {% if entry.year %}
- {% capture entryyear %}{{ " " }}{{entry.year}}{% endcapture %}
- {% endif %}
- {% assign entrytype_text = entrytype | strip_html | strip %}
- {% capture periodical %}{{ entrytype }}{% if entrytype_text != "" and entryyear != "" %}, {% endif %}{{ entrymonth }}{{ entryyear }}{% endcapture %}
-
- {{ periodical | strip }}
-
-
- {{ entry.note | strip }}
-
-
-
-
- {% if entry.abstract %}
-
Abs
- {% endif %}
- {% if entry.arxiv %}
-
arXiv
- {% endif %}
- {% if entry.bibtex_show %}
-
Bib
- {% endif %}
- {% if entry.html %}
-
HTML
- {% endif %}
- {% if entry.pdf %}
- {% if entry.pdf contains '://' %}
-
PDF
- {% else %}
-
PDF
- {% endif %}
- {% endif %}
- {% if entry.supp %}
- {% if entry.supp contains '://' %}
-
Supp
- {% else %}
-
Supp
- {% endif %}
- {% endif %}
- {% if entry.video %}
-
Video
- {% endif %}
- {% if entry.blog %}
-
Blog
- {% endif %}
- {% if entry.code %}
-
Code
- {% endif %}
- {% if entry.poster %}
- {% if entry.poster contains '://' %}
-
Poster
- {% else %}
-
Poster
- {% endif %}
- {% endif %}
- {% if entry.slides %}
- {% if entry.slides contains '://' %}
-
Slides
- {% else %}
-
Slides
- {% endif %}
- {% endif %}
- {% if entry.website %}
-
Website
- {% endif %}
-
- {% if site.enable_publication_badges %}
- {% assign entry_has_altmetric_badge = entry.altmetric or entry.doi or entry.eprint or entry.pmid or entry.isbn %}
- {% assign entry_has_dimensions_badge = entry.dimensions or entry.doi or entry.pmid %}
- {% if entry_has_altmetric_badge or entry_has_dimensions_badge %}
-
- {% if site.enable_publication_badges.altmetric and entry_has_altmetric_badge %}
-
- {% endif %}
- {% if site.enable_publication_badges.dimensions and entry_has_dimensions_badge %}
-
- {% endif %}
-
- {% endif %}
- {% endif %}
-
- {% if entry.abstract %}
-
-
- {% endif %}
-
- {% if entry.bibtex_show %}
-
-
- {% highlight bibtex %}
- {{- entry.bibtex | hideCustomBibtex -}}
- {% endhighlight %}
-
- {% endif %}
-
- {% if entry.video %}
-
-
-
{% include video.liquid path=entry.video class="img-fluid rounded z-depth-1" controls=true %}
-
- {% endif %}
-
-
+---
+---
+
+ {% if site.enable_publication_thumbnails %}
+
+ {% if entry.preview %}
+ {% if entry.preview contains '://' %}
+
+ {% else %}
+ {% assign entry_path = entry.preview | prepend: '/assets/img/publication_preview/' %}
+ {%
+ include figure.liquid
+ path=entry_path
+ sizes = "200px"
+ class="preview z-depth-1 rounded"
+ zoomable=false
+ alt=entry.preview
+ %}
+ {% endif %}
+ {% elsif entry.abbr %}
+ {% if site.data.venues[entry.abbr] %}
+ {% assign venue_style = null %}
+ {% if site.data.venues[entry.abbr].color != blank %}
+ {% assign venue_style = site.data.venues[entry.abbr].color | prepend: 'style="background-color:' | append: '"' %}
+ {% endif %}
+
{{ entry.abbr }}
+ {% else %}
+
{{ entry.abbr }}
+ {% endif %}
+ {% endif %}
+
+ {% endif %}
+
+
+
+
+
{{ entry.title }}
+
+
+ {% assign author_array_size = entry.author_array | size %}
+
+ {% assign author_array_limit = author_array_size %}
+ {% if site.max_author_limit and author_array_size > site.max_author_limit %}
+ {% assign author_array_limit = site.max_author_limit %}
+ {% endif %}
+
+ {% for author in entry.author_array limit: author_array_limit %}
+ {% assign author_is_self = false %}
+ {% assign author_last_name = author.last | remove: '¶' | remove: '&' | remove: '*' | remove: '†' | remove: '^' %}
+ {% if site.scholar.last_name contains author_last_name %}
+ {% if site.scholar.first_name contains author.first %}
+ {% assign author_is_self = true %}
+ {% endif %}
+ {% endif %}
+ {% assign coauthor_url = null %}
+ {% assign clean_last_name = author_last_name | downcase | remove_accents %}
+ {% if site.data.coauthors[clean_last_name] %}
+ {% for coauthor in site.data.coauthors[clean_last_name] %}
+ {% if coauthor.firstname contains author.first %}
+ {% assign coauthor_url = coauthor.url %}
+ {% break %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+ {% if forloop.length > 1 %}
+ {% if forloop.first == false %}, {% endif %}
+ {% if forloop.last and author_array_limit == author_array_size %}and {% endif %}
+ {% endif %}
+ {% if author_is_self %}
+
+ {{- author.first }}
+ {{ author.last -}}
+
+ {% else %}
+ {% if coauthor_url %}
+
+ {{- author.first }}
+ {{ author.last -}}
+
+ {% else %}
+ {{ author.first }}
+ {{ author.last }}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% assign more_authors = author_array_size | minus: author_array_limit %}
+
+ {% assign more_authors_hide = more_authors | append: ' more author' %}
+ {% if more_authors > 0 %}
+ {% if more_authors > 1 %}
+ {% assign more_authors_hide = more_authors_hide | append: 's' %}
+ {% endif %}
+ {% assign more_authors_show = '' %}
+ {% for author in entry.author_array offset: author_array_limit %}
+ {% assign more_authors_show = more_authors_show | append: author.first | append: ' ' | append: author.last %}
+ {% unless forloop.last %}
+ {% assign more_authors_show = more_authors_show | append: ', ' %}
+ {% endunless %}
+ {% endfor %}
+ , and
+
+ {{- more_authors_hide -}}
+
+ {% endif %}
+
+
+
+ {% assign proceedings = 'inproceedings,incollection' | split: ',' %}
+ {% assign thesis = 'thesis,mastersthesis,phdthesis' | split: ',' %}
+ {% if entry.type == 'article' %}
+ {% capture entrytype %}
{{entry.journal}} {% endcapture %}
+ {% elsif proceedings contains entry.type %}
+ {% capture entrytype %}
In {{entry.booktitle}} {% endcapture %}
+ {% elsif thesis contains entry.type %}
+ {% capture entrytype %}
{{entry.school}} {% endcapture %}
+ {% else %}
+ {% capture entrytype %}{% endcapture %}
+ {% endif %}
+ {% if entry.month %}
+ {% capture entrymonth %}{{ " " }}{{ entry.month | capitalize }}{% endcapture %}
+ {% endif %}
+ {% if entry.year %}
+ {% capture entryyear %}{{ " " }}{{entry.year}}{% endcapture %}
+ {% endif %}
+ {% assign entrytype_text = entrytype | strip_html | strip %}
+ {% capture periodical %}{{ entrytype }}{% if entrytype_text != "" and entryyear != "" %}, {% endif %}{{ entrymonth }}{{ entryyear }}{% endcapture %}
+
+ {{ periodical | strip }}
+
+
+ {{ entry.note | strip }}
+
+
+
+
+ {% if entry.abstract %}
+
Abs
+ {% endif %}
+ {% if entry.arxiv %}
+
arXiv
+ {% endif %}
+ {% if entry.bibtex_show %}
+
Bib
+ {% endif %}
+ {% if entry.html %}
+
HTML
+ {% endif %}
+ {% if entry.pdf %}
+ {% if entry.pdf contains '://' %}
+
PDF
+ {% else %}
+
PDF
+ {% endif %}
+ {% endif %}
+ {% if entry.supp %}
+ {% if entry.supp contains '://' %}
+
Supp
+ {% else %}
+
Supp
+ {% endif %}
+ {% endif %}
+ {% if entry.video %}
+
Video
+ {% endif %}
+ {% if entry.blog %}
+
Blog
+ {% endif %}
+ {% if entry.code %}
+
Code
+ {% endif %}
+ {% if entry.poster %}
+ {% if entry.poster contains '://' %}
+
Poster
+ {% else %}
+
Poster
+ {% endif %}
+ {% endif %}
+ {% if entry.slides %}
+ {% if entry.slides contains '://' %}
+
Slides
+ {% else %}
+
Slides
+ {% endif %}
+ {% endif %}
+ {% if entry.website %}
+
Website
+ {% endif %}
+
+ {% if site.enable_publication_badges %}
+ {% assign entry_has_altmetric_badge = entry.altmetric or entry.doi or entry.eprint or entry.pmid or entry.isbn %}
+ {% assign entry_has_dimensions_badge = entry.dimensions or entry.doi or entry.pmid %}
+ {% if entry_has_altmetric_badge or entry_has_dimensions_badge %}
+
+ {% if site.enable_publication_badges.altmetric and entry_has_altmetric_badge %}
+
+ {% endif %}
+ {% if site.enable_publication_badges.dimensions and entry_has_dimensions_badge %}
+
+ {% endif %}
+
+ {% endif %}
+ {% endif %}
+
+ {% if entry.abstract %}
+
+
+ {% endif %}
+
+ {% if entry.bibtex_show %}
+
+
+ {% highlight bibtex %}
+ {{- entry.bibtex | hideCustomBibtex -}}
+ {% endhighlight %}
+
+ {% endif %}
+
+ {% if entry.video %}
+
+
+
{% include video.liquid path=entry.video class="img-fluid rounded z-depth-1" controls=true %}
+
+ {% endif %}
+
+
diff --git a/_layouts/cv.liquid b/_layouts/cv.liquid
index 906ec0e5..06721144 100644
--- a/_layouts/cv.liquid
+++ b/_layouts/cv.liquid
@@ -1,121 +1,121 @@
----
-layout: default
----
-{% assign localized_resume = site.lang | prepend: 'resume_' %}
-{% unless site.data[localized_resume] %}
-
-
-
-
-
-
- {% for entry in site.data[site.lang].cv %}
-
-
-
{{ entry.title }}
-
- {% if entry.type == 'list' %}
- {% include cv/list.liquid %}
- {% elsif entry.type == 'map' %}
- {% include cv/map.liquid %}
- {% elsif entry.type == 'nested_list' %}
- {% include cv/nested_list.liquid %}
- {% elsif entry.type == 'time_table' %}
- {% include cv/time_table.liquid %}
- {% elsif entry.type == 'list_groups' %}
- {% include cv/list_groups.liquid %}
- {% else %}
- {{ entry.contents }}
- {% endif %}
-
-
- {% endfor %}
-
-
-
-{% else %}
-
-
-
-
-
-
- {% for data in site.data[localized_resume] %}
- {% if site.jsonresume and site.jsonresume.size > 0 %}
- {% unless site.jsonresume contains data[0] %}
- {% continue %}
- {% endunless %}
- {% endif %}
- {% if data[0] == 'meta' or data[1].size == 0 %} {% continue %} {% endif %}
- {% assign localized_title = data[0] | prepend: 'cv.' %}
-
-
-
{% t localized_title %}
-
- {% case data[0] %}
- {% when 'basics' %}
- {% include resume/basics.liquid %}
- {% when 'education' %}
- {% include resume/education.liquid %}
- {% when 'work' %}
- {% include resume/work.liquid %}
- {% when 'volunteer' %}
- {% include resume/volunteer.liquid %}
- {% when 'projects' %}
- {% include resume/projects.liquid %}
- {% when 'awards' %}
- {% include resume/awards.liquid %}
- {% when 'skills' %}
- {% include resume/skills.liquid %}
- {% when 'publications' %}
- {% include resume/publications.liquid %}
- {% when 'languages' %}
- {% include resume/languages.liquid %}
- {% when 'interests' %}
- {% include resume/interests.liquid %}
- {% when 'certificates' %}
- {% include resume/certificates.liquid %}
- {% when 'references' %}
- {% include resume/references.liquid %}
- {% else %}
-
- {% endcase %}
-
-
- {% endfor %}
-
-
-
-{% endunless %}
+---
+layout: default
+---
+{% assign localized_resume = site.lang | prepend: 'resume_' %}
+{% unless site.data[localized_resume] %}
+
+
+
+
+
+
+ {% for entry in site.data[site.lang].cv %}
+
+
+
{{ entry.title }}
+
+ {% if entry.type == 'list' %}
+ {% include cv/list.liquid %}
+ {% elsif entry.type == 'map' %}
+ {% include cv/map.liquid %}
+ {% elsif entry.type == 'nested_list' %}
+ {% include cv/nested_list.liquid %}
+ {% elsif entry.type == 'time_table' %}
+ {% include cv/time_table.liquid %}
+ {% elsif entry.type == 'list_groups' %}
+ {% include cv/list_groups.liquid %}
+ {% else %}
+ {{ entry.contents }}
+ {% endif %}
+
+
+ {% endfor %}
+
+
+
+{% else %}
+
+
+
+
+
+
+ {% for data in site.data[localized_resume] %}
+ {% if site.jsonresume and site.jsonresume.size > 0 %}
+ {% unless site.jsonresume contains data[0] %}
+ {% continue %}
+ {% endunless %}
+ {% endif %}
+ {% if data[0] == 'meta' or data[1].size == 0 %} {% continue %} {% endif %}
+ {% assign localized_title = data[0] | prepend: 'cv.' %}
+
+
+
{% t localized_title %}
+
+ {% case data[0] %}
+ {% when 'basics' %}
+ {% include resume/basics.liquid %}
+ {% when 'education' %}
+ {% include resume/education.liquid %}
+ {% when 'work' %}
+ {% include resume/work.liquid %}
+ {% when 'volunteer' %}
+ {% include resume/volunteer.liquid %}
+ {% when 'projects' %}
+ {% include resume/projects.liquid %}
+ {% when 'awards' %}
+ {% include resume/awards.liquid %}
+ {% when 'skills' %}
+ {% include resume/skills.liquid %}
+ {% when 'publications' %}
+ {% include resume/publications.liquid %}
+ {% when 'languages' %}
+ {% include resume/languages.liquid %}
+ {% when 'interests' %}
+ {% include resume/interests.liquid %}
+ {% when 'certificates' %}
+ {% include resume/certificates.liquid %}
+ {% when 'references' %}
+ {% include resume/references.liquid %}
+ {% else %}
+
+ {% endcase %}
+
+
+ {% endfor %}
+
+
+
+{% endunless %}
diff --git a/_layouts/default.liquid b/_layouts/default.liquid
index 02775399..6809a73d 100644
--- a/_layouts/default.liquid
+++ b/_layouts/default.liquid
@@ -1,65 +1,65 @@
-
-
-
-
- {% if page.redirect %}
-
- {% endif %}
- {% include head.liquid %}
-
-
-
-
-
- {% include header.liquid %}
-
-
-
- {% if page.toc and page.toc.sidebar %}
- {% if page.toc.sidebar == 'right' %}
-
-
-
{{ content }}
-
-
-
-
-
- {% else %}
-
-
-
-
-
-
-
{{ content }}
-
- {% endif %}
- {% else %}
- {{ content }}
- {% endif %}
-
-
-
- {% include footer.liquid %}
-
-
- {% include scripts/jquery.liquid %}
- {% include scripts/bootstrap.liquid %}
- {% include scripts/masonry.liquid %}
- {% include scripts/mermaid.liquid %}
- {% include scripts/diff2html.liquid %}
- {% include scripts/leaflet.liquid %}
- {% include scripts/chartjs.liquid %}
- {% include scripts/echarts.liquid %}
- {% include scripts/vega.liquid %}
- {% include scripts/tikzjax.liquid %}
- {% include scripts/misc.liquid %}
- {% include scripts/badges.liquid %}
- {% include scripts/mathjax.liquid %}
- {% include scripts/analytics.liquid %}
- {% include scripts/progressBar.liquid %}
- {% include scripts/wechatModal.liquid %}
- {% include scripts/imageLayouts.liquid %}
-
-
+
+
+
+
+ {% if page.redirect %}
+
+ {% endif %}
+ {% include head.liquid %}
+
+
+
+
+
+ {% include header.liquid %}
+
+
+
+ {% if page.toc and page.toc.sidebar %}
+ {% if page.toc.sidebar == 'right' %}
+
+
+
{{ content }}
+
+
+
+
+
+ {% else %}
+
+
+
+
+
+
+
{{ content }}
+
+ {% endif %}
+ {% else %}
+ {{ content }}
+ {% endif %}
+
+
+
+ {% include footer.liquid %}
+
+
+ {% include scripts/jquery.liquid %}
+ {% include scripts/bootstrap.liquid %}
+ {% include scripts/masonry.liquid %}
+ {% include scripts/mermaid.liquid %}
+ {% include scripts/diff2html.liquid %}
+ {% include scripts/leaflet.liquid %}
+ {% include scripts/chartjs.liquid %}
+ {% include scripts/echarts.liquid %}
+ {% include scripts/vega.liquid %}
+ {% include scripts/tikzjax.liquid %}
+ {% include scripts/misc.liquid %}
+ {% include scripts/badges.liquid %}
+ {% include scripts/mathjax.liquid %}
+ {% include scripts/analytics.liquid %}
+ {% include scripts/progressBar.liquid %}
+ {% include scripts/wechatModal.liquid %}
+ {% include scripts/imageLayouts.liquid %}
+
+
diff --git a/_layouts/distill.liquid b/_layouts/distill.liquid
index a10f60c3..45eeccc1 100644
--- a/_layouts/distill.liquid
+++ b/_layouts/distill.liquid
@@ -1,125 +1,125 @@
-
-
-
- {% include head.liquid %}
- {% if site.enable_medium_zoom %}
-
-
-
- {% endif %}
- {% include scripts/jquery.liquid %}
- {% include scripts/mathjax.liquid %}
-
-
-
-
- {% if page._styles %}
-
-
- {% endif %}
-
-
-
-
-
-
-
-
- {% include header.liquid %}
-
-
-
-
- {{ page.title }}
- {{ page.description }}
-
- {% if page.authors %}
-
- {% endif %}
-
-
- {% if page.toc %}
-
-
- Contents
- {% for section in page.toc %}
-
- {% if section.subsections %}
-
- {% endif %}
- {% endfor %}
-
-
- {% endif %}
- {{ content }}
-
-
-
-
-
-
-
-
-
- {% if site.disqus_shortname and page.disqus_comments %}{% include disqus.liquid %}{% endif %}
- {% if site.giscus.repo and page.giscus_comments %}
- {% include giscus.liquid %}
- {% endif %}
-
-
-
- {% include footer.liquid %}
- {% include scripts/bootstrap.liquid %}
- {% include scripts/analytics.liquid %}
- {% include scripts/progressBar.liquid %}
-
-
+
+
+
+ {% include head.liquid %}
+ {% if site.enable_medium_zoom %}
+
+
+
+ {% endif %}
+ {% include scripts/jquery.liquid %}
+ {% include scripts/mathjax.liquid %}
+
+
+
+
+ {% if page._styles %}
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+ {% include header.liquid %}
+
+
+
+
+ {{ page.title }}
+ {{ page.description }}
+
+ {% if page.authors %}
+
+ {% endif %}
+
+
+ {% if page.toc %}
+
+
+ Contents
+ {% for section in page.toc %}
+
+ {% if section.subsections %}
+
+ {% endif %}
+ {% endfor %}
+
+
+ {% endif %}
+ {{ content }}
+
+
+
+
+
+
+
+
+
+ {% if site.disqus_shortname and page.disqus_comments %}{% include disqus.liquid %}{% endif %}
+ {% if site.giscus.repo and page.giscus_comments %}
+ {% include giscus.liquid %}
+ {% endif %}
+
+
+
+ {% include footer.liquid %}
+ {% include scripts/bootstrap.liquid %}
+ {% include scripts/analytics.liquid %}
+ {% include scripts/progressBar.liquid %}
+
+
diff --git a/_layouts/none.liquid b/_layouts/none.liquid
index 33293fdc..cddd0709 100644
--- a/_layouts/none.liquid
+++ b/_layouts/none.liquid
@@ -1 +1 @@
-{{ content }}
+{{ content }}
diff --git a/_layouts/page.liquid b/_layouts/page.liquid
index 4995c112..667188d1 100644
--- a/_layouts/page.liquid
+++ b/_layouts/page.liquid
@@ -1,26 +1,26 @@
----
-layout: default
----
-
-
-
-
- {{ content }}
-
-
- {% if page.related_publications %}
-
References
-
- {% bibliography --cited_in_order %}
-
- {% endif %}
-
- {% if site.giscus and page.giscus_comments %}
- {% include giscus.liquid %}
- {% endif %}
-
+---
+layout: default
+---
+
+
+
+
+ {{ content }}
+
+
+ {% if page.related_publications %}
+
References
+
+ {% bibliography --cited_in_order %}
+
+ {% endif %}
+
+ {% if site.giscus and page.giscus_comments %}
+ {% include giscus.liquid %}
+ {% endif %}
+
diff --git a/_layouts/post.liquid b/_layouts/post.liquid
index de6748b4..840f1f74 100644
--- a/_layouts/post.liquid
+++ b/_layouts/post.liquid
@@ -1,90 +1,90 @@
----
-layout: default
----
-{% assign year = page.date | date: '%Y' %}
-{% assign tags = page.tags | join: '' %}
-{% assign categories = page.categories | join: '' %}
-
-{% if page._styles %}
-
-
-{% endif %}
-
-{% assign url_beginning = page.url | slice: 0, 6 %}
-
-
-
-
-
- {% if page.toc and page.toc.beginning %}
-
- {% toc %}
-
-
- {% endif %}
-
- {{ content }}
-
-
-
- {% if page.related_publications %}
-
References
-
- {% bibliography --cited_in_order %}
-
- {% endif %}
-
- {% if site.related_blog_posts.enabled %}
- {% if page.related_posts == null or page.related_posts %}
- {% include related_posts.liquid %}
- {% endif %}
- {% endif %}
-
- {% if site.disqus_shortname and page.disqus_comments %}
- {% include disqus.liquid %}
- {% endif %}
- {% if site.giscus and page.giscus_comments %}
- {% include giscus.liquid %}
- {% endif %}
-
+---
+layout: default
+---
+{% assign year = page.date | date: '%Y' %}
+{% assign tags = page.tags | join: '' %}
+{% assign categories = page.categories | join: '' %}
+
+{% if page._styles %}
+
+
+{% endif %}
+
+{% assign url_beginning = page.url | slice: 0, 6 %}
+
+
+
+
+
+ {% if page.toc and page.toc.beginning %}
+
+ {% toc %}
+
+
+ {% endif %}
+
+ {{ content }}
+
+
+
+ {% if page.related_publications %}
+
References
+
+ {% bibliography --cited_in_order %}
+
+ {% endif %}
+
+ {% if site.related_blog_posts.enabled %}
+ {% if page.related_posts == null or page.related_posts %}
+ {% include related_posts.liquid %}
+ {% endif %}
+ {% endif %}
+
+ {% if site.disqus_shortname and page.disqus_comments %}
+ {% include disqus.liquid %}
+ {% endif %}
+ {% if site.giscus and page.giscus_comments %}
+ {% include giscus.liquid %}
+ {% endif %}
+
diff --git a/_layouts/profiles.liquid b/_layouts/profiles.liquid
index 7ee6150b..2d63946b 100644
--- a/_layouts/profiles.liquid
+++ b/_layouts/profiles.liquid
@@ -1,36 +1,36 @@
----
-layout: page
----
-
-
- {% if page.profiles %}
- {% for profile in page.profiles %}
-
-
- {% if profile.image %}
- {% assign profile_image_path = profile.image | prepend: 'assets/img/' %}
- {% if profile.image_circular %}
- {% assign profile_image_class = 'img-fluid z-depth-1 rounded-circle' %}
- {% else %}
- {% assign profile_image_class = 'img-fluid z-depth-1 rounded' %}
- {% endif %}
- {% capture sizes %}(min-width: {{site.max_width}}) {{ site.max_width | minus: 30 | times: 0.3}}px, (min-width: 576px) 30vw, 95vw"{% endcapture %}
- {% include figure.liquid path = profile_image_path class = profile_image_class sizes = sizes alt = profile.image %}
- {% endif %}
- {% if profile.more_info %}
-
{{ profile.more_info }}
- {% endif %}
-
-
-
- {% if profile.content %}
- {% capture profile_content %}{% translate_file profile.content %}{% endcapture %}
- {{ profile_content | markdownify }}
- {% else %}
- {% t content %}
- {% endif %}
-
- {% endfor %}
- {% endif %}
-
-
+---
+layout: page
+---
+
+
+ {% if page.profiles %}
+ {% for profile in page.profiles %}
+
+
+ {% if profile.image %}
+ {% assign profile_image_path = profile.image | prepend: 'assets/img/' %}
+ {% if profile.image_circular %}
+ {% assign profile_image_class = 'img-fluid z-depth-1 rounded-circle' %}
+ {% else %}
+ {% assign profile_image_class = 'img-fluid z-depth-1 rounded' %}
+ {% endif %}
+ {% capture sizes %}(min-width: {{site.max_width}}) {{ site.max_width | minus: 30 | times: 0.3}}px, (min-width: 576px) 30vw, 95vw"{% endcapture %}
+ {% include figure.liquid path = profile_image_path class = profile_image_class sizes = sizes alt = profile.image %}
+ {% endif %}
+ {% if profile.more_info %}
+
{{ profile.more_info }}
+ {% endif %}
+
+
+
+ {% if profile.content %}
+ {% capture profile_content %}{% translate_file profile.content %}{% endcapture %}
+ {{ profile_content | markdownify }}
+ {% else %}
+ {% t content %}
+ {% endif %}
+
+ {% endfor %}
+ {% endif %}
+
+
diff --git a/_news/announcement_1.md b/_news/announcement_1.md
index 2aeb0ce2..9a94cdba 100644
--- a/_news/announcement_1.md
+++ b/_news/announcement_1.md
@@ -1,9 +1,9 @@
----
-layout: post
-title: news.titles.news1
-date: 2015-10-22 15:59:00-0400
-inline: true
-related_posts: false
----
-
-{% translate_file _news/announcement_1.md %}
+---
+layout: post
+title: news.titles.news1
+date: 2015-10-22 15:59:00-0400
+inline: true
+related_posts: false
+---
+
+{% translate_file _news/announcement_1.md %}
diff --git a/_news/announcement_2.md b/_news/announcement_2.md
index bd79b44b..6b00b579 100644
--- a/_news/announcement_2.md
+++ b/_news/announcement_2.md
@@ -1,9 +1,9 @@
----
-layout: post
-title: news.titles.news2
-date: 2015-11-07 16:11:00-0400
-inline: false
-related_posts: false
----
-
-{% translate_file _news/announcement_2.md %}
+---
+layout: post
+title: news.titles.news2
+date: 2015-11-07 16:11:00-0400
+inline: false
+related_posts: false
+---
+
+{% translate_file _news/announcement_2.md %}
diff --git a/_news/announcement_3.md b/_news/announcement_3.md
index f41420fb..10af1bca 100644
--- a/_news/announcement_3.md
+++ b/_news/announcement_3.md
@@ -1,9 +1,9 @@
----
-layout: post
-title: news.titles.news3
-date: 2016-01-15 07:59:00-0400
-inline: true
-related_posts: false
----
-
-{% translate_file _news/announcement_3.md %}
+---
+layout: post
+title: news.titles.news3
+date: 2016-01-15 07:59:00-0400
+inline: true
+related_posts: false
+---
+
+{% translate_file _news/announcement_3.md %}
diff --git a/_pages/404.md b/_pages/404.md
index 14fa9d7f..dc090e3a 100644
--- a/_pages/404.md
+++ b/_pages/404.md
@@ -1,19 +1,19 @@
----
-layout: page
-permalink: /404.html
-title: titles.unk
-description: descriptions.unk
-redirect: true
----
-
-
-
-
-{% for language in site.languages %}
-{% if language == site.languages.first %}
-
-
{{ site.translations[language].not_found.message }} {{ site.translations[language].not_found.main_page }} .
- {% else %}
-
{{ site.translations[language].not_found.message }} {{ site.translations[language].not_found.main_page }} .
- {% endif %}
-{% endfor %}
+---
+layout: page
+permalink: /404.html
+title: titles.unk
+description: descriptions.unk
+redirect: true
+---
+
+
+
+
+{% for language in site.languages %}
+{% if language == site.languages.first %}
+
+
{{ site.translations[language].not_found.message }} {{ site.translations[language].not_found.main_page }} .
+ {% else %}
+
{{ site.translations[language].not_found.message }} {{ site.translations[language].not_found.main_page }} .
+ {% endif %}
+{% endfor %}
diff --git a/_pages/about.md b/_pages/about.md
index d5f66175..8324266e 100644
--- a/_pages/about.md
+++ b/_pages/about.md
@@ -1,17 +1,17 @@
----
-layout: about
-title: titles.about
-description: descriptions.about
-subtitle: main.subtitle
-permalink: /
-
-profile:
- align: right
- image: prof_pic.jpg
- image_circular: false # crops the image to make it circular
-
-latest_posts: true # includes a list of the newest posts
-social: true # includes social icons at the bottom of the page
----
-
-{% translate_file _pages/about.md %}
+---
+layout: about
+title: titles.about
+description: descriptions.about
+subtitle: main.subtitle
+permalink: /
+
+profile:
+ align: right
+ image: prof_pic.jpg
+ image_circular: false # crops the image to make it circular
+
+latest_posts: true # includes a list of the newest posts
+social: true # includes social icons at the bottom of the page
+---
+
+{% translate_file _pages/about.md %}
diff --git a/_pages/blog.md b/_pages/blog.md
index 408c6cb0..a32b6503 100644
--- a/_pages/blog.md
+++ b/_pages/blog.md
@@ -1,191 +1,191 @@
----
-layout: default
-permalink: /blog/
-title: titles.blog
-description: descriptions.blog
-nav: true
-nav_order: 1
-pagination:
- enabled: true
- collection: posts
- permalink: /page/:num/
- per_page: 5
- sort_field: date
- sort_reverse: true
- trail:
- before: 1 # The number of links before the current page
- after: 3 # The number of links after the current page
----
-
-
-
-{% assign blog_name_size = site.translations[site.lang].blog.name | size %}
-{% assign blog_description_size = site.translations[site.lang].blog.description | size %}
-
-{% if blog_name_size > 0 or blog_description_size > 0 %}
-
-
- {% endif %}
-
-{% if site.display_tags or site.display_categories %}
-
-
-
- {% for tag in site.display_tags %}
-
- {{ tag }}
-
- {% unless forloop.last %}
- •
- {% endunless %}
- {% endfor %}
- {% if site.display_categories.size > 0 and site.display_tags.size > 0 %}
- •
- {% endif %}
- {% for category in site.display_categories %}
-
- {{ category }}
-
- {% unless forloop.last %}
- •
- {% endunless %}
- {% endfor %}
-
-
- {% endif %}
-
-{% assign featured_posts = site.posts | where: "featured", "true" %}
-{% if featured_posts.size > 0 %}
-
-
-
-{% assign is_even = featured_posts.size | modulo: 2 %}
-
-{% for post in featured_posts %}
-
- {% endfor %}
-
-
-
-
-{% endif %}
-
-
-
- {% if page.pagination.enabled %}
- {% assign postlist = paginator.posts %}
- {% else %}
- {% assign postlist = site.posts %}
- {% endif %}
-
- {% for post in postlist %}
-
- {% if post.external_source == blank %}
- {% assign read_time = post.content | number_of_words | divided_by: 180 | plus: 1 %}
- {% else %}
- {% assign read_time = post.feed_content | strip_html | number_of_words | divided_by: 180 | plus: 1 %}
- {% endif %}
- {% assign year = post.date | date: "%Y" %}
- {% assign tags = post.tags | join: "" %}
- {% assign categories = post.categories | join: "" %}
-
-
-
-{% if post.thumbnail %}
-
-
-
-{% endif %}
-
- {% if post.redirect == blank %}
- {{ post.title }}
- {% elsif post.redirect contains '://' %}
- {{ post.title }}
-
-
-
- {% else %}
- {{ post.title }}
- {% endif %}
-
-
{{ post.description }}
-
- {% include reading_time.liquid read_time=read_time %} ·
- {% include date_format.liquid format="long" date_from=post %}
- {% if post.external_source %}
- · {{ post.external_source }}
- {% endif %}
-
-
-
- {{ year }}
-
- {% if tags != "" %}
- ·
- {% for tag in post.tags %}
-
- {{ tag }}
- {% endfor %}
- {% endif %}
-
- {% if categories != "" %}
- ·
- {% for category in post.categories %}
-
- {{ category }}
- {% endfor %}
- {% endif %}
-
-
-{% if post.thumbnail %}
-
-
-
-
-
-
-
-{% endif %}
-
-
- {% endfor %}
-
-
-
-{% if page.pagination.enabled %}
-{% include pagination.liquid %}
-{% endif %}
-
-
+---
+layout: default
+permalink: /blog/
+title: titles.blog
+description: descriptions.blog
+nav: true
+nav_order: 1
+pagination:
+ enabled: true
+ collection: posts
+ permalink: /page/:num/
+ per_page: 5
+ sort_field: date
+ sort_reverse: true
+ trail:
+ before: 1 # The number of links before the current page
+ after: 3 # The number of links after the current page
+---
+
+
+
+{% assign blog_name_size = site.translations[site.lang].blog.name | size %}
+{% assign blog_description_size = site.translations[site.lang].blog.description | size %}
+
+{% if blog_name_size > 0 or blog_description_size > 0 %}
+
+
+ {% endif %}
+
+{% if site.display_tags or site.display_categories %}
+
+
+
+ {% for tag in site.display_tags %}
+
+ {{ tag }}
+
+ {% unless forloop.last %}
+ •
+ {% endunless %}
+ {% endfor %}
+ {% if site.display_categories.size > 0 and site.display_tags.size > 0 %}
+ •
+ {% endif %}
+ {% for category in site.display_categories %}
+
+ {{ category }}
+
+ {% unless forloop.last %}
+ •
+ {% endunless %}
+ {% endfor %}
+
+
+ {% endif %}
+
+{% assign featured_posts = site.posts | where: "featured", "true" %}
+{% if featured_posts.size > 0 %}
+
+
+
+{% assign is_even = featured_posts.size | modulo: 2 %}
+
+{% for post in featured_posts %}
+
+ {% endfor %}
+
+
+
+
+{% endif %}
+
+
+
+ {% if page.pagination.enabled %}
+ {% assign postlist = paginator.posts %}
+ {% else %}
+ {% assign postlist = site.posts %}
+ {% endif %}
+
+ {% for post in postlist %}
+
+ {% if post.external_source == blank %}
+ {% assign read_time = post.content | number_of_words | divided_by: 180 | plus: 1 %}
+ {% else %}
+ {% assign read_time = post.feed_content | strip_html | number_of_words | divided_by: 180 | plus: 1 %}
+ {% endif %}
+ {% assign year = post.date | date: "%Y" %}
+ {% assign tags = post.tags | join: "" %}
+ {% assign categories = post.categories | join: "" %}
+
+
+
+{% if post.thumbnail %}
+
+
+
+{% endif %}
+
+ {% if post.redirect == blank %}
+ {{ post.title }}
+ {% elsif post.redirect contains '://' %}
+ {{ post.title }}
+
+
+
+ {% else %}
+ {{ post.title }}
+ {% endif %}
+
+
{{ post.description }}
+
+ {% include reading_time.liquid read_time=read_time %} ·
+ {% include date_format.liquid format="long" date_from=post %}
+ {% if post.external_source %}
+ · {{ post.external_source }}
+ {% endif %}
+
+
+
+ {{ year }}
+
+ {% if tags != "" %}
+ ·
+ {% for tag in post.tags %}
+
+ {{ tag }}
+ {% endfor %}
+ {% endif %}
+
+ {% if categories != "" %}
+ ·
+ {% for category in post.categories %}
+
+ {{ category }}
+ {% endfor %}
+ {% endif %}
+
+
+{% if post.thumbnail %}
+
+
+
+
+
+
+
+{% endif %}
+
+
+ {% endfor %}
+
+
+
+{% if page.pagination.enabled %}
+{% include pagination.liquid %}
+{% endif %}
+
+
diff --git a/_pages/cv.md b/_pages/cv.md
index f63b8e2c..b0889db2 100644
--- a/_pages/cv.md
+++ b/_pages/cv.md
@@ -1,11 +1,11 @@
----
-layout: cv
-title: titles.cv
-permalink: /cv/
-nav: true
-nav_order: 5
-cv_pdf: Tomasz-Komoszesk_cv.pdf
-description: descriptions.cv
-toc:
- sidebar: left
----
+---
+layout: cv
+title: titles.cv
+permalink: /cv/
+nav: true
+nav_order: 5
+cv_pdf: Tomasz-Komoszesk_cv.pdf
+description: descriptions.cv
+toc:
+ sidebar: left
+---
diff --git a/_pages/news.md b/_pages/news.md
index cb4ec67e..9cf9b243 100644
--- a/_pages/news.md
+++ b/_pages/news.md
@@ -1,7 +1,7 @@
----
-layout: page
-title: titles.news
-permalink: /news/
----
-
-{% include news.liquid %}
+---
+layout: page
+title: titles.news
+permalink: /news/
+---
+
+{% include news.liquid %}
diff --git a/_pages/projects.md b/_pages/projects.md
index 877d7c48..72851f01 100644
--- a/_pages/projects.md
+++ b/_pages/projects.md
@@ -1,77 +1,79 @@
----
-layout: page
-title: titles.projects
-description: descriptions.projects
-permalink: /projects/
-nav: true
-nav_order: 3
-display_categories: [web-development, e-commerce, game-dev,desktop]
-horizontal: false
----
-
-
-{% if site.enable_project_categories and page.display_categories %}
-
- {% for category in page.display_categories %}
- {% capture localized_category %}projects.categories.{{category}}{% endcapture %}
-
- {% t localized_category %}
-
- {% endfor %}
-
-{% endif %}
-
-
-{% if site.enable_project_categories and page.display_categories %}
-
- {% for category in page.display_categories %}
- {% capture localized_category %}projects.categories.{{category}}{% endcapture %}
-
- {% t localized_category %}
-
- {% assign categorized_projects = site.projects | where: "category", category %}
- {% assign sorted_projects = categorized_projects | sort: "importance" %}
-
- {% if page.horizontal %}
-
-
- {% for project in sorted_projects %}
- {% include projects_horizontal.liquid %}
- {% endfor %}
-
-
- {% else %}
-
- {% for project in sorted_projects %}
- {% include projects.liquid %}
- {% endfor %}
-
- {% endif %}
- {% endfor %}
-
-{% else %}
-
-
-
-{% assign sorted_projects = site.projects | sort: "importance" %}
-
-
-
-{% if page.horizontal %}
-
-
-
- {% for project in sorted_projects %}
- {% include projects_horizontal.liquid %}
- {% endfor %}
-
-
- {% else %}
-
- {% for project in sorted_projects %}
- {% include projects.liquid %}
- {% endfor %}
-
- {% endif %}
-{% endif %}
-
+---
+layout: page
+title: titles.projects
+description: descriptions.projects
+permalink: /projects/
+nav: true
+nav_order: 3
+display_categories: [web-development, e-commerce, game-dev, desktop]
+horizontal: false
+---
+
+
+
+{% if site.enable_project_categories and page.display_categories %}
+
+
+ {% for category in page.display_categories %}
+ {% capture localized_category %}projects.categories.{{category}}{% endcapture %}
+
+ {% t localized_category %}
+
+ {% endfor %}
+
+{% endif %}
+
+
+{% if site.enable_project_categories and page.display_categories %}
+
+ {% for category in page.display_categories %}
+ {% capture localized_category %}projects.categories.{{category}}{% endcapture %}
+
+ {% t localized_category %}
+
+ {% assign categorized_projects = site.projects | where: "category", category %}
+ {% assign sorted_projects = categorized_projects | sort: "importance" %}
+
+ {% if page.horizontal %}
+
+
+ {% for project in sorted_projects %}
+ {% include projects_horizontal.liquid %}
+ {% endfor %}
+
+
+ {% else %}
+
+ {% for project in sorted_projects %}
+ {% include projects.liquid %}
+ {% endfor %}
+
+ {% endif %}
+ {% endfor %}
+
+{% else %}
+
+
+
+{% assign sorted_projects = site.projects | sort: "importance" %}
+
+
+
+{% if page.horizontal %}
+
+
+
+ {% for project in sorted_projects %}
+ {% include projects_horizontal.liquid %}
+ {% endfor %}
+
+
+ {% else %}
+
+ {% for project in sorted_projects %}
+ {% include projects.liquid %}
+ {% endfor %}
+
+ {% endif %}
+{% endif %}
+
diff --git a/_pages/repositories.md b/_pages/repositories.md
index 50f27dae..70ad8ad7 100644
--- a/_pages/repositories.md
+++ b/_pages/repositories.md
@@ -1,47 +1,47 @@
----
-layout: page
-title: titles.repositories
-description: descriptions.repositories
-permalink: /repositories/
-nav: true
-nav_order: 4
----
-
-## {% t repositories.users %}
-
-{% if site.data.repositories.github_users %}
-
-
- {% for user in site.data.repositories.github_users %}
- {% include repository/repo_user.liquid username=user %}
- {% endfor %}
-
-
----
-
-{% if site.repo_trophies.enabled %}
-{% for user in site.data.repositories.github_users %}
-{% if site.data.repositories.github_users.size > 1 %}
-
-
{{ user }}
- {% endif %}
-
- {% include repository/repo_trophies.liquid username=user %}
-
-
----
-
-{% endfor %}
-{% endif %}
-{% endif %}
-
-## {% t repositories.repos %}
-
-{% if site.data.repositories.github_repos %}
-
-
- {% for repo in site.data.repositories.github_repos %}
- {% include repository/repo.liquid repository=repo %}
- {% endfor %}
-
-{% endif %}
+---
+layout: page
+title: titles.repositories
+description: descriptions.repositories
+permalink: /repositories/
+nav: true
+nav_order: 4
+---
+
+## {% t repositories.users %}
+
+{% if site.data.repositories.github_users %}
+
+
+ {% for user in site.data.repositories.github_users %}
+ {% include repository/repo_user.liquid username=user %}
+ {% endfor %}
+
+
+---
+
+{% if site.repo_trophies.enabled %}
+{% for user in site.data.repositories.github_users %}
+{% if site.data.repositories.github_users.size > 1 %}
+
+
{{ user }}
+ {% endif %}
+
+ {% include repository/repo_trophies.liquid username=user %}
+
+
+---
+
+{% endfor %}
+{% endif %}
+{% endif %}
+
+## {% t repositories.repos %}
+
+{% if site.data.repositories.github_repos %}
+
+
+ {% for repo in site.data.repositories.github_repos %}
+ {% include repository/repo.liquid repository=repo %}
+ {% endfor %}
+
+{% endif %}
diff --git a/_projects/agents-app.md b/_projects/agents-app.md
index 03e426f8..a4367c1a 100644
--- a/_projects/agents-app.md
+++ b/_projects/agents-app.md
@@ -1,10 +1,10 @@
----
-layout: page
-title: projects.titles.project2
-description: projects.descriptions.project2
-img: assets/img/projects/agents_app2.png
-importance: 1
-category: desktop
----
-
-{% translate_file _projects/agents-app.md %}
+---
+layout: page
+title: projects.titles.project2
+description: projects.descriptions.project2
+img: assets/img/projects/agents_app2.png
+importance: 1
+category: desktop
+---
+
+{% translate_file _projects/agents-app.md %}
diff --git a/_projects/axion.md b/_projects/axion.md
index 510f235c..3fc8d6d4 100644
--- a/_projects/axion.md
+++ b/_projects/axion.md
@@ -5,5 +5,5 @@ description: projects.descriptions.project9
img: assets/img/projects/axion1.png
redirect: https://www.sunzinet.com/en/references/axion-gmbh
importance: 5
-category: e-commerce
----
\ No newline at end of file
+category: e-commerce
+---
diff --git a/_projects/blog-manager.md b/_projects/blog-manager.md
index 2a016e99..fdc5179b 100644
--- a/_projects/blog-manager.md
+++ b/_projects/blog-manager.md
@@ -12,4 +12,4 @@ importance: 1
category: web-development
---
-{% translate_file _projects/blog-manager.md %}
\ No newline at end of file
+{% translate_file _projects/blog-manager.md %}
diff --git a/_projects/board-heroes-battle.md b/_projects/board-heroes-battle.md
index ae969752..196d99ee 100644
--- a/_projects/board-heroes-battle.md
+++ b/_projects/board-heroes-battle.md
@@ -1,10 +1,10 @@
----
-layout: page
-title: projects.titles.project1
-description: projects.descriptions.project1
-img: assets/img/projects/BoardHeroesBattle_unreal_castle.jpg
-importance: 2
-category: game-dev
----
-
-{% translate_file _projects/board-heroes-battle.md %}
+---
+layout: page
+title: projects.titles.project1
+description: projects.descriptions.project1
+img: assets/img/projects/BoardHeroesBattle_unreal_castle.jpg
+importance: 2
+category: game-dev
+---
+
+{% translate_file _projects/board-heroes-battle.md %}
diff --git a/_projects/boesner.md b/_projects/boesner.md
index d47dec45..7157e989 100644
--- a/_projects/boesner.md
+++ b/_projects/boesner.md
@@ -5,5 +5,5 @@ description: projects.descriptions.project7
img: assets/img/projects/boesner1.png
redirect: https://www.sunzinet.com/en/references/boesner
importance: 2
-category: e-commerce
----
\ No newline at end of file
+category: e-commerce
+---
diff --git a/_projects/crafter.md b/_projects/crafter.md
index 56608737..f30b5530 100644
--- a/_projects/crafter.md
+++ b/_projects/crafter.md
@@ -4,7 +4,7 @@ title: projects.titles.project16
description: projects.descriptions.project16
img: assets/img/projects/crafter_equipment.png
importance: 2
-category: game-dev
+category: game-dev
---
-{% translate_file _projects/crafter.md %}
\ No newline at end of file
+{% translate_file _projects/crafter.md %}
diff --git a/_projects/file-upload.md b/_projects/file-upload.md
index ebddf322..ab7e4575 100644
--- a/_projects/file-upload.md
+++ b/_projects/file-upload.md
@@ -4,7 +4,7 @@ title: projects.titles.project17
description: projects.descriptions.project17
img: assets/img/projects/file-upload1.png
importance: 1
-category: web-development
+category: web-development
---
-{% translate_file _projects/file-upload.md %}
\ No newline at end of file
+{% translate_file _projects/file-upload.md %}
diff --git a/_projects/fliesendiscount.md b/_projects/fliesendiscount.md
index 72337855..3987427a 100644
--- a/_projects/fliesendiscount.md
+++ b/_projects/fliesendiscount.md
@@ -5,5 +5,5 @@ description: projects.descriptions.project10
img: assets/img/projects/fliesendiscount1.png
redirect: https://www.fliesendiscount.de/
importance: 2
-category: e-commerce
----
\ No newline at end of file
+category: e-commerce
+---
diff --git a/_projects/leguano.md b/_projects/leguano.md
index 2ed0b209..6aaa3e59 100644
--- a/_projects/leguano.md
+++ b/_projects/leguano.md
@@ -5,5 +5,5 @@ description: projects.descriptions.project8
img: assets/img/projects/leguano1.png
redirect: https://www.sunzinet.com/en/references/leguano
importance: 3
-category: e-commerce
----
\ No newline at end of file
+category: e-commerce
+---
diff --git a/_projects/lzss.md b/_projects/lzss.md
index 4e499876..80e1b67b 100644
--- a/_projects/lzss.md
+++ b/_projects/lzss.md
@@ -7,5 +7,4 @@ importance: 2
category: desktop
---
-
-{% translate_file _projects/lzss.md %}
\ No newline at end of file
+{% translate_file _projects/lzss.md %}
diff --git a/_projects/old-portfolio-project.md b/_projects/old-portfolio-project.md
index b25b80c8..d28de8c1 100644
--- a/_projects/old-portfolio-project.md
+++ b/_projects/old-portfolio-project.md
@@ -6,4 +6,4 @@ img: assets/img/projects/old_portfolio.png
redirect: /archive
importance: 1
category: web-development
----
\ No newline at end of file
+---
diff --git a/_projects/online-store-template.md b/_projects/online-store-template.md
index cfec9714..4f66b7d6 100644
--- a/_projects/online-store-template.md
+++ b/_projects/online-store-template.md
@@ -6,4 +6,4 @@ img: assets/img/projects/ave.png
redirect: /archive/templates/ave/index.html
importance: 1
category: web-development
----
\ No newline at end of file
+---
diff --git a/_projects/polygangs.md b/_projects/polygangs.md
index bbcdf707..06e7ddf5 100644
--- a/_projects/polygangs.md
+++ b/_projects/polygangs.md
@@ -8,4 +8,4 @@ importance: 2
category: game-dev
---
-{% translate_file _projects/polygangs.md %}
\ No newline at end of file
+{% translate_file _projects/polygangs.md %}
diff --git a/_projects/todo-app.md b/_projects/todo-app.md
index 2d8a3ccf..7ca93b5f 100644
--- a/_projects/todo-app.md
+++ b/_projects/todo-app.md
@@ -7,4 +7,4 @@ importance: 1
category: desktop
---
-{% translate_file _projects/todo-app.md %}
\ No newline at end of file
+{% translate_file _projects/todo-app.md %}
diff --git a/_sass/_base.scss b/_sass/_base.scss
index ff8664e8..71a004aa 100644
--- a/_sass/_base.scss
+++ b/_sass/_base.scss
@@ -1,1099 +1,1099 @@
-/*******************************************************************************
- * Styles for the base elements of the theme.
- ******************************************************************************/
-
-// Typography
-
-p,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-em,
-div,
-li,
-span,
-strong {
- color: var(--global-text-color);
-}
-
-hr {
- border-top: 1px solid var(--global-divider-color);
-}
-
-table {
- td,
- th {
- font-size: 1rem;
- }
-
- th {
- font-weight: bold;
- }
-}
-
-a,
-table.table a {
- color: var(--global-theme-color);
-
- &:hover {
- color: var(--global-theme-color);
- text-decoration: underline;
- }
-
- &:hover:after :not(.nav-item.dropdown) {
- width: 100%;
- }
-}
-
-.table-dark {
- background-color: transparent;
- &.table-bordered {
- border: 1px solid var(--global-divider-color) !important;
- }
-}
-
-figure,
-img {
- max-width: 90vw;
-}
-
-blockquote {
- background: var(--global-bg-color);
- border-left: 5px solid var(--global-theme-color);
- margin: 1.5em 0;
- padding: 1em;
- font-size: 1.2rem;
-
- p {
- margin-bottom: 0;
- }
-
- /* Tips, warnings, and dangers blockquotes */
- &.block-tip {
- border-color: var(--global-tip-block);
- background-color: var(--global-tip-block-bg);
-
- p {
- color: var(--global-tip-block-text);
- }
-
- h1,
- h2,
- h3,
- h4,
- h5,
- h6 {
- color: var(--global-tip-block-title);
- }
- }
-
- &.block-warning {
- border-color: var(--global-warning-block);
- background-color: var(--global-warning-block-bg);
-
- p {
- color: var(--global-warning-block-text);
- }
-
- h1,
- h2,
- h3,
- h4,
- h5,
- h6 {
- color: var(--global-warning-block-title);
- }
- }
-
- &.block-danger {
- border-color: var(--global-danger-block);
- background-color: var(--global-danger-block-bg);
-
- p {
- color: var(--global-danger-block-text);
- }
-
- h1,
- h2,
- h3,
- h4,
- h5,
- h6 {
- color: var(--global-danger-block-title);
- }
- }
-}
-
-// Math
-
-.equation {
- margin-bottom: 1rem;
- text-align: center;
-}
-
-// Caption
-
-.caption {
- font-size: 0.875rem;
- margin-top: 0.75rem;
- margin-bottom: 1.5rem;
- text-align: center;
-}
-
-// Card
-
-.card {
- background-color: var(--global-card-bg-color);
-
- img {
- width: 100%;
- }
-
- .card-title {
- color: var(--global-text-color);
- }
-
- .card-item {
- width: auto;
- margin-bottom: 10px;
-
- .row {
- display: flex;
- align-items: center;
- }
- }
-}
-
-// Citation
-
-.citation,
-.citation-number {
- color: var(--global-theme-color);
-}
-
-// Profile
-
-.profile {
- width: 100%;
-
- .more-info {
- margin-bottom: 5px;
- margin-top: 5px;
- font-family: monospace;
-
- p {
- display: inline-block;
- margin: 0;
- }
- }
-}
-
-.profile.float-right {
- margin-left: 1rem;
-}
-
-.profile.float-left {
- margin-right: 1rem;
-}
-
-@media (min-width: 576px) {
- .profile {
- width: 30%;
-
- .address {
- p {
- display: block;
- }
- }
- }
-}
-
-.post-description {
- margin-bottom: 2rem;
- font-size: 0.875rem;
-
- a {
- color: inherit;
-
- &:hover {
- color: var(--global-theme-color);
- text-decoration: none;
- }
- }
-}
-
-// Navbar customization
-
-.navbar {
- box-shadow: none;
- border-bottom: 1px solid var(--global-divider-color);
- background-color: var(--global-bg-color);
- opacity: 0.95;
-}
-
-.navbar .dropdown-menu {
- background-color: var(--global-bg-color);
- border: 1px solid var(--global-divider-color);
-
- a:not(.active) {
- color: var(--global-text-color);
- }
-
- a:hover {
- color: var(--global-hover-color);
- }
-
- .dropdown-divider {
- border-top: 1px solid var(--global-divider-color) !important;
- }
-}
-
-.dropdown-item {
- color: var(--global-text-color);
-
- &:hover {
- color: var(--global-hover-color);
- background-color: var(--global-bg-color);
- }
-}
-
-.navbar.navbar-light {
- a {
- &:hover {
- text-decoration: none;
- }
- }
-
- .navbar-brand {
- color: var(--global-text-color);
- }
-
- .navbar-nav .nav-item .nav-link {
- color: var(--global-text-color);
-
- &:hover {
- color: var(--global-hover-color);
- }
- }
-
- .navbar-nav .nav-item.active > .nav-link {
- background-color: inherit;
- font-weight: bolder;
- color: var(--global-theme-color);
-
- &:hover {
- color: var(--global-hover-color);
- }
- }
-
- .navbar-brand.social {
- padding-bottom: 0;
- padding-top: 0;
- font-size: 1.7rem;
-
- a {
- i::before {
- color: var(--global-text-color);
- transition-property: all 0.2s ease-in-out;
- }
-
- &:hover {
- i::before {
- color: var(--global-theme-color);
- }
- }
- }
- }
-}
-
-.navbar-toggler {
- .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- background-color: var(--global-text-color);
- border-radius: 1px;
- margin-bottom: 4px;
- transition: all 0.2s;
- }
-
- .top-bar {
- transform: rotate(45deg);
- transform-origin: 10% 10%;
- }
-
- .middle-bar {
- opacity: 0;
- }
-
- .bottom-bar {
- transform: rotate(-45deg);
- transform-origin: 10% 90%;
- }
-}
-
-.navbar-toggler.collapsed {
- .top-bar {
- transform: rotate(0);
- }
-
- .middle-bar {
- opacity: 1;
- }
-
- .bottom-bar {
- transform: rotate(0);
- }
-}
-
-#light-toggle {
- padding: 0;
- border: 0;
- background-color: inherit;
- color: var(--global-text-color);
-
- &:hover {
- color: var(--global-hover-color);
- }
-}
-
-// Social (bottom)
-
-.social {
- text-align: center;
-
- .contact-icons {
- font-size: 4rem;
-
- a {
- i::before {
- color: var(--global-text-color);
- transition-property: all 0.2s ease-in-out;
- }
-
- &:hover {
- i::before {
- color: var(--global-theme-color);
- }
- }
- }
- }
-
- .contact-note {
- font-size: 0.8rem;
- }
-}
-
-.wechat-modal {
- display: none;
- position: fixed;
- z-index: 1;
- padding-top: 100px;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- overflow: auto;
- background-color: rgb(0, 0, 0);
- background-color: rgba(0, 0, 0, 0.8);
-}
-
-.wechat-modal > img {
- display: block;
- position: relative;
- top: 50%;
- left: 50%;
- width: 33%;
- max-width: 400px;
- transform: translate(-50%, -50%);
-}
-
-@media only screen and (max-width: 400px) {
- .wechat-modal > img {
- width: 100%;
- }
-}
-
-// Footer
-footer.fixed-bottom {
- background-color: var(--global-footer-bg-color);
- font-size: 0.75rem;
-
- .container {
- color: var(--global-footer-text-color);
- padding-top: 9px;
- padding-bottom: 8px;
- }
-
- a {
- color: var(--global-footer-link-color);
-
- &:hover {
- color: var(--global-theme-color);
- text-decoration: none;
- }
- }
-}
-
-footer.sticky-bottom {
- border-top: 1px solid var(--global-divider-color);
- padding-top: 40px;
- padding-bottom: 40px;
- font-size: 0.9rem;
-}
-
-// CV
-
-.cv {
- margin-bottom: 40px;
-
- .card {
- background-color: var(--global-card-bg-color);
- border: 1px solid var(--global-divider-color);
-
- .list-group-item {
- background-color: inherit;
- border-color: var(--global-divider-color);
-
- .badge {
- color: var(--global-card-bg-color) !important;
- background-color: var(--global-theme-color) !important;
- }
- }
- }
-}
-
-.table-cv-map {
- background-color: transparent;
- border: none;
- color: var(--global-text-color);
-}
-
-// Repositories
-
-@media (min-width: 768px) {
- .repo {
- max-width: 50%;
- }
-}
-
-// Blog
-
-.header-bar {
- border-bottom: 1px solid var(--global-divider-color);
- text-align: center;
- padding-top: 2rem;
- padding-bottom: 3rem;
-
- h1 {
- color: var(--global-theme-color);
- font-size: 5rem;
- }
-}
-
-.tag-category-list {
- border-bottom: 1px solid var(--global-divider-color);
- text-align: center;
- padding-top: 1rem;
-
- ul {
- justify-content: center;
- display: flow-root;
-
- p,
- li {
- list-style: none;
- display: inline-block;
- padding: 1rem 0.5rem;
- color: var(--global-text-color-light);
- }
- }
-}
-
-.post-title {
- mjx-container[jax="CHTML"][display="true"] {
- display: unset;
- }
-}
-
-.post-list {
- margin: 0;
- margin-bottom: 40px;
- padding: 0;
-
- li {
- border-bottom: 1px solid var(--global-divider-color);
- list-style: none;
- padding-top: 2rem;
- padding-bottom: 2rem;
-
- .post-meta {
- color: var(--global-text-color-light);
- font-size: 0.875rem;
- margin-bottom: 0;
- }
-
- .post-tags {
- color: var(--global-text-color-light);
- font-size: 0.875rem;
- padding-top: 0.25rem;
- padding-bottom: 0;
- }
-
- a {
- color: var(--global-text-color);
- text-decoration: none;
-
- &:hover {
- color: var(--global-theme-color);
- }
- }
-
- mjx-container[jax="CHTML"][display="true"] {
- display: unset;
- }
- }
-}
-
-.pagination {
- .page-item {
- .page-link {
- color: var(--global-text-color);
-
- &:hover {
- color: $black-color;
- }
- }
-
- &.active .page-link {
- color: $white-color;
- background-color: var(--global-theme-color);
-
- &:hover {
- background-color: var(--global-theme-color);
- }
- }
- }
-}
-
-// Distill
-
-.distill {
- a:hover {
- border-bottom-color: var(--global-theme-color);
- text-decoration: none;
- }
-}
-
-// Projects
-
-.projects {
- a {
- text-decoration: none;
-
- &:hover {
- .card-title {
- color: var(--global-theme-color);
- }
- }
- }
-
- .card {
- img {
- width: 100%;
- }
- }
-
- .card-item {
- width: auto;
- margin-bottom: 10px;
-
- .row {
- display: flex;
- align-items: center;
- }
- }
-
- .grid-sizer,
- .grid-item {
- width: 250px;
- margin-bottom: 10px;
- }
-
- h2.category {
- color: var(--global-divider-color);
- border-bottom: 1px solid var(--global-divider-color);
- padding-top: 0.5rem;
- margin-top: 2rem;
- margin-bottom: 1rem;
- text-align: right;
- }
-}
-
-// Publications
-
-.publications {
- margin-top: 2rem;
-
- h1 {
- color: var(--global-theme-color);
- font-size: 2rem;
- text-align: center;
- margin-top: 1em;
- margin-bottom: 1em;
- }
-
- h2 {
- margin-bottom: 1rem;
-
- span {
- font-size: 1.5rem;
- }
- }
-
- h2.bibliography {
- color: var(--global-divider-color);
- border-top: 1px solid var(--global-divider-color);
- padding-top: 1rem;
- margin-top: 2rem;
- margin-bottom: -2rem;
- text-align: right;
- }
-
- ol.bibliography {
- list-style: none;
- padding: 0;
- margin-top: 0;
-
- li {
- margin-bottom: 1rem;
-
- .preview {
- width: 100%;
- min-width: 80px;
- max-width: 200px;
- }
-
- .abbr {
- height: 2rem;
- margin-bottom: 0.5rem;
-
- abbr {
- display: inline-block;
- background-color: var(--global-theme-color);
- padding-left: 1rem;
- padding-right: 1rem;
-
- a {
- color: white;
-
- &:hover {
- text-decoration: none;
- }
- }
- }
-
- .award {
- color: var(--global-theme-color) !important;
- border: 1px solid var(--global-theme-color);
- }
- }
-
- .title {
- font-weight: bolder;
- }
-
- .author {
- a {
- border-bottom: 1px dashed var(--global-theme-color);
-
- &:hover {
- border-bottom-style: solid;
- text-decoration: none;
- }
- }
-
- > em {
- border-bottom: 1px solid;
- font-style: normal;
- }
-
- > span.more-authors {
- color: var(--global-text-color-light);
- border-bottom: 1px dashed var(--global-text-color-light);
- cursor: pointer;
-
- &:hover {
- color: var(--global-text-color);
- border-bottom: 1px dashed var(--global-text-color);
- }
- }
- }
-
- .links {
- a.btn {
- color: var(--global-text-color);
- border: 1px solid var(--global-text-color);
- padding-left: 1rem;
- padding-right: 1rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- margin-left: 0;
-
- &:hover {
- color: var(--global-theme-color);
- border-color: var(--global-theme-color);
- }
- }
- }
-
- .badges {
- padding-bottom: 0.5rem;
- span {
- display: inline-block;
- color: $black-color;
- height: 100%;
- padding-right: 0.5rem;
- vertical-align: middle;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
-
- .hidden {
- font-size: 0.875rem;
- max-height: 0px;
- overflow: hidden;
- text-align: justify;
- transition-property: 0.15s ease;
- -moz-transition: 0.15s ease;
- -ms-transition: 0.15s ease;
- -o-transition: 0.15s ease;
- transition: all 0.15s ease;
-
- p {
- line-height: 1.4em;
- margin: 10px;
- }
-
- pre {
- font-size: 1em;
- line-height: 1.4em;
- padding: 10px;
- }
- }
-
- .hidden.open {
- max-height: 100em;
- transition-property: 0.15s ease;
- -moz-transition: 0.15s ease;
- -ms-transition: 0.15s ease;
- -o-transition: 0.15s ease;
- transition: all 0.15s ease;
- }
-
- div.abstract.hidden {
- border: dashed 1px var(--global-bg-color);
- }
-
- div.abstract.hidden.open {
- border-color: var(--global-text-color);
- }
- }
- }
-}
-
-// Rouge Color Customization
-figure.highlight {
- margin: 0 0 1rem;
-}
-
-pre {
- color: var(--global-theme-color);
- background-color: var(--global-code-bg-color);
- border-radius: 6px;
- padding: 6px 12px;
-
- pre,
- code {
- background-color: transparent;
- border-radius: 0;
- margin-bottom: 0;
- padding: 0;
- }
-}
-
-code {
- color: var(--global-theme-color);
- background-color: var(--global-code-bg-color);
- border-radius: 3px;
- padding: 3px 3px;
-}
-
-// Transitioning Themes
-html.transition,
-html.transition *,
-html.transition *:before,
-html.transition *:after {
- transition: all 750ms !important;
- transition-delay: 0 !important;
-}
-
-// Extra Markdown style (post Customization)
-.post {
- .post-meta {
- color: var(--global-text-color-light);
- font-size: 0.875rem;
- margin-bottom: 0;
- }
-
- .post-tags {
- color: var(--global-text-color-light);
- font-size: 0.875rem;
- padding-top: 0.25rem;
- padding-bottom: 1rem;
-
- a {
- color: var(--global-text-color-light);
- text-decoration: none;
-
- &:hover {
- color: var(--global-theme-color);
- }
- }
- }
-}
-
-progress {
- /* Positioning */
- position: fixed;
- left: 0;
- top: 56px;
- z-index: 10;
-
- /* Dimensions */
- width: 100%;
- height: 1px;
-
- /* Reset the appearance */
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-
- /* Get rid of the default border in Firefox/Opera. */
- border: none;
-
- /* Progress bar container for Firefox/IE10 */
- background-color: transparent;
-
- /* Progress bar value for IE10 */
- color: var(--global-theme-color);
-}
-
-progress::-webkit-progress-bar {
- background-color: transparent;
-}
-
-progress::-webkit-progress-value {
- background-color: var(--global-theme-color);
-}
-
-progress::-moz-progress-bar {
- background-color: var(--global-theme-color);
-}
-
-.progress-container {
- width: 100%;
- background-color: transparent;
- position: fixed;
- top: 56px;
- left: 0;
- height: 5px;
- display: block;
-}
-
-.progress-bar {
- background-color: var(--global-theme-color);
- width: 0%;
- display: block;
- height: inherit;
-}
-
-/* Copy button */
-.code-display-wrapper {
- position: relative;
-
- .copy {
- background: var(--global-card-bg-color);
- border-color: var(--global-bg-color);
- border-radius: 0.3rem;
- border-style: none;
- color: var(--global-text-color);
- font-size: medium;
- opacity: 0;
- position: absolute;
- right: 0.2rem;
- top: 0.2rem;
- }
-
- &:active .copy,
- &:focus .copy,
- &:hover .copy {
- color: var(--global-hover-color);
- opacity: 1;
- }
-}
-
-.btn-group.dropdown {
- .btn {
- box-shadow: none;
- -webkit-box-shadow: none;
- }
-
- .btn-secondary.dropdown-toggle {
- border: 1px solid var(--global-divider-color);
-
- .page-size {
- color: inherit;
- }
-
- &:not(.active) {
- background-color: var(--global-bg-color) !important;
- color: var(--global-text-color);
- }
-
- &:hover {
- background-color: var(--global-hover-color) !important;
- color: var(--global-hover-text-color) !important;
- }
- }
-
- .dropdown-menu {
- background-color: var(--global-bg-color);
- }
-
- .dropdown-item {
- background-color: var(--global-bg-color);
- color: var(--global-text-color);
-
- &:hover {
- color: var(--global-hover-color);
- }
- }
-
- .dropdown-item.active,
- .dropdown-item:active {
- background-color: var(--global-hover-color);
- color: var(--global-hover-text-color) !important;
-
- &:hover {
- color: var(--global-hover-text-color);
- }
- }
-}
-
-/* Table of Contents */
-nav[data-toggle="toc"] {
- top: 5rem;
-
- .nav .nav > li > a {
- font-size: 0.75rem;
- }
-
- .nav > li > a {
- color: var(--global-text-color);
- font-size: 0.75rem;
-
- &:hover {
- color: var(--global-hover-color);
- border-left-color: var(--global-hover-color);
- }
- }
-
- .nav-link.active {
- color: var(--global-theme-color);
- border-left-color: var(--global-theme-color);
- font-size: 0.75rem;
-
- &:hover {
- color: var(--global-hover-color);
- border-left-color: var(--global-hover-color);
- }
- }
-}
-
-/* small screens */
-@media (max-width: 576px) {
- /* override stickyness so that the navigation does not follow scrolling */
- nav[data-toggle="toc"] {
- visibility: hidden;
- height: 0;
- top: 0;
- }
-}
-
-.featured-posts {
- a {
- color: var(--global-text-color-light);
- text-decoration: none;
-
- .card-text {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
-
- &:hover {
- color: var(--global-theme-color);
-
- .card-title {
- color: var(--global-theme-color);
- }
- }
- }
-
- .card-item {
- margin-bottom: 10px;
- }
-
- .post-meta {
- color: var(--global-text-color-light);
- font-size: 0.875rem;
- margin-bottom: 0;
- padding-top: 0.5rem;
- }
-}
-
-.unloaded {
- display: none !important;
-}
-
-.medium-zoom-overlay,
-.medium-zoom-image--opened {
- z-index: 999;
-}
-
-#toc-sidebar {
- z-index: 1;
-}
-
-.echarts {
- height: 400px;
- width: 100%;
-}
-
-.map {
- height: 400px;
- width: 100%;
-}
-
-swiper-container {
- --swiper-navigation-color: var(--global-theme-color);
- --swiper-pagination-color: var(--global-theme-color);
- --swiper-pagination-bullet-inactive-color: var(--global-text-color);
-}
+/*******************************************************************************
+ * Styles for the base elements of the theme.
+ ******************************************************************************/
+
+// Typography
+
+p,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+em,
+div,
+li,
+span,
+strong {
+ color: var(--global-text-color);
+}
+
+hr {
+ border-top: 1px solid var(--global-divider-color);
+}
+
+table {
+ td,
+ th {
+ font-size: 1rem;
+ }
+
+ th {
+ font-weight: bold;
+ }
+}
+
+a,
+table.table a {
+ color: var(--global-theme-color);
+
+ &:hover {
+ color: var(--global-theme-color);
+ text-decoration: underline;
+ }
+
+ &:hover:after :not(.nav-item.dropdown) {
+ width: 100%;
+ }
+}
+
+.table-dark {
+ background-color: transparent;
+ &.table-bordered {
+ border: 1px solid var(--global-divider-color) !important;
+ }
+}
+
+figure,
+img {
+ max-width: 90vw;
+}
+
+blockquote {
+ background: var(--global-bg-color);
+ border-left: 5px solid var(--global-theme-color);
+ margin: 1.5em 0;
+ padding: 1em;
+ font-size: 1.2rem;
+
+ p {
+ margin-bottom: 0;
+ }
+
+ /* Tips, warnings, and dangers blockquotes */
+ &.block-tip {
+ border-color: var(--global-tip-block);
+ background-color: var(--global-tip-block-bg);
+
+ p {
+ color: var(--global-tip-block-text);
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ color: var(--global-tip-block-title);
+ }
+ }
+
+ &.block-warning {
+ border-color: var(--global-warning-block);
+ background-color: var(--global-warning-block-bg);
+
+ p {
+ color: var(--global-warning-block-text);
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ color: var(--global-warning-block-title);
+ }
+ }
+
+ &.block-danger {
+ border-color: var(--global-danger-block);
+ background-color: var(--global-danger-block-bg);
+
+ p {
+ color: var(--global-danger-block-text);
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ color: var(--global-danger-block-title);
+ }
+ }
+}
+
+// Math
+
+.equation {
+ margin-bottom: 1rem;
+ text-align: center;
+}
+
+// Caption
+
+.caption {
+ font-size: 0.875rem;
+ margin-top: 0.75rem;
+ margin-bottom: 1.5rem;
+ text-align: center;
+}
+
+// Card
+
+.card {
+ background-color: var(--global-card-bg-color);
+
+ img {
+ width: 100%;
+ }
+
+ .card-title {
+ color: var(--global-text-color);
+ }
+
+ .card-item {
+ width: auto;
+ margin-bottom: 10px;
+
+ .row {
+ display: flex;
+ align-items: center;
+ }
+ }
+}
+
+// Citation
+
+.citation,
+.citation-number {
+ color: var(--global-theme-color);
+}
+
+// Profile
+
+.profile {
+ width: 100%;
+
+ .more-info {
+ margin-bottom: 5px;
+ margin-top: 5px;
+ font-family: monospace;
+
+ p {
+ display: inline-block;
+ margin: 0;
+ }
+ }
+}
+
+.profile.float-right {
+ margin-left: 1rem;
+}
+
+.profile.float-left {
+ margin-right: 1rem;
+}
+
+@media (min-width: 576px) {
+ .profile {
+ width: 30%;
+
+ .address {
+ p {
+ display: block;
+ }
+ }
+ }
+}
+
+.post-description {
+ margin-bottom: 2rem;
+ font-size: 0.875rem;
+
+ a {
+ color: inherit;
+
+ &:hover {
+ color: var(--global-theme-color);
+ text-decoration: none;
+ }
+ }
+}
+
+// Navbar customization
+
+.navbar {
+ box-shadow: none;
+ border-bottom: 1px solid var(--global-divider-color);
+ background-color: var(--global-bg-color);
+ opacity: 0.95;
+}
+
+.navbar .dropdown-menu {
+ background-color: var(--global-bg-color);
+ border: 1px solid var(--global-divider-color);
+
+ a:not(.active) {
+ color: var(--global-text-color);
+ }
+
+ a:hover {
+ color: var(--global-hover-color);
+ }
+
+ .dropdown-divider {
+ border-top: 1px solid var(--global-divider-color) !important;
+ }
+}
+
+.dropdown-item {
+ color: var(--global-text-color);
+
+ &:hover {
+ color: var(--global-hover-color);
+ background-color: var(--global-bg-color);
+ }
+}
+
+.navbar.navbar-light {
+ a {
+ &:hover {
+ text-decoration: none;
+ }
+ }
+
+ .navbar-brand {
+ color: var(--global-text-color);
+ }
+
+ .navbar-nav .nav-item .nav-link {
+ color: var(--global-text-color);
+
+ &:hover {
+ color: var(--global-hover-color);
+ }
+ }
+
+ .navbar-nav .nav-item.active > .nav-link {
+ background-color: inherit;
+ font-weight: bolder;
+ color: var(--global-theme-color);
+
+ &:hover {
+ color: var(--global-hover-color);
+ }
+ }
+
+ .navbar-brand.social {
+ padding-bottom: 0;
+ padding-top: 0;
+ font-size: 1.7rem;
+
+ a {
+ i::before {
+ color: var(--global-text-color);
+ transition-property: all 0.2s ease-in-out;
+ }
+
+ &:hover {
+ i::before {
+ color: var(--global-theme-color);
+ }
+ }
+ }
+ }
+}
+
+.navbar-toggler {
+ .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ background-color: var(--global-text-color);
+ border-radius: 1px;
+ margin-bottom: 4px;
+ transition: all 0.2s;
+ }
+
+ .top-bar {
+ transform: rotate(45deg);
+ transform-origin: 10% 10%;
+ }
+
+ .middle-bar {
+ opacity: 0;
+ }
+
+ .bottom-bar {
+ transform: rotate(-45deg);
+ transform-origin: 10% 90%;
+ }
+}
+
+.navbar-toggler.collapsed {
+ .top-bar {
+ transform: rotate(0);
+ }
+
+ .middle-bar {
+ opacity: 1;
+ }
+
+ .bottom-bar {
+ transform: rotate(0);
+ }
+}
+
+#light-toggle {
+ padding: 0;
+ border: 0;
+ background-color: inherit;
+ color: var(--global-text-color);
+
+ &:hover {
+ color: var(--global-hover-color);
+ }
+}
+
+// Social (bottom)
+
+.social {
+ text-align: center;
+
+ .contact-icons {
+ font-size: 4rem;
+
+ a {
+ i::before {
+ color: var(--global-text-color);
+ transition-property: all 0.2s ease-in-out;
+ }
+
+ &:hover {
+ i::before {
+ color: var(--global-theme-color);
+ }
+ }
+ }
+ }
+
+ .contact-note {
+ font-size: 0.8rem;
+ }
+}
+
+.wechat-modal {
+ display: none;
+ position: fixed;
+ z-index: 1;
+ padding-top: 100px;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+ background-color: rgb(0, 0, 0);
+ background-color: rgba(0, 0, 0, 0.8);
+}
+
+.wechat-modal > img {
+ display: block;
+ position: relative;
+ top: 50%;
+ left: 50%;
+ width: 33%;
+ max-width: 400px;
+ transform: translate(-50%, -50%);
+}
+
+@media only screen and (max-width: 400px) {
+ .wechat-modal > img {
+ width: 100%;
+ }
+}
+
+// Footer
+footer.fixed-bottom {
+ background-color: var(--global-footer-bg-color);
+ font-size: 0.75rem;
+
+ .container {
+ color: var(--global-footer-text-color);
+ padding-top: 9px;
+ padding-bottom: 8px;
+ }
+
+ a {
+ color: var(--global-footer-link-color);
+
+ &:hover {
+ color: var(--global-theme-color);
+ text-decoration: none;
+ }
+ }
+}
+
+footer.sticky-bottom {
+ border-top: 1px solid var(--global-divider-color);
+ padding-top: 40px;
+ padding-bottom: 40px;
+ font-size: 0.9rem;
+}
+
+// CV
+
+.cv {
+ margin-bottom: 40px;
+
+ .card {
+ background-color: var(--global-card-bg-color);
+ border: 1px solid var(--global-divider-color);
+
+ .list-group-item {
+ background-color: inherit;
+ border-color: var(--global-divider-color);
+
+ .badge {
+ color: var(--global-card-bg-color) !important;
+ background-color: var(--global-theme-color) !important;
+ }
+ }
+ }
+}
+
+.table-cv-map {
+ background-color: transparent;
+ border: none;
+ color: var(--global-text-color);
+}
+
+// Repositories
+
+@media (min-width: 768px) {
+ .repo {
+ max-width: 50%;
+ }
+}
+
+// Blog
+
+.header-bar {
+ border-bottom: 1px solid var(--global-divider-color);
+ text-align: center;
+ padding-top: 2rem;
+ padding-bottom: 3rem;
+
+ h1 {
+ color: var(--global-theme-color);
+ font-size: 5rem;
+ }
+}
+
+.tag-category-list {
+ border-bottom: 1px solid var(--global-divider-color);
+ text-align: center;
+ padding-top: 1rem;
+
+ ul {
+ justify-content: center;
+ display: flow-root;
+
+ p,
+ li {
+ list-style: none;
+ display: inline-block;
+ padding: 1rem 0.5rem;
+ color: var(--global-text-color-light);
+ }
+ }
+}
+
+.post-title {
+ mjx-container[jax="CHTML"][display="true"] {
+ display: unset;
+ }
+}
+
+.post-list {
+ margin: 0;
+ margin-bottom: 40px;
+ padding: 0;
+
+ li {
+ border-bottom: 1px solid var(--global-divider-color);
+ list-style: none;
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+
+ .post-meta {
+ color: var(--global-text-color-light);
+ font-size: 0.875rem;
+ margin-bottom: 0;
+ }
+
+ .post-tags {
+ color: var(--global-text-color-light);
+ font-size: 0.875rem;
+ padding-top: 0.25rem;
+ padding-bottom: 0;
+ }
+
+ a {
+ color: var(--global-text-color);
+ text-decoration: none;
+
+ &:hover {
+ color: var(--global-theme-color);
+ }
+ }
+
+ mjx-container[jax="CHTML"][display="true"] {
+ display: unset;
+ }
+ }
+}
+
+.pagination {
+ .page-item {
+ .page-link {
+ color: var(--global-text-color);
+
+ &:hover {
+ color: $black-color;
+ }
+ }
+
+ &.active .page-link {
+ color: $white-color;
+ background-color: var(--global-theme-color);
+
+ &:hover {
+ background-color: var(--global-theme-color);
+ }
+ }
+ }
+}
+
+// Distill
+
+.distill {
+ a:hover {
+ border-bottom-color: var(--global-theme-color);
+ text-decoration: none;
+ }
+}
+
+// Projects
+
+.projects {
+ a {
+ text-decoration: none;
+
+ &:hover {
+ .card-title {
+ color: var(--global-theme-color);
+ }
+ }
+ }
+
+ .card {
+ img {
+ width: 100%;
+ }
+ }
+
+ .card-item {
+ width: auto;
+ margin-bottom: 10px;
+
+ .row {
+ display: flex;
+ align-items: center;
+ }
+ }
+
+ .grid-sizer,
+ .grid-item {
+ width: 250px;
+ margin-bottom: 10px;
+ }
+
+ h2.category {
+ color: var(--global-divider-color);
+ border-bottom: 1px solid var(--global-divider-color);
+ padding-top: 0.5rem;
+ margin-top: 2rem;
+ margin-bottom: 1rem;
+ text-align: right;
+ }
+}
+
+// Publications
+
+.publications {
+ margin-top: 2rem;
+
+ h1 {
+ color: var(--global-theme-color);
+ font-size: 2rem;
+ text-align: center;
+ margin-top: 1em;
+ margin-bottom: 1em;
+ }
+
+ h2 {
+ margin-bottom: 1rem;
+
+ span {
+ font-size: 1.5rem;
+ }
+ }
+
+ h2.bibliography {
+ color: var(--global-divider-color);
+ border-top: 1px solid var(--global-divider-color);
+ padding-top: 1rem;
+ margin-top: 2rem;
+ margin-bottom: -2rem;
+ text-align: right;
+ }
+
+ ol.bibliography {
+ list-style: none;
+ padding: 0;
+ margin-top: 0;
+
+ li {
+ margin-bottom: 1rem;
+
+ .preview {
+ width: 100%;
+ min-width: 80px;
+ max-width: 200px;
+ }
+
+ .abbr {
+ height: 2rem;
+ margin-bottom: 0.5rem;
+
+ abbr {
+ display: inline-block;
+ background-color: var(--global-theme-color);
+ padding-left: 1rem;
+ padding-right: 1rem;
+
+ a {
+ color: white;
+
+ &:hover {
+ text-decoration: none;
+ }
+ }
+ }
+
+ .award {
+ color: var(--global-theme-color) !important;
+ border: 1px solid var(--global-theme-color);
+ }
+ }
+
+ .title {
+ font-weight: bolder;
+ }
+
+ .author {
+ a {
+ border-bottom: 1px dashed var(--global-theme-color);
+
+ &:hover {
+ border-bottom-style: solid;
+ text-decoration: none;
+ }
+ }
+
+ > em {
+ border-bottom: 1px solid;
+ font-style: normal;
+ }
+
+ > span.more-authors {
+ color: var(--global-text-color-light);
+ border-bottom: 1px dashed var(--global-text-color-light);
+ cursor: pointer;
+
+ &:hover {
+ color: var(--global-text-color);
+ border-bottom: 1px dashed var(--global-text-color);
+ }
+ }
+ }
+
+ .links {
+ a.btn {
+ color: var(--global-text-color);
+ border: 1px solid var(--global-text-color);
+ padding-left: 1rem;
+ padding-right: 1rem;
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+ margin-left: 0;
+
+ &:hover {
+ color: var(--global-theme-color);
+ border-color: var(--global-theme-color);
+ }
+ }
+ }
+
+ .badges {
+ padding-bottom: 0.5rem;
+ span {
+ display: inline-block;
+ color: $black-color;
+ height: 100%;
+ padding-right: 0.5rem;
+ vertical-align: middle;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ .hidden {
+ font-size: 0.875rem;
+ max-height: 0px;
+ overflow: hidden;
+ text-align: justify;
+ transition-property: 0.15s ease;
+ -moz-transition: 0.15s ease;
+ -ms-transition: 0.15s ease;
+ -o-transition: 0.15s ease;
+ transition: all 0.15s ease;
+
+ p {
+ line-height: 1.4em;
+ margin: 10px;
+ }
+
+ pre {
+ font-size: 1em;
+ line-height: 1.4em;
+ padding: 10px;
+ }
+ }
+
+ .hidden.open {
+ max-height: 100em;
+ transition-property: 0.15s ease;
+ -moz-transition: 0.15s ease;
+ -ms-transition: 0.15s ease;
+ -o-transition: 0.15s ease;
+ transition: all 0.15s ease;
+ }
+
+ div.abstract.hidden {
+ border: dashed 1px var(--global-bg-color);
+ }
+
+ div.abstract.hidden.open {
+ border-color: var(--global-text-color);
+ }
+ }
+ }
+}
+
+// Rouge Color Customization
+figure.highlight {
+ margin: 0 0 1rem;
+}
+
+pre {
+ color: var(--global-theme-color);
+ background-color: var(--global-code-bg-color);
+ border-radius: 6px;
+ padding: 6px 12px;
+
+ pre,
+ code {
+ background-color: transparent;
+ border-radius: 0;
+ margin-bottom: 0;
+ padding: 0;
+ }
+}
+
+code {
+ color: var(--global-theme-color);
+ background-color: var(--global-code-bg-color);
+ border-radius: 3px;
+ padding: 3px 3px;
+}
+
+// Transitioning Themes
+html.transition,
+html.transition *,
+html.transition *:before,
+html.transition *:after {
+ transition: all 750ms !important;
+ transition-delay: 0 !important;
+}
+
+// Extra Markdown style (post Customization)
+.post {
+ .post-meta {
+ color: var(--global-text-color-light);
+ font-size: 0.875rem;
+ margin-bottom: 0;
+ }
+
+ .post-tags {
+ color: var(--global-text-color-light);
+ font-size: 0.875rem;
+ padding-top: 0.25rem;
+ padding-bottom: 1rem;
+
+ a {
+ color: var(--global-text-color-light);
+ text-decoration: none;
+
+ &:hover {
+ color: var(--global-theme-color);
+ }
+ }
+ }
+}
+
+progress {
+ /* Positioning */
+ position: fixed;
+ left: 0;
+ top: 56px;
+ z-index: 10;
+
+ /* Dimensions */
+ width: 100%;
+ height: 1px;
+
+ /* Reset the appearance */
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+
+ /* Get rid of the default border in Firefox/Opera. */
+ border: none;
+
+ /* Progress bar container for Firefox/IE10 */
+ background-color: transparent;
+
+ /* Progress bar value for IE10 */
+ color: var(--global-theme-color);
+}
+
+progress::-webkit-progress-bar {
+ background-color: transparent;
+}
+
+progress::-webkit-progress-value {
+ background-color: var(--global-theme-color);
+}
+
+progress::-moz-progress-bar {
+ background-color: var(--global-theme-color);
+}
+
+.progress-container {
+ width: 100%;
+ background-color: transparent;
+ position: fixed;
+ top: 56px;
+ left: 0;
+ height: 5px;
+ display: block;
+}
+
+.progress-bar {
+ background-color: var(--global-theme-color);
+ width: 0%;
+ display: block;
+ height: inherit;
+}
+
+/* Copy button */
+.code-display-wrapper {
+ position: relative;
+
+ .copy {
+ background: var(--global-card-bg-color);
+ border-color: var(--global-bg-color);
+ border-radius: 0.3rem;
+ border-style: none;
+ color: var(--global-text-color);
+ font-size: medium;
+ opacity: 0;
+ position: absolute;
+ right: 0.2rem;
+ top: 0.2rem;
+ }
+
+ &:active .copy,
+ &:focus .copy,
+ &:hover .copy {
+ color: var(--global-hover-color);
+ opacity: 1;
+ }
+}
+
+.btn-group.dropdown {
+ .btn {
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ }
+
+ .btn-secondary.dropdown-toggle {
+ border: 1px solid var(--global-divider-color);
+
+ .page-size {
+ color: inherit;
+ }
+
+ &:not(.active) {
+ background-color: var(--global-bg-color) !important;
+ color: var(--global-text-color);
+ }
+
+ &:hover {
+ background-color: var(--global-hover-color) !important;
+ color: var(--global-hover-text-color) !important;
+ }
+ }
+
+ .dropdown-menu {
+ background-color: var(--global-bg-color);
+ }
+
+ .dropdown-item {
+ background-color: var(--global-bg-color);
+ color: var(--global-text-color);
+
+ &:hover {
+ color: var(--global-hover-color);
+ }
+ }
+
+ .dropdown-item.active,
+ .dropdown-item:active {
+ background-color: var(--global-hover-color);
+ color: var(--global-hover-text-color) !important;
+
+ &:hover {
+ color: var(--global-hover-text-color);
+ }
+ }
+}
+
+/* Table of Contents */
+nav[data-toggle="toc"] {
+ top: 5rem;
+
+ .nav .nav > li > a {
+ font-size: 0.75rem;
+ }
+
+ .nav > li > a {
+ color: var(--global-text-color);
+ font-size: 0.75rem;
+
+ &:hover {
+ color: var(--global-hover-color);
+ border-left-color: var(--global-hover-color);
+ }
+ }
+
+ .nav-link.active {
+ color: var(--global-theme-color);
+ border-left-color: var(--global-theme-color);
+ font-size: 0.75rem;
+
+ &:hover {
+ color: var(--global-hover-color);
+ border-left-color: var(--global-hover-color);
+ }
+ }
+}
+
+/* small screens */
+@media (max-width: 576px) {
+ /* override stickyness so that the navigation does not follow scrolling */
+ nav[data-toggle="toc"] {
+ visibility: hidden;
+ height: 0;
+ top: 0;
+ }
+}
+
+.featured-posts {
+ a {
+ color: var(--global-text-color-light);
+ text-decoration: none;
+
+ .card-text {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ &:hover {
+ color: var(--global-theme-color);
+
+ .card-title {
+ color: var(--global-theme-color);
+ }
+ }
+ }
+
+ .card-item {
+ margin-bottom: 10px;
+ }
+
+ .post-meta {
+ color: var(--global-text-color-light);
+ font-size: 0.875rem;
+ margin-bottom: 0;
+ padding-top: 0.5rem;
+ }
+}
+
+.unloaded {
+ display: none !important;
+}
+
+.medium-zoom-overlay,
+.medium-zoom-image--opened {
+ z-index: 999;
+}
+
+#toc-sidebar {
+ z-index: 1;
+}
+
+.echarts {
+ height: 400px;
+ width: 100%;
+}
+
+.map {
+ height: 400px;
+ width: 100%;
+}
+
+swiper-container {
+ --swiper-navigation-color: var(--global-theme-color);
+ --swiper-pagination-color: var(--global-theme-color);
+ --swiper-pagination-bullet-inactive-color: var(--global-text-color);
+}
diff --git a/_sass/_cv.scss b/_sass/_cv.scss
index c750482d..d733ba32 100644
--- a/_sass/_cv.scss
+++ b/_sass/_cv.scss
@@ -1,215 +1,215 @@
-/*****************************
- * CV shared styles
- *****************************/
-
-div.container-link-button {
- margin-right: 0.5rem;
-}
-
-table.table-cv {
- background-color: transparent !important;
-}
-
-a.btncv {
- color: var(--global-text-color) !important;
- border: 1px solid var(--global-text-color) !important;
- border-radius: 0.125rem;
- padding-left: 1rem;
- padding-right: 1rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- text-decoration: none;
- font-weight: 400;
- font-size: 0.7rem;
- text-align: center;
- vertical-align: middle;
- text-transform: uppercase;
- white-space: nowrap;
-}
-
-a.btncv:hover {
- color: var(--global-theme-color) !important;
- border-color: var(--global-theme-color) !important;
- text-decoration: none !important;
-}
-
-/*****************************
- * CV TIME_TABLE styles
- *****************************/
-
-p.location {
- font-size: 0.7rem;
- white-space: nowrap;
-}
-
-i.iconlocation {
- color: var(--global-theme-color);
- font-size: 0.8rem;
-}
-
-i.iconinstitution {
- color: var(--global-theme-color);
- font-size: 0.95rem;
- margin-right: 0.3rem;
-}
-
-i.icondepartment {
- color: var(--global-theme-color);
- font-size: 0.8rem;
- margin-right: 0.3rem;
-}
-
-table.institution {
- margin-bottom: 1rem;
-}
-
-td.department {
- font-size: 0.8rem;
-}
-
-div.container-links {
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- align-items: center;
- justify-content: flex-start;
- margin-top: 1rem;
- margin-bottom: 0.5rem;
-}
-
-/*****************************
- * CV MAP styles
- *****************************/
-
-div.container-pdf {
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- align-items: center;
- justify-content: flex-start;
-}
-
-/*****************************
- * CV LIST_GROUPS styles
- *****************************/
-
-div.list-groups {
- display: flex;
- flex-wrap: wrap;
- justify-content: flex-start;
- flex-direction: row;
- align-content: center;
-}
-
-div.list-group {
- display: flex;
- flex-wrap: wrap;
- flex-direction: column;
- align-items: flex-start;
- margin-bottom: 2rem;
-}
-
-td.list-group-category {
- color: var(--global-theme-color);
- margin-bottom: 0.5rem;
-}
-
-td.list-group-category-icon {
- font-size: 0.8rem;
- color: var(--global-theme-color);
- width: 1.4rem;
- padding-right: 0.4rem;
-}
-
-td.list-group-name {
- font-size: 0.8rem;
-}
-
-td.list-group-level {
- font-size: 0.8rem;
- padding-left: 0.5rem;
-}
-
-td.list-group-school {
- font-size: 0.7rem;
- padding-left: 0.5rem;
- text-align: center;
-}
-
-p.list-group-time {
- font-size: 0.7rem;
- padding-left: 0.5rem;
-}
-
-td.list-group-link {
- padding-left: 0.5rem;
-}
-
-/*****************************
- * CV TOC styles
- *****************************/
-
-a.anchor {
- display: block;
- position: relative;
- top: -50px;
- visibility: hidden;
-}
-
-ul.timeline {
- margin-top: 2rem;
- margin-bottom: 2rem;
-}
-
-ul.timeline li {
- position: relative;
- min-height: 2.2rem;
- color: var(--global-text-color);
- list-style-position: inside;
-}
-
-span.badge-toc {
- color: var(--global-bg-color);
- background-color: var(--global-theme-color);
- border-radius: 0.125rem;
- padding: 0.125rem 0.5rem 0.125rem 0.5rem;
- font-weight: 700 !important;
- display: inline-block;
- inline-size: fit-content;
-}
-
-ul.timeline li::before {
- content: "";
- min-height: 2.5rem;
- width: 1px;
- background: var(--global-text-color);
- margin: 0;
- padding: 0;
- position: absolute;
- left: 2px;
- top: -0.5rem;
-}
-
-/*ul.timeline::before {
- content: "●";
- font-size: 1em;
- display: inline-block;
- margin: 0;
- padding: 0;
- position: relative;
- left: -2px;
- top: 0.4rem;
- color: var(--global-text-color);
-}
- ul.timeline::after {
- content: "●";
- font-size: 1em;
- display: inline-block;
- margin: 0;
- padding: 0;
- position: relative;
- left: -2px;
- top: -1rem;
- color: var(--global-text-color);
-}
-*/
+/*****************************
+ * CV shared styles
+ *****************************/
+
+div.container-link-button {
+ margin-right: 0.5rem;
+}
+
+table.table-cv {
+ background-color: transparent !important;
+}
+
+a.btncv {
+ color: var(--global-text-color) !important;
+ border: 1px solid var(--global-text-color) !important;
+ border-radius: 0.125rem;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ padding-top: 0.25rem;
+ padding-bottom: 0.25rem;
+ text-decoration: none;
+ font-weight: 400;
+ font-size: 0.7rem;
+ text-align: center;
+ vertical-align: middle;
+ text-transform: uppercase;
+ white-space: nowrap;
+}
+
+a.btncv:hover {
+ color: var(--global-theme-color) !important;
+ border-color: var(--global-theme-color) !important;
+ text-decoration: none !important;
+}
+
+/*****************************
+ * CV TIME_TABLE styles
+ *****************************/
+
+p.location {
+ font-size: 0.7rem;
+ white-space: nowrap;
+}
+
+i.iconlocation {
+ color: var(--global-theme-color);
+ font-size: 0.8rem;
+}
+
+i.iconinstitution {
+ color: var(--global-theme-color);
+ font-size: 0.95rem;
+ margin-right: 0.3rem;
+}
+
+i.icondepartment {
+ color: var(--global-theme-color);
+ font-size: 0.8rem;
+ margin-right: 0.3rem;
+}
+
+table.institution {
+ margin-bottom: 1rem;
+}
+
+td.department {
+ font-size: 0.8rem;
+}
+
+div.container-links {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: flex-start;
+ margin-top: 1rem;
+ margin-bottom: 0.5rem;
+}
+
+/*****************************
+ * CV MAP styles
+ *****************************/
+
+div.container-pdf {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: flex-start;
+}
+
+/*****************************
+ * CV LIST_GROUPS styles
+ *****************************/
+
+div.list-groups {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ flex-direction: row;
+ align-content: center;
+}
+
+div.list-group {
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction: column;
+ align-items: flex-start;
+ margin-bottom: 2rem;
+}
+
+td.list-group-category {
+ color: var(--global-theme-color);
+ margin-bottom: 0.5rem;
+}
+
+td.list-group-category-icon {
+ font-size: 0.8rem;
+ color: var(--global-theme-color);
+ width: 1.4rem;
+ padding-right: 0.4rem;
+}
+
+td.list-group-name {
+ font-size: 0.8rem;
+}
+
+td.list-group-level {
+ font-size: 0.8rem;
+ padding-left: 0.5rem;
+}
+
+td.list-group-school {
+ font-size: 0.7rem;
+ padding-left: 0.5rem;
+ text-align: center;
+}
+
+p.list-group-time {
+ font-size: 0.7rem;
+ padding-left: 0.5rem;
+}
+
+td.list-group-link {
+ padding-left: 0.5rem;
+}
+
+/*****************************
+ * CV TOC styles
+ *****************************/
+
+a.anchor {
+ display: block;
+ position: relative;
+ top: -50px;
+ visibility: hidden;
+}
+
+ul.timeline {
+ margin-top: 2rem;
+ margin-bottom: 2rem;
+}
+
+ul.timeline li {
+ position: relative;
+ min-height: 2.2rem;
+ color: var(--global-text-color);
+ list-style-position: inside;
+}
+
+span.badge-toc {
+ color: var(--global-bg-color);
+ background-color: var(--global-theme-color);
+ border-radius: 0.125rem;
+ padding: 0.125rem 0.5rem 0.125rem 0.5rem;
+ font-weight: 700 !important;
+ display: inline-block;
+ inline-size: fit-content;
+}
+
+ul.timeline li::before {
+ content: "";
+ min-height: 2.5rem;
+ width: 1px;
+ background: var(--global-text-color);
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ left: 2px;
+ top: -0.5rem;
+}
+
+/*ul.timeline::before {
+ content: "●";
+ font-size: 1em;
+ display: inline-block;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ left: -2px;
+ top: 0.4rem;
+ color: var(--global-text-color);
+}
+ ul.timeline::after {
+ content: "●";
+ font-size: 1em;
+ display: inline-block;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ left: -2px;
+ top: -1rem;
+ color: var(--global-text-color);
+}
+*/
diff --git a/_sass/_distill.scss b/_sass/_distill.scss
index f8942734..acf5311b 100644
--- a/_sass/_distill.scss
+++ b/_sass/_distill.scss
@@ -1,171 +1,171 @@
-/*******************************************************************************
- * Style overrides for distill blog posts.
- ******************************************************************************/
-
-d-byline {
- border-top-color: var(--global-divider-color) !important;
-}
-
-d-byline h3 {
- color: var(--global-text-color) !important;
-}
-
-d-byline a,
-d-article d-byline a {
- color: var(--global-text-color) !important;
- &:hover {
- color: var(--global-hover-color) !important;
- }
-}
-
-d-article {
- border-top-color: var(--global-divider-color) !important;
- p,
- h1,
- h2,
- h3,
- h4,
- h5,
- h6,
- li,
- table {
- color: var(--global-text-color) !important;
- }
- h1,
- h2,
- hr,
- table,
- table th,
- table td {
- border-bottom-color: var(--global-divider-color) !important;
- }
- a {
- color: var(--global-theme-color) !important;
- &:hover {
- color: var(--global-theme-color) !important;
- }
- }
- b i {
- display: inline;
- }
- blockquote {
- border-left: 2px solid var(--global-theme-color) !important;
- }
-
- // Style taken from code blocks
- details {
- color: var(--global-text-color);
- background-color: var(--global-code-bg-color);
- margin-top: 0;
- padding: 8px 12px;
- position: relative;
- border-radius: 6px;
- display: block;
- margin-bottom: 20px;
- grid-column: text;
- overflow: auto;
- max-width: 100%;
- summary {
- color: var(--global-theme-color);
- }
- p {
- margin-top: 0.5rem;
- margin-bottom: 0.5rem;
- }
- }
-
- d-contents {
- align-self: start;
- grid-column: 1 / 4;
- grid-row: auto / span 4;
- justify-self: end;
- margin-top: 0em;
- padding-left: 2em;
- padding-right: 3em;
- border-right: 1px solid var(--global-divider-color);
- width: calc(max(70%, 300px));
- margin-right: 0px;
- margin-top: 0em;
- display: grid;
- grid-template-columns:
- minmax(8px, 1fr) [toc] auto
- minmax(8px, 1fr) [toc-line] 1px
- minmax(32px, 2fr);
-
- nav {
- grid-column: toc;
- a {
- border-bottom: none !important;
- &:hover {
- border-bottom: 1px solid var(--global-text-color) !important;
- }
- }
- h3 {
- margin-top: 0;
- margin-bottom: 1em;
- }
- div {
- display: block;
- outline: none;
- margin-bottom: 0.8em;
- color: rgba(0, 0, 0, 0.8);
- font-weight: bold;
- }
- ul {
- padding-left: 1em;
- margin-top: 0;
- margin-bottom: 6px;
- list-style-type: none;
- li {
- margin-bottom: 0.25em;
- }
- }
- }
- .figcaption {
- line-height: 1.4em;
- }
- toc-line {
- border-right: 1px solid var(--global-divider-color);
- grid-column: toc-line;
- }
- }
-
- d-footnote {
- scroll-margin-top: 66px;
- }
-}
-
-d-appendix {
- border-top-color: var(--global-divider-color) !important;
- color: var(--global-distill-app-color) !important;
- h3,
- li,
- span {
- color: var(--global-distill-app-color) !important;
- }
- a,
- a.footnote-backlink {
- color: var(--global-distill-app-color) !important;
- &:hover {
- color: var(--global-hover-color) !important;
- }
- }
-}
-
-@media (max-width: 1024px) {
- d-article {
- d-contents {
- display: block;
- grid-column-start: 2;
- grid-column-end: -2;
- padding-bottom: 0.5em;
- margin-bottom: 1em;
- padding-top: 0.5em;
- width: 100%;
- border: 1px solid var(--global-divider-color);
- nav {
- grid-column: none;
- }
- }
- }
-}
+/*******************************************************************************
+ * Style overrides for distill blog posts.
+ ******************************************************************************/
+
+d-byline {
+ border-top-color: var(--global-divider-color) !important;
+}
+
+d-byline h3 {
+ color: var(--global-text-color) !important;
+}
+
+d-byline a,
+d-article d-byline a {
+ color: var(--global-text-color) !important;
+ &:hover {
+ color: var(--global-hover-color) !important;
+ }
+}
+
+d-article {
+ border-top-color: var(--global-divider-color) !important;
+ p,
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6,
+ li,
+ table {
+ color: var(--global-text-color) !important;
+ }
+ h1,
+ h2,
+ hr,
+ table,
+ table th,
+ table td {
+ border-bottom-color: var(--global-divider-color) !important;
+ }
+ a {
+ color: var(--global-theme-color) !important;
+ &:hover {
+ color: var(--global-theme-color) !important;
+ }
+ }
+ b i {
+ display: inline;
+ }
+ blockquote {
+ border-left: 2px solid var(--global-theme-color) !important;
+ }
+
+ // Style taken from code blocks
+ details {
+ color: var(--global-text-color);
+ background-color: var(--global-code-bg-color);
+ margin-top: 0;
+ padding: 8px 12px;
+ position: relative;
+ border-radius: 6px;
+ display: block;
+ margin-bottom: 20px;
+ grid-column: text;
+ overflow: auto;
+ max-width: 100%;
+ summary {
+ color: var(--global-theme-color);
+ }
+ p {
+ margin-top: 0.5rem;
+ margin-bottom: 0.5rem;
+ }
+ }
+
+ d-contents {
+ align-self: start;
+ grid-column: 1 / 4;
+ grid-row: auto / span 4;
+ justify-self: end;
+ margin-top: 0em;
+ padding-left: 2em;
+ padding-right: 3em;
+ border-right: 1px solid var(--global-divider-color);
+ width: calc(max(70%, 300px));
+ margin-right: 0px;
+ margin-top: 0em;
+ display: grid;
+ grid-template-columns:
+ minmax(8px, 1fr) [toc] auto
+ minmax(8px, 1fr) [toc-line] 1px
+ minmax(32px, 2fr);
+
+ nav {
+ grid-column: toc;
+ a {
+ border-bottom: none !important;
+ &:hover {
+ border-bottom: 1px solid var(--global-text-color) !important;
+ }
+ }
+ h3 {
+ margin-top: 0;
+ margin-bottom: 1em;
+ }
+ div {
+ display: block;
+ outline: none;
+ margin-bottom: 0.8em;
+ color: rgba(0, 0, 0, 0.8);
+ font-weight: bold;
+ }
+ ul {
+ padding-left: 1em;
+ margin-top: 0;
+ margin-bottom: 6px;
+ list-style-type: none;
+ li {
+ margin-bottom: 0.25em;
+ }
+ }
+ }
+ .figcaption {
+ line-height: 1.4em;
+ }
+ toc-line {
+ border-right: 1px solid var(--global-divider-color);
+ grid-column: toc-line;
+ }
+ }
+
+ d-footnote {
+ scroll-margin-top: 66px;
+ }
+}
+
+d-appendix {
+ border-top-color: var(--global-divider-color) !important;
+ color: var(--global-distill-app-color) !important;
+ h3,
+ li,
+ span {
+ color: var(--global-distill-app-color) !important;
+ }
+ a,
+ a.footnote-backlink {
+ color: var(--global-distill-app-color) !important;
+ &:hover {
+ color: var(--global-hover-color) !important;
+ }
+ }
+}
+
+@media (max-width: 1024px) {
+ d-article {
+ d-contents {
+ display: block;
+ grid-column-start: 2;
+ grid-column-end: -2;
+ padding-bottom: 0.5em;
+ margin-bottom: 1em;
+ padding-top: 0.5em;
+ width: 100%;
+ border: 1px solid var(--global-divider-color);
+ nav {
+ grid-column: none;
+ }
+ }
+ }
+}
diff --git a/_sass/_layout.scss b/_sass/_layout.scss
index e3cbd228..e18f4bcb 100644
--- a/_sass/_layout.scss
+++ b/_sass/_layout.scss
@@ -1,53 +1,53 @@
-/******************************************************************************
- * Content
- ******************************************************************************/
-
-body {
- padding-bottom: 70px;
- color: var(--global-text-color);
- background-color: var(--global-bg-color);
-
- h1,
- h2,
- h3,
- h4,
- h5,
- h6 {
- scroll-margin-top: 66px;
- }
-}
-
-body.fixed-top-nav {
- // Add some padding for the nav-bar.
- padding-top: 56px;
-}
-
-body.sticky-bottom-footer {
- // Remove padding below footer.
- padding-bottom: 0;
-}
-
-.container {
- max-width: $max-content-width;
-}
-
-// Profile
-.profile {
- img {
- width: 100%;
- }
-}
-
-// TODO: redefine content layout.
-
-/******************************************************************************
- * Publications
- ******************************************************************************/
-
-// TODO: redefine publications layout.
-
-/*****************************************************************************
-* Projects
-*****************************************************************************/
-
-// TODO: redefine projects layout.
+/******************************************************************************
+ * Content
+ ******************************************************************************/
+
+body {
+ padding-bottom: 70px;
+ color: var(--global-text-color);
+ background-color: var(--global-bg-color);
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ scroll-margin-top: 66px;
+ }
+}
+
+body.fixed-top-nav {
+ // Add some padding for the nav-bar.
+ padding-top: 56px;
+}
+
+body.sticky-bottom-footer {
+ // Remove padding below footer.
+ padding-bottom: 0;
+}
+
+.container {
+ max-width: $max-content-width;
+}
+
+// Profile
+.profile {
+ img {
+ width: 100%;
+ }
+}
+
+// TODO: redefine content layout.
+
+/******************************************************************************
+ * Publications
+ ******************************************************************************/
+
+// TODO: redefine publications layout.
+
+/*****************************************************************************
+* Projects
+*****************************************************************************/
+
+// TODO: redefine projects layout.
diff --git a/_sass/_themes.scss b/_sass/_themes.scss
index 7e85e778..aafe4776 100644
--- a/_sass/_themes.scss
+++ b/_sass/_themes.scss
@@ -1,93 +1,93 @@
-/*******************************************************************************
- * Themes
- ******************************************************************************/
-
-:root {
- --global-bg-color: #{$white-color};
- --global-code-bg-color: #{$code-bg-color-light};
- --global-text-color: #{$black-color};
- --global-text-color-light: #{$grey-color};
- --global-theme-color: #{$orange-color};
- --global-hover-color: #{$orange-color};
- --global-hover-text-color: #{$white-color};
- --global-footer-bg-color: #{$grey-color-dark};
- --global-footer-text-color: #{$grey-color-light};
- --global-footer-link-color: #{$white-color};
- --global-distill-app-color: #{$grey-color};
- --global-divider-color: rgba(0, 0, 0, 0.1);
- --global-card-bg-color: #{$white-color};
-
- --global-tip-block: #42b983;
- --global-tip-block-bg: #e2f5ec;
- --global-tip-block-text: #215d42;
- --global-tip-block-title: #359469;
- --global-warning-block: #e7c000;
- --global-warning-block-bg: #fff8d8;
- --global-warning-block-text: #6b5900;
- --global-warning-block-title: #b29400;
- --global-danger-block: #c00;
- --global-danger-block-bg: #ffe0e0;
- --global-danger-block-text: #600;
- --global-danger-block-title: #c00;
-
- .fa-sun {
- display: none;
- }
- .fa-moon {
- padding-left: 10px;
- padding-top: 12px;
- display: block;
- }
-
- .repo-img-light {
- display: block;
- }
- .repo-img-dark {
- display: none;
- }
-}
-
-html[data-theme="dark"] {
- --global-bg-color: #{$grey-color-dark};
- --global-code-bg-color: #{$code-bg-color-dark};
- --global-text-color: #{$grey-color-light};
- --global-text-color-light: #{$grey-color-light};
- --global-theme-color: #{$orange-color};
- --global-hover-color: #{$orange-color};
- --global-hover-text-color: #{$white-color};
- --global-footer-bg-color: #{$grey-color-light};
- --global-footer-text-color: #{$grey-color-dark};
- --global-footer-link-color: #{$black-color};
- --global-distill-app-color: #{$grey-color-light};
- --global-divider-color: #424246;
- --global-card-bg-color: #{$grey-900};
-
- --global-tip-block: #42b983;
- --global-tip-block-bg: #e2f5ec;
- --global-tip-block-text: #215d42;
- --global-tip-block-title: #359469;
- --global-warning-block: #e7c000;
- --global-warning-block-bg: #fff8d8;
- --global-warning-block-text: #6b5900;
- --global-warning-block-title: #b29400;
- --global-danger-block: #c00;
- --global-danger-block-bg: #ffe0e0;
- --global-danger-block-text: #600;
- --global-danger-block-title: #c00;
-
- .fa-sun {
- padding-left: 10px;
- padding-top: 12px;
- display: block;
- }
- .fa-moon {
- display: none;
- }
-
- .repo-img-light {
- display: none;
- }
- .repo-img-dark {
- display: block;
- }
-}
+/*******************************************************************************
+ * Themes
+ ******************************************************************************/
+
+:root {
+ --global-bg-color: #{$white-color};
+ --global-code-bg-color: #{$code-bg-color-light};
+ --global-text-color: #{$black-color};
+ --global-text-color-light: #{$grey-color};
+ --global-theme-color: #{$orange-color};
+ --global-hover-color: #{$orange-color};
+ --global-hover-text-color: #{$white-color};
+ --global-footer-bg-color: #{$grey-color-dark};
+ --global-footer-text-color: #{$grey-color-light};
+ --global-footer-link-color: #{$white-color};
+ --global-distill-app-color: #{$grey-color};
+ --global-divider-color: rgba(0, 0, 0, 0.1);
+ --global-card-bg-color: #{$white-color};
+
+ --global-tip-block: #42b983;
+ --global-tip-block-bg: #e2f5ec;
+ --global-tip-block-text: #215d42;
+ --global-tip-block-title: #359469;
+ --global-warning-block: #e7c000;
+ --global-warning-block-bg: #fff8d8;
+ --global-warning-block-text: #6b5900;
+ --global-warning-block-title: #b29400;
+ --global-danger-block: #c00;
+ --global-danger-block-bg: #ffe0e0;
+ --global-danger-block-text: #600;
+ --global-danger-block-title: #c00;
+
+ .fa-sun {
+ display: none;
+ }
+ .fa-moon {
+ padding-left: 10px;
+ padding-top: 12px;
+ display: block;
+ }
+
+ .repo-img-light {
+ display: block;
+ }
+ .repo-img-dark {
+ display: none;
+ }
+}
+
+html[data-theme="dark"] {
+ --global-bg-color: #{$grey-color-dark};
+ --global-code-bg-color: #{$code-bg-color-dark};
+ --global-text-color: #{$grey-color-light};
+ --global-text-color-light: #{$grey-color-light};
+ --global-theme-color: #{$orange-color};
+ --global-hover-color: #{$orange-color};
+ --global-hover-text-color: #{$white-color};
+ --global-footer-bg-color: #{$grey-color-light};
+ --global-footer-text-color: #{$grey-color-dark};
+ --global-footer-link-color: #{$black-color};
+ --global-distill-app-color: #{$grey-color-light};
+ --global-divider-color: #424246;
+ --global-card-bg-color: #{$grey-900};
+
+ --global-tip-block: #42b983;
+ --global-tip-block-bg: #e2f5ec;
+ --global-tip-block-text: #215d42;
+ --global-tip-block-title: #359469;
+ --global-warning-block: #e7c000;
+ --global-warning-block-bg: #fff8d8;
+ --global-warning-block-text: #6b5900;
+ --global-warning-block-title: #b29400;
+ --global-danger-block: #c00;
+ --global-danger-block-bg: #ffe0e0;
+ --global-danger-block-text: #600;
+ --global-danger-block-title: #c00;
+
+ .fa-sun {
+ padding-left: 10px;
+ padding-top: 12px;
+ display: block;
+ }
+ .fa-moon {
+ display: none;
+ }
+
+ .repo-img-light {
+ display: none;
+ }
+ .repo-img-dark {
+ display: block;
+ }
+}
diff --git a/_sass/_variables.scss b/_sass/_variables.scss
index 0ed43700..d66b84c2 100644
--- a/_sass/_variables.scss
+++ b/_sass/_variables.scss
@@ -1,39 +1,39 @@
-/*******************************************************************************
- * Variables used throughout the theme.
- * To adjust anything, simply edit the variables below and rebuild the theme.
- ******************************************************************************/
-
-// Colors
-$red-color: #ff3636 !default;
-$red-color-dark: #b71c1c !default;
-$orange-color: #f29105 !default;
-$blue-color: #0076df !default;
-$blue-color-dark: #00369f !default;
-$cyan-color: #2698ba !default;
-$light-cyan-color: lighten($cyan-color, 25%);
-$green-color: #00ab37 !default;
-$green-color-lime: #b7d12a !default;
-$green-color-dark: #009f06 !default;
-$green-color-light: #ddffdd !default;
-$green-color-bright: #11d68b !default;
-$purple-color: #b509ac !default;
-$light-purple-color: lighten($purple-color, 25%);
-$pink-color: #f92080 !default;
-$pink-color-light: #ffdddd !default;
-$yellow-color: #efcc00 !default;
-
-$grey-color: #828282 !default;
-$grey-color-light: lighten($grey-color, 40%);
-$grey-color-dark: #1c1c1d;
-$grey-900: #212529;
-
-$white-color: #ffffff !default;
-$black-color: #000000 !default;
-
-// Theme colors
-
-$code-bg-color-light: rgba($purple-color, 0.05);
-$code-bg-color-dark: #2c3237 !default;
-
-// Font awesome location
-$fa-font-path: "../webfonts";
+/*******************************************************************************
+ * Variables used throughout the theme.
+ * To adjust anything, simply edit the variables below and rebuild the theme.
+ ******************************************************************************/
+
+// Colors
+$red-color: #ff3636 !default;
+$red-color-dark: #b71c1c !default;
+$orange-color: #f29105 !default;
+$blue-color: #0076df !default;
+$blue-color-dark: #00369f !default;
+$cyan-color: #2698ba !default;
+$light-cyan-color: lighten($cyan-color, 25%);
+$green-color: #00ab37 !default;
+$green-color-lime: #b7d12a !default;
+$green-color-dark: #009f06 !default;
+$green-color-light: #ddffdd !default;
+$green-color-bright: #11d68b !default;
+$purple-color: #b509ac !default;
+$light-purple-color: lighten($purple-color, 25%);
+$pink-color: #f92080 !default;
+$pink-color-light: #ffdddd !default;
+$yellow-color: #efcc00 !default;
+
+$grey-color: #828282 !default;
+$grey-color-light: lighten($grey-color, 40%);
+$grey-color-dark: #1c1c1d;
+$grey-900: #212529;
+
+$white-color: #ffffff !default;
+$black-color: #000000 !default;
+
+// Theme colors
+
+$code-bg-color-light: rgba($purple-color, 0.05);
+$code-bg-color-dark: #2c3237 !default;
+
+// Font awesome location
+$fa-font-path: "../webfonts";
diff --git a/_sass/font-awesome/_animated.scss b/_sass/font-awesome/_animated.scss
index 05fbe56f..d3e10753 100644
--- a/_sass/font-awesome/_animated.scss
+++ b/_sass/font-awesome/_animated.scss
@@ -1,205 +1,205 @@
-// animating icons
-// --------------------------
-
-.#{$fa-css-prefix}-beat {
- animation-name: #{$fa-css-prefix}-beat;
- animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
- animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
- animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
- animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
- animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
-}
-
-.#{$fa-css-prefix}-bounce {
- animation-name: #{$fa-css-prefix}-bounce;
- animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
- animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
- animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
- animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
- animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
-}
-
-.#{$fa-css-prefix}-fade {
- animation-name: #{$fa-css-prefix}-fade;
- animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
- animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
- animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
- animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
- animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
-}
-
-.#{$fa-css-prefix}-beat-fade {
- animation-name: #{$fa-css-prefix}-beat-fade;
- animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
- animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
- animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
- animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
- animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
-}
-
-.#{$fa-css-prefix}-flip {
- animation-name: #{$fa-css-prefix}-flip;
- animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
- animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
- animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
- animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
- animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
-}
-
-.#{$fa-css-prefix}-shake {
- animation-name: #{$fa-css-prefix}-shake;
- animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
- animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
- animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
- animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
- animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
-}
-
-.#{$fa-css-prefix}-spin {
- animation-name: #{$fa-css-prefix}-spin;
- animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
- animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
- animation-duration: var(--#{$fa-css-prefix}-animation-duration, 2s);
- animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
- animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
-}
-
-.#{$fa-css-prefix}-spin-reverse {
- --#{$fa-css-prefix}-animation-direction: reverse;
-}
-
-.#{$fa-css-prefix}-pulse,
-.#{$fa-css-prefix}-spin-pulse {
- animation-name: #{$fa-css-prefix}-spin;
- animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
- animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
- animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
- animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, steps(8));
-}
-
-// if agent or operating system prefers reduced motion, disable animations
-// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
-// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
-@media (prefers-reduced-motion: reduce) {
- .#{$fa-css-prefix}-beat,
- .#{$fa-css-prefix}-bounce,
- .#{$fa-css-prefix}-fade,
- .#{$fa-css-prefix}-beat-fade,
- .#{$fa-css-prefix}-flip,
- .#{$fa-css-prefix}-pulse,
- .#{$fa-css-prefix}-shake,
- .#{$fa-css-prefix}-spin,
- .#{$fa-css-prefix}-spin-pulse {
- animation-delay: -1ms;
- animation-duration: 1ms;
- animation-iteration-count: 1;
- transition-delay: 0s;
- transition-duration: 0s;
- }
-}
-
-@keyframes #{$fa-css-prefix}-beat {
- 0%,
- 90% {
- transform: scale(1);
- }
- 45% {
- transform: scale(var(--#{$fa-css-prefix}-beat-scale, 1.25));
- }
-}
-
-@keyframes #{$fa-css-prefix}-bounce {
- 0% {
- transform: scale(1, 1) translateY(0);
- }
- 10% {
- transform: scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1), var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9)) translateY(0);
- }
- 30% {
- transform: scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9), var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1))
- translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em));
- }
- 50% {
- transform: scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05), var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95)) translateY(0);
- }
- 57% {
- transform: scale(1, 1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em));
- }
- 64% {
- transform: scale(1, 1) translateY(0);
- }
- 100% {
- transform: scale(1, 1) translateY(0);
- }
-}
-
-@keyframes #{$fa-css-prefix}-fade {
- 50% {
- opacity: var(--#{$fa-css-prefix}-fade-opacity, 0.4);
- }
-}
-
-@keyframes #{$fa-css-prefix}-beat-fade {
- 0%,
- 100% {
- opacity: var(--#{$fa-css-prefix}-beat-fade-opacity, 0.4);
- transform: scale(1);
- }
- 50% {
- opacity: 1;
- transform: scale(var(--#{$fa-css-prefix}-beat-fade-scale, 1.125));
- }
-}
-
-@keyframes #{$fa-css-prefix}-flip {
- 50% {
- transform: rotate3d(
- var(--#{$fa-css-prefix}-flip-x, 0),
- var(--#{$fa-css-prefix}-flip-y, 1),
- var(--#{$fa-css-prefix}-flip-z, 0),
- var(--#{$fa-css-prefix}-flip-angle, -180deg)
- );
- }
-}
-
-@keyframes #{$fa-css-prefix}-shake {
- 0% {
- transform: rotate(-15deg);
- }
- 4% {
- transform: rotate(15deg);
- }
- 8%,
- 24% {
- transform: rotate(-18deg);
- }
- 12%,
- 28% {
- transform: rotate(18deg);
- }
- 16% {
- transform: rotate(-22deg);
- }
- 20% {
- transform: rotate(22deg);
- }
- 32% {
- transform: rotate(-12deg);
- }
- 36% {
- transform: rotate(12deg);
- }
- 40%,
- 100% {
- transform: rotate(0deg);
- }
-}
-
-@keyframes #{$fa-css-prefix}-spin {
- 0% {
- transform: rotate(0deg);
- }
- 100% {
- transform: rotate(360deg);
- }
-}
+// animating icons
+// --------------------------
+
+.#{$fa-css-prefix}-beat {
+ animation-name: #{$fa-css-prefix}-beat;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
+}
+
+.#{$fa-css-prefix}-bounce {
+ animation-name: #{$fa-css-prefix}-bounce;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
+}
+
+.#{$fa-css-prefix}-fade {
+ animation-name: #{$fa-css-prefix}-fade;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+}
+
+.#{$fa-css-prefix}-beat-fade {
+ animation-name: #{$fa-css-prefix}-beat-fade;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));
+}
+
+.#{$fa-css-prefix}-flip {
+ animation-name: #{$fa-css-prefix}-flip;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
+}
+
+.#{$fa-css-prefix}-shake {
+ animation-name: #{$fa-css-prefix}-shake;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
+}
+
+.#{$fa-css-prefix}-spin {
+ animation-name: #{$fa-css-prefix}-spin;
+ animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 2s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
+}
+
+.#{$fa-css-prefix}-spin-reverse {
+ --#{$fa-css-prefix}-animation-direction: reverse;
+}
+
+.#{$fa-css-prefix}-pulse,
+.#{$fa-css-prefix}-spin-pulse {
+ animation-name: #{$fa-css-prefix}-spin;
+ animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
+ animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
+ animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
+ animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, steps(8));
+}
+
+// if agent or operating system prefers reduced motion, disable animations
+// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
+// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
+@media (prefers-reduced-motion: reduce) {
+ .#{$fa-css-prefix}-beat,
+ .#{$fa-css-prefix}-bounce,
+ .#{$fa-css-prefix}-fade,
+ .#{$fa-css-prefix}-beat-fade,
+ .#{$fa-css-prefix}-flip,
+ .#{$fa-css-prefix}-pulse,
+ .#{$fa-css-prefix}-shake,
+ .#{$fa-css-prefix}-spin,
+ .#{$fa-css-prefix}-spin-pulse {
+ animation-delay: -1ms;
+ animation-duration: 1ms;
+ animation-iteration-count: 1;
+ transition-delay: 0s;
+ transition-duration: 0s;
+ }
+}
+
+@keyframes #{$fa-css-prefix}-beat {
+ 0%,
+ 90% {
+ transform: scale(1);
+ }
+ 45% {
+ transform: scale(var(--#{$fa-css-prefix}-beat-scale, 1.25));
+ }
+}
+
+@keyframes #{$fa-css-prefix}-bounce {
+ 0% {
+ transform: scale(1, 1) translateY(0);
+ }
+ 10% {
+ transform: scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1), var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9)) translateY(0);
+ }
+ 30% {
+ transform: scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9), var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1))
+ translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em));
+ }
+ 50% {
+ transform: scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05), var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95)) translateY(0);
+ }
+ 57% {
+ transform: scale(1, 1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em));
+ }
+ 64% {
+ transform: scale(1, 1) translateY(0);
+ }
+ 100% {
+ transform: scale(1, 1) translateY(0);
+ }
+}
+
+@keyframes #{$fa-css-prefix}-fade {
+ 50% {
+ opacity: var(--#{$fa-css-prefix}-fade-opacity, 0.4);
+ }
+}
+
+@keyframes #{$fa-css-prefix}-beat-fade {
+ 0%,
+ 100% {
+ opacity: var(--#{$fa-css-prefix}-beat-fade-opacity, 0.4);
+ transform: scale(1);
+ }
+ 50% {
+ opacity: 1;
+ transform: scale(var(--#{$fa-css-prefix}-beat-fade-scale, 1.125));
+ }
+}
+
+@keyframes #{$fa-css-prefix}-flip {
+ 50% {
+ transform: rotate3d(
+ var(--#{$fa-css-prefix}-flip-x, 0),
+ var(--#{$fa-css-prefix}-flip-y, 1),
+ var(--#{$fa-css-prefix}-flip-z, 0),
+ var(--#{$fa-css-prefix}-flip-angle, -180deg)
+ );
+ }
+}
+
+@keyframes #{$fa-css-prefix}-shake {
+ 0% {
+ transform: rotate(-15deg);
+ }
+ 4% {
+ transform: rotate(15deg);
+ }
+ 8%,
+ 24% {
+ transform: rotate(-18deg);
+ }
+ 12%,
+ 28% {
+ transform: rotate(18deg);
+ }
+ 16% {
+ transform: rotate(-22deg);
+ }
+ 20% {
+ transform: rotate(22deg);
+ }
+ 32% {
+ transform: rotate(-12deg);
+ }
+ 36% {
+ transform: rotate(12deg);
+ }
+ 40%,
+ 100% {
+ transform: rotate(0deg);
+ }
+}
+
+@keyframes #{$fa-css-prefix}-spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
diff --git a/_sass/font-awesome/_bordered-pulled.scss b/_sass/font-awesome/_bordered-pulled.scss
index 02fc019f..befdc455 100644
--- a/_sass/font-awesome/_bordered-pulled.scss
+++ b/_sass/font-awesome/_bordered-pulled.scss
@@ -1,20 +1,20 @@
-// bordered + pulled icons
-// -------------------------
-
-.#{$fa-css-prefix}-border {
- border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color});
- border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius});
- border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style});
- border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width});
- padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding});
-}
-
-.#{$fa-css-prefix}-pull-left {
- float: left;
- margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
-}
-
-.#{$fa-css-prefix}-pull-right {
- float: right;
- margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
-}
+// bordered + pulled icons
+// -------------------------
+
+.#{$fa-css-prefix}-border {
+ border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color});
+ border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius});
+ border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style});
+ border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width});
+ padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding});
+}
+
+.#{$fa-css-prefix}-pull-left {
+ float: left;
+ margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
+}
+
+.#{$fa-css-prefix}-pull-right {
+ float: right;
+ margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
+}
diff --git a/_sass/font-awesome/_core.scss b/_sass/font-awesome/_core.scss
index c4a588c7..ea89d380 100644
--- a/_sass/font-awesome/_core.scss
+++ b/_sass/font-awesome/_core.scss
@@ -1,42 +1,42 @@
-// base icon class definition
-// -------------------------
-
-.#{$fa-css-prefix} {
- font-family: var(--#{$fa-css-prefix}-style-family, "#{$fa-style-family}");
- font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style});
-}
-
-.#{$fa-css-prefix},
-.#{$fa-css-prefix}-classic,
-.#{$fa-css-prefix}-sharp,
-.fas,
-.#{$fa-css-prefix}-solid,
-.far,
-.#{$fa-css-prefix}-regular,
-.fab,
-.#{$fa-css-prefix}-brands {
- -moz-osx-font-smoothing: grayscale;
- -webkit-font-smoothing: antialiased;
- display: var(--#{$fa-css-prefix}-display, #{$fa-display});
- font-style: normal;
- font-variant: normal;
- line-height: 1;
- text-rendering: auto;
-}
-
-.fas,
-.#{$fa-css-prefix}-classic,
-.#{$fa-css-prefix}-solid,
-.far,
-.#{$fa-css-prefix}-regular {
- font-family: "Font Awesome 6 Free";
-}
-
-.fab,
-.#{$fa-css-prefix}-brands {
- font-family: "Font Awesome 6 Brands";
-}
-
-%fa-icon {
- @include fa-icon;
-}
+// base icon class definition
+// -------------------------
+
+.#{$fa-css-prefix} {
+ font-family: var(--#{$fa-css-prefix}-style-family, "#{$fa-style-family}");
+ font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style});
+}
+
+.#{$fa-css-prefix},
+.#{$fa-css-prefix}-classic,
+.#{$fa-css-prefix}-sharp,
+.fas,
+.#{$fa-css-prefix}-solid,
+.far,
+.#{$fa-css-prefix}-regular,
+.fab,
+.#{$fa-css-prefix}-brands {
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ display: var(--#{$fa-css-prefix}-display, #{$fa-display});
+ font-style: normal;
+ font-variant: normal;
+ line-height: 1;
+ text-rendering: auto;
+}
+
+.fas,
+.#{$fa-css-prefix}-classic,
+.#{$fa-css-prefix}-solid,
+.far,
+.#{$fa-css-prefix}-regular {
+ font-family: "Font Awesome 6 Free";
+}
+
+.fab,
+.#{$fa-css-prefix}-brands {
+ font-family: "Font Awesome 6 Brands";
+}
+
+%fa-icon {
+ @include fa-icon;
+}
diff --git a/_sass/font-awesome/_fixed-width.scss b/_sass/font-awesome/_fixed-width.scss
index 1a40e0e2..72342368 100644
--- a/_sass/font-awesome/_fixed-width.scss
+++ b/_sass/font-awesome/_fixed-width.scss
@@ -1,7 +1,7 @@
-// fixed-width icons
-// -------------------------
-
-.#{$fa-css-prefix}-fw {
- text-align: center;
- width: $fa-fw-width;
-}
+// fixed-width icons
+// -------------------------
+
+.#{$fa-css-prefix}-fw {
+ text-align: center;
+ width: $fa-fw-width;
+}
diff --git a/_sass/font-awesome/_functions.scss b/_sass/font-awesome/_functions.scss
index 479e5069..eca440cc 100644
--- a/_sass/font-awesome/_functions.scss
+++ b/_sass/font-awesome/_functions.scss
@@ -1,57 +1,57 @@
-// functions
-// --------------------------
-
-// fa-content: convenience function used to set content property
-@function fa-content($fa-var) {
- @return unquote('"#{ $fa-var }"');
-}
-
-// fa-divide: Originally obtained from the Bootstrap https://github.com/twbs/bootstrap
-//
-// Licensed under: The MIT License (MIT)
-//
-// Copyright (c) 2011-2021 Twitter, Inc.
-// Copyright (c) 2011-2021 The Bootstrap Authors
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-@function fa-divide($dividend, $divisor, $precision: 10) {
- $sign: if($dividend > 0 and $divisor > 0, 1, -1);
- $dividend: abs($dividend);
- $divisor: abs($divisor);
- $quotient: 0;
- $remainder: $dividend;
- @if $dividend == 0 {
- @return 0;
- }
- @if $divisor == 0 {
- @error "Cannot divide by 0";
- }
- @if $divisor == 1 {
- @return $dividend;
- }
- @while $remainder >= $divisor {
- $quotient: $quotient + 1;
- $remainder: $remainder - $divisor;
- }
- @if $remainder > 0 and $precision > 0 {
- $remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * 0.1;
- }
- @return ($quotient + $remainder) * $sign;
-}
+// functions
+// --------------------------
+
+// fa-content: convenience function used to set content property
+@function fa-content($fa-var) {
+ @return unquote('"#{ $fa-var }"');
+}
+
+// fa-divide: Originally obtained from the Bootstrap https://github.com/twbs/bootstrap
+//
+// Licensed under: The MIT License (MIT)
+//
+// Copyright (c) 2011-2021 Twitter, Inc.
+// Copyright (c) 2011-2021 The Bootstrap Authors
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+@function fa-divide($dividend, $divisor, $precision: 10) {
+ $sign: if($dividend > 0 and $divisor > 0, 1, -1);
+ $dividend: abs($dividend);
+ $divisor: abs($divisor);
+ $quotient: 0;
+ $remainder: $dividend;
+ @if $dividend == 0 {
+ @return 0;
+ }
+ @if $divisor == 0 {
+ @error "Cannot divide by 0";
+ }
+ @if $divisor == 1 {
+ @return $dividend;
+ }
+ @while $remainder >= $divisor {
+ $quotient: $quotient + 1;
+ $remainder: $remainder - $divisor;
+ }
+ @if $remainder > 0 and $precision > 0 {
+ $remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * 0.1;
+ }
+ @return ($quotient + $remainder) * $sign;
+}
diff --git a/_sass/font-awesome/_icons.scss b/_sass/font-awesome/_icons.scss
index 3a20b946..b565cf86 100644
--- a/_sass/font-awesome/_icons.scss
+++ b/_sass/font-awesome/_icons.scss
@@ -1,11 +1,11 @@
-// specific icon class definition
-// -------------------------
-
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-readers do not read off random characters that represent icons */
-
-@each $name, $icon in $fa-icons {
- .#{$fa-css-prefix}-#{$name}::before {
- content: unquote('"#{ $icon }"');
- }
-}
+// specific icon class definition
+// -------------------------
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+readers do not read off random characters that represent icons */
+
+@each $name, $icon in $fa-icons {
+ .#{$fa-css-prefix}-#{$name}::before {
+ content: unquote('"#{ $icon }"');
+ }
+}
diff --git a/_sass/font-awesome/_list.scss b/_sass/font-awesome/_list.scss
index caa28c4b..8a2a58c3 100644
--- a/_sass/font-awesome/_list.scss
+++ b/_sass/font-awesome/_list.scss
@@ -1,20 +1,20 @@
-// icons in a list
-// -------------------------
-
-.#{$fa-css-prefix}-ul {
- list-style-type: none;
- margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin});
- padding-left: 0;
-
- > li {
- position: relative;
- }
-}
-
-.#{$fa-css-prefix}-li {
- left: calc(var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}) * -1);
- position: absolute;
- text-align: center;
- width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width});
- line-height: inherit;
-}
+// icons in a list
+// -------------------------
+
+.#{$fa-css-prefix}-ul {
+ list-style-type: none;
+ margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin});
+ padding-left: 0;
+
+ > li {
+ position: relative;
+ }
+}
+
+.#{$fa-css-prefix}-li {
+ left: calc(var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}) * -1);
+ position: absolute;
+ text-align: center;
+ width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width});
+ line-height: inherit;
+}
diff --git a/_sass/font-awesome/_mixins.scss b/_sass/font-awesome/_mixins.scss
index 9cfc43d0..61e11566 100644
--- a/_sass/font-awesome/_mixins.scss
+++ b/_sass/font-awesome/_mixins.scss
@@ -1,74 +1,74 @@
-// mixins
-// --------------------------
-
-// base rendering for an icon
-@mixin fa-icon {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- font-style: normal;
- font-variant: normal;
- font-weight: normal;
- line-height: 1;
-}
-
-// sets relative font-sizing and alignment (in _sizing)
-@mixin fa-size($font-size) {
- font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
- line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent
- vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
-}
-
-// only display content to screen readers
-// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
-// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
-@mixin fa-sr-only() {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border-width: 0;
-}
-
-// use in conjunction with .sr-only to only display content when it's focused
-@mixin fa-sr-only-focusable() {
- &:not(:focus) {
- @include fa-sr-only();
- }
-}
-
-// sets a specific icon family to use alongside style + icon mixins
-
-// convenience mixins for declaring pseudo-elements by CSS variable,
-// including all style-specific font properties, and both the ::before
-// and ::after elements in the duotone case.
-@mixin fa-icon-solid($fa-var) {
- @extend %fa-icon;
- @extend .fa-solid;
-
- &::before {
- content: unquote('"#{ $fa-var }"');
- }
-}
-
-@mixin fa-icon-regular($fa-var) {
- @extend %fa-icon;
- @extend .fa-regular;
-
- &::before {
- content: unquote('"#{ $fa-var }"');
- }
-}
-
-@mixin fa-icon-brands($fa-var) {
- @extend %fa-icon;
- @extend .fa-brands;
-
- &::before {
- content: unquote('"#{ $fa-var }"');
- }
-}
+// mixins
+// --------------------------
+
+// base rendering for an icon
+@mixin fa-icon {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ display: inline-block;
+ font-style: normal;
+ font-variant: normal;
+ font-weight: normal;
+ line-height: 1;
+}
+
+// sets relative font-sizing and alignment (in _sizing)
+@mixin fa-size($font-size) {
+ font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
+ line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent
+ vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
+}
+
+// only display content to screen readers
+// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
+// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
+@mixin fa-sr-only() {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0;
+}
+
+// use in conjunction with .sr-only to only display content when it's focused
+@mixin fa-sr-only-focusable() {
+ &:not(:focus) {
+ @include fa-sr-only();
+ }
+}
+
+// sets a specific icon family to use alongside style + icon mixins
+
+// convenience mixins for declaring pseudo-elements by CSS variable,
+// including all style-specific font properties, and both the ::before
+// and ::after elements in the duotone case.
+@mixin fa-icon-solid($fa-var) {
+ @extend %fa-icon;
+ @extend .fa-solid;
+
+ &::before {
+ content: unquote('"#{ $fa-var }"');
+ }
+}
+
+@mixin fa-icon-regular($fa-var) {
+ @extend %fa-icon;
+ @extend .fa-regular;
+
+ &::before {
+ content: unquote('"#{ $fa-var }"');
+ }
+}
+
+@mixin fa-icon-brands($fa-var) {
+ @extend %fa-icon;
+ @extend .fa-brands;
+
+ &::before {
+ content: unquote('"#{ $fa-var }"');
+ }
+}
diff --git a/_sass/font-awesome/_rotated-flipped.scss b/_sass/font-awesome/_rotated-flipped.scss
index 4886ebf3..de479c0e 100644
--- a/_sass/font-awesome/_rotated-flipped.scss
+++ b/_sass/font-awesome/_rotated-flipped.scss
@@ -1,31 +1,31 @@
-// rotating + flipping icons
-// -------------------------
-
-.#{$fa-css-prefix}-rotate-90 {
- transform: rotate(90deg);
-}
-
-.#{$fa-css-prefix}-rotate-180 {
- transform: rotate(180deg);
-}
-
-.#{$fa-css-prefix}-rotate-270 {
- transform: rotate(270deg);
-}
-
-.#{$fa-css-prefix}-flip-horizontal {
- transform: scale(-1, 1);
-}
-
-.#{$fa-css-prefix}-flip-vertical {
- transform: scale(1, -1);
-}
-
-.#{$fa-css-prefix}-flip-both,
-.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical {
- transform: scale(-1, -1);
-}
-
-.#{$fa-css-prefix}-rotate-by {
- transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, none));
-}
+// rotating + flipping icons
+// -------------------------
+
+.#{$fa-css-prefix}-rotate-90 {
+ transform: rotate(90deg);
+}
+
+.#{$fa-css-prefix}-rotate-180 {
+ transform: rotate(180deg);
+}
+
+.#{$fa-css-prefix}-rotate-270 {
+ transform: rotate(270deg);
+}
+
+.#{$fa-css-prefix}-flip-horizontal {
+ transform: scale(-1, 1);
+}
+
+.#{$fa-css-prefix}-flip-vertical {
+ transform: scale(1, -1);
+}
+
+.#{$fa-css-prefix}-flip-both,
+.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical {
+ transform: scale(-1, -1);
+}
+
+.#{$fa-css-prefix}-rotate-by {
+ transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, none));
+}
diff --git a/_sass/font-awesome/_screen-reader.scss b/_sass/font-awesome/_screen-reader.scss
index 01ac072e..2beb887b 100644
--- a/_sass/font-awesome/_screen-reader.scss
+++ b/_sass/font-awesome/_screen-reader.scss
@@ -1,14 +1,14 @@
-// screen-reader utilities
-// -------------------------
-
-// only display content to screen readers
-.sr-only,
-.#{$fa-css-prefix}-sr-only {
- @include fa-sr-only;
-}
-
-// use in conjunction with .sr-only to only display content when it's focused
-.sr-only-focusable,
-.#{$fa-css-prefix}-sr-only-focusable {
- @include fa-sr-only-focusable;
-}
+// screen-reader utilities
+// -------------------------
+
+// only display content to screen readers
+.sr-only,
+.#{$fa-css-prefix}-sr-only {
+ @include fa-sr-only;
+}
+
+// use in conjunction with .sr-only to only display content when it's focused
+.sr-only-focusable,
+.#{$fa-css-prefix}-sr-only-focusable {
+ @include fa-sr-only-focusable;
+}
diff --git a/_sass/font-awesome/_shims.scss b/_sass/font-awesome/_shims.scss
index 1ebb6dda..a8f17b37 100644
--- a/_sass/font-awesome/_shims.scss
+++ b/_sass/font-awesome/_shims.scss
@@ -1,2653 +1,2653 @@
-.#{$fa-css-prefix}.#{$fa-css-prefix}-glass:before {
- content: unquote('"#{ $fa-var-martini-glass-empty }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o:before {
- content: unquote('"#{ $fa-var-envelope }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o:before {
- content: unquote('"#{ $fa-var-star }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-remove:before {
- content: unquote('"#{ $fa-var-xmark }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-close:before {
- content: unquote('"#{ $fa-var-xmark }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gear:before {
- content: unquote('"#{ $fa-var-gear }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o:before {
- content: unquote('"#{ $fa-var-trash-can }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-home:before {
- content: unquote('"#{ $fa-var-house }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o:before {
- content: unquote('"#{ $fa-var-file }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o:before {
- content: unquote('"#{ $fa-var-clock }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down:before {
- content: unquote('"#{ $fa-var-circle-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up:before {
- content: unquote('"#{ $fa-var-circle-up }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o:before {
- content: unquote('"#{ $fa-var-circle-play }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-repeat:before {
- content: unquote('"#{ $fa-var-arrow-rotate-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-right:before {
- content: unquote('"#{ $fa-var-arrow-rotate-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-refresh:before {
- content: unquote('"#{ $fa-var-arrows-rotate }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt:before {
- content: unquote('"#{ $fa-var-rectangle-list }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-dedent:before {
- content: unquote('"#{ $fa-var-outdent }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-video-camera:before {
- content: unquote('"#{ $fa-var-video }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o:before {
- content: unquote('"#{ $fa-var-image }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-photo {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-photo:before {
- content: unquote('"#{ $fa-var-image }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-image {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-image:before {
- content: unquote('"#{ $fa-var-image }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-map-marker:before {
- content: unquote('"#{ $fa-var-location-dot }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o:before {
- content: unquote('"#{ $fa-var-pen-to-square }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-edit {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-edit:before {
- content: unquote('"#{ $fa-var-pen-to-square }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-share-square-o:before {
- content: unquote('"#{ $fa-var-share-from-square }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o:before {
- content: unquote('"#{ $fa-var-square-check }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows:before {
- content: unquote('"#{ $fa-var-up-down-left-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o:before {
- content: unquote('"#{ $fa-var-circle-xmark }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o:before {
- content: unquote('"#{ $fa-var-circle-check }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-forward:before {
- content: unquote('"#{ $fa-var-share }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-expand:before {
- content: unquote('"#{ $fa-var-up-right-and-down-left-from-center }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-compress:before {
- content: unquote('"#{ $fa-var-down-left-and-up-right-to-center }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-eye {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-eye-slash {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-warning:before {
- content: unquote('"#{ $fa-var-triangle-exclamation }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar:before {
- content: unquote('"#{ $fa-var-calendar-days }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-v:before {
- content: unquote('"#{ $fa-var-up-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-h:before {
- content: unquote('"#{ $fa-var-left-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart:before {
- content: unquote('"#{ $fa-var-chart-column }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart-o:before {
- content: unquote('"#{ $fa-var-chart-column }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square:before {
- content: unquote('"#{ $fa-var-square-twitter }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square:before {
- content: unquote('"#{ $fa-var-square-facebook }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gears:before {
- content: unquote('"#{ $fa-var-gears }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up:before {
- content: unquote('"#{ $fa-var-thumbs-up }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down:before {
- content: unquote('"#{ $fa-var-thumbs-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o:before {
- content: unquote('"#{ $fa-var-heart }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-out:before {
- content: unquote('"#{ $fa-var-right-from-bracket }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square:before {
- content: unquote('"#{ $fa-var-linkedin }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thumb-tack:before {
- content: unquote('"#{ $fa-var-thumbtack }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link:before {
- content: unquote('"#{ $fa-var-up-right-from-square }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-in:before {
- content: unquote('"#{ $fa-var-right-to-bracket }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-github-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-github-square:before {
- content: unquote('"#{ $fa-var-square-github }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o:before {
- content: unquote('"#{ $fa-var-lemon }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o:before {
- content: unquote('"#{ $fa-var-square }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o:before {
- content: unquote('"#{ $fa-var-bookmark }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook:before {
- content: unquote('"#{ $fa-var-facebook-f }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f:before {
- content: unquote('"#{ $fa-var-facebook-f }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-github {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-feed:before {
- content: unquote('"#{ $fa-var-rss }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o:before {
- content: unquote('"#{ $fa-var-hard-drive }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right:before {
- content: unquote('"#{ $fa-var-hand-point-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left:before {
- content: unquote('"#{ $fa-var-hand-point-left }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up:before {
- content: unquote('"#{ $fa-var-hand-point-up }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down:before {
- content: unquote('"#{ $fa-var-hand-point-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-globe:before {
- content: unquote('"#{ $fa-var-earth-americas }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-tasks:before {
- content: unquote('"#{ $fa-var-bars-progress }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-alt:before {
- content: unquote('"#{ $fa-var-maximize }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-group:before {
- content: unquote('"#{ $fa-var-users }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-chain:before {
- content: unquote('"#{ $fa-var-link }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cut:before {
- content: unquote('"#{ $fa-var-scissors }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o:before {
- content: unquote('"#{ $fa-var-copy }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o:before {
- content: unquote('"#{ $fa-var-floppy-disk }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-save {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-save:before {
- content: unquote('"#{ $fa-var-floppy-disk }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-navicon:before {
- content: unquote('"#{ $fa-var-bars }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-reorder:before {
- content: unquote('"#{ $fa-var-bars }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-magic:before {
- content: unquote('"#{ $fa-var-wand-magic-sparkles }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square:before {
- content: unquote('"#{ $fa-var-square-pinterest }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square:before {
- content: unquote('"#{ $fa-var-square-google-plus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus:before {
- content: unquote('"#{ $fa-var-google-plus-g }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-money:before {
- content: unquote('"#{ $fa-var-money-bill-1 }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-unsorted:before {
- content: unquote('"#{ $fa-var-sort }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-desc:before {
- content: unquote('"#{ $fa-var-sort-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-asc:before {
- content: unquote('"#{ $fa-var-sort-up }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin:before {
- content: unquote('"#{ $fa-var-linkedin-in }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-left:before {
- content: unquote('"#{ $fa-var-arrow-rotate-left }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-legal:before {
- content: unquote('"#{ $fa-var-gavel }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-tachometer:before {
- content: unquote('"#{ $fa-var-gauge-high }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-dashboard:before {
- content: unquote('"#{ $fa-var-gauge-high }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o:before {
- content: unquote('"#{ $fa-var-comment }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o:before {
- content: unquote('"#{ $fa-var-comments }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-flash:before {
- content: unquote('"#{ $fa-var-bolt }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-clipboard:before {
- content: unquote('"#{ $fa-var-paste }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o:before {
- content: unquote('"#{ $fa-var-lightbulb }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-exchange:before {
- content: unquote('"#{ $fa-var-right-left }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-download:before {
- content: unquote('"#{ $fa-var-cloud-arrow-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-upload:before {
- content: unquote('"#{ $fa-var-cloud-arrow-up }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o:before {
- content: unquote('"#{ $fa-var-bell }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cutlery:before {
- content: unquote('"#{ $fa-var-utensils }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o:before {
- content: unquote('"#{ $fa-var-file-lines }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o:before {
- content: unquote('"#{ $fa-var-building }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o:before {
- content: unquote('"#{ $fa-var-hospital }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-tablet:before {
- content: unquote('"#{ $fa-var-tablet-screen-button }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile:before {
- content: unquote('"#{ $fa-var-mobile-screen-button }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile-phone:before {
- content: unquote('"#{ $fa-var-mobile-screen-button }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o:before {
- content: unquote('"#{ $fa-var-circle }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply:before {
- content: unquote('"#{ $fa-var-reply }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-github-alt {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o:before {
- content: unquote('"#{ $fa-var-folder }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o:before {
- content: unquote('"#{ $fa-var-folder-open }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o:before {
- content: unquote('"#{ $fa-var-face-smile }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o:before {
- content: unquote('"#{ $fa-var-face-frown }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o:before {
- content: unquote('"#{ $fa-var-face-meh }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o:before {
- content: unquote('"#{ $fa-var-keyboard }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o:before {
- content: unquote('"#{ $fa-var-flag }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply-all:before {
- content: unquote('"#{ $fa-var-reply-all }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o:before {
- content: unquote('"#{ $fa-var-star-half-stroke }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty:before {
- content: unquote('"#{ $fa-var-star-half-stroke }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full:before {
- content: unquote('"#{ $fa-var-star-half-stroke }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-code-fork:before {
- content: unquote('"#{ $fa-var-code-branch }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-chain-broken:before {
- content: unquote('"#{ $fa-var-link-slash }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-unlink:before {
- content: unquote('"#{ $fa-var-link-slash }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o:before {
- content: unquote('"#{ $fa-var-calendar }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-maxcdn {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-html5 {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-css3 {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-unlock-alt:before {
- content: unquote('"#{ $fa-var-unlock }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o:before {
- content: unquote('"#{ $fa-var-square-minus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-level-up:before {
- content: unquote('"#{ $fa-var-turn-up }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-level-down:before {
- content: unquote('"#{ $fa-var-turn-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square:before {
- content: unquote('"#{ $fa-var-square-pen }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link-square:before {
- content: unquote('"#{ $fa-var-square-up-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-compass {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down:before {
- content: unquote('"#{ $fa-var-square-caret-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down:before {
- content: unquote('"#{ $fa-var-square-caret-down }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up:before {
- content: unquote('"#{ $fa-var-square-caret-up }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up:before {
- content: unquote('"#{ $fa-var-square-caret-up }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right:before {
- content: unquote('"#{ $fa-var-square-caret-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right:before {
- content: unquote('"#{ $fa-var-square-caret-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-eur:before {
- content: unquote('"#{ $fa-var-euro-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-euro:before {
- content: unquote('"#{ $fa-var-euro-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gbp:before {
- content: unquote('"#{ $fa-var-sterling-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-usd:before {
- content: unquote('"#{ $fa-var-dollar-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-dollar:before {
- content: unquote('"#{ $fa-var-dollar-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-inr:before {
- content: unquote('"#{ $fa-var-indian-rupee-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-rupee:before {
- content: unquote('"#{ $fa-var-indian-rupee-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-jpy:before {
- content: unquote('"#{ $fa-var-yen-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cny:before {
- content: unquote('"#{ $fa-var-yen-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-rmb:before {
- content: unquote('"#{ $fa-var-yen-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-yen:before {
- content: unquote('"#{ $fa-var-yen-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-rub:before {
- content: unquote('"#{ $fa-var-ruble-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-ruble:before {
- content: unquote('"#{ $fa-var-ruble-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-rouble:before {
- content: unquote('"#{ $fa-var-ruble-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-krw:before {
- content: unquote('"#{ $fa-var-won-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-won:before {
- content: unquote('"#{ $fa-var-won-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-btc {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin:before {
- content: unquote('"#{ $fa-var-btc }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text:before {
- content: unquote('"#{ $fa-var-file-lines }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-asc:before {
- content: unquote('"#{ $fa-var-arrow-down-a-z }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-desc:before {
- content: unquote('"#{ $fa-var-arrow-down-z-a }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-asc:before {
- content: unquote('"#{ $fa-var-arrow-down-short-wide }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-desc:before {
- content: unquote('"#{ $fa-var-arrow-down-wide-short }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-asc:before {
- content: unquote('"#{ $fa-var-arrow-down-1-9 }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-desc:before {
- content: unquote('"#{ $fa-var-arrow-down-9-1 }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square:before {
- content: unquote('"#{ $fa-var-square-youtube }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-xing {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square:before {
- content: unquote('"#{ $fa-var-square-xing }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play:before {
- content: unquote('"#{ $fa-var-youtube }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-dropbox {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-overflow {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-instagram {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-flickr {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-adn {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square:before {
- content: unquote('"#{ $fa-var-bitbucket }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square:before {
- content: unquote('"#{ $fa-var-square-tumblr }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-down:before {
- content: unquote('"#{ $fa-var-down-long }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-up:before {
- content: unquote('"#{ $fa-var-up-long }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-left:before {
- content: unquote('"#{ $fa-var-left-long }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-right:before {
- content: unquote('"#{ $fa-var-right-long }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-apple {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-windows {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-android {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-linux {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-dribbble {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-skype {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-foursquare {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-trello {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gratipay {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip:before {
- content: unquote('"#{ $fa-var-gratipay }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o:before {
- content: unquote('"#{ $fa-var-sun }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o:before {
- content: unquote('"#{ $fa-var-moon }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vk {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-weibo {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-renren {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pagelines {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-exchange {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right:before {
- content: unquote('"#{ $fa-var-circle-right }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left:before {
- content: unquote('"#{ $fa-var-circle-left }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left:before {
- content: unquote('"#{ $fa-var-square-caret-left }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left:before {
- content: unquote('"#{ $fa-var-square-caret-left }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o:before {
- content: unquote('"#{ $fa-var-circle-dot }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square:before {
- content: unquote('"#{ $fa-var-square-vimeo }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-try:before {
- content: unquote('"#{ $fa-var-turkish-lira-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-turkish-lira:before {
- content: unquote('"#{ $fa-var-turkish-lira-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o:before {
- content: unquote('"#{ $fa-var-square-plus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-slack {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wordpress {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-openid {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-institution:before {
- content: unquote('"#{ $fa-var-building-columns }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bank:before {
- content: unquote('"#{ $fa-var-building-columns }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-mortar-board:before {
- content: unquote('"#{ $fa-var-graduation-cap }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-yahoo {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square:before {
- content: unquote('"#{ $fa-var-square-reddit }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon-circle {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-delicious {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-digg {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-pp {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-alt {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-drupal {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-joomla {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-behance {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square:before {
- content: unquote('"#{ $fa-var-square-behance }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-steam {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square:before {
- content: unquote('"#{ $fa-var-square-steam }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-automobile:before {
- content: unquote('"#{ $fa-var-car }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cab:before {
- content: unquote('"#{ $fa-var-taxi }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-spotify {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-deviantart {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-soundcloud {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o:before {
- content: unquote('"#{ $fa-var-file-pdf }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o:before {
- content: unquote('"#{ $fa-var-file-word }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o:before {
- content: unquote('"#{ $fa-var-file-excel }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o:before {
- content: unquote('"#{ $fa-var-file-powerpoint }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o:before {
- content: unquote('"#{ $fa-var-file-image }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o:before {
- content: unquote('"#{ $fa-var-file-image }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o:before {
- content: unquote('"#{ $fa-var-file-image }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o:before {
- content: unquote('"#{ $fa-var-file-zipper }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o:before {
- content: unquote('"#{ $fa-var-file-zipper }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o:before {
- content: unquote('"#{ $fa-var-file-audio }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o:before {
- content: unquote('"#{ $fa-var-file-audio }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o:before {
- content: unquote('"#{ $fa-var-file-video }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o:before {
- content: unquote('"#{ $fa-var-file-video }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o:before {
- content: unquote('"#{ $fa-var-file-code }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vine {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-codepen {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-jsfiddle {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-life-bouy:before {
- content: unquote('"#{ $fa-var-life-ring }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-life-buoy:before {
- content: unquote('"#{ $fa-var-life-ring }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-life-saver:before {
- content: unquote('"#{ $fa-var-life-ring }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-support:before {
- content: unquote('"#{ $fa-var-life-ring }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o-notch:before {
- content: unquote('"#{ $fa-var-circle-notch }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-rebel {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-ra {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-ra:before {
- content: unquote('"#{ $fa-var-rebel }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance:before {
- content: unquote('"#{ $fa-var-rebel }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-empire {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-ge {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-ge:before {
- content: unquote('"#{ $fa-var-empire }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-git-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-git-square:before {
- content: unquote('"#{ $fa-var-square-git }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-git {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hacker-news {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square:before {
- content: unquote('"#{ $fa-var-hacker-news }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square:before {
- content: unquote('"#{ $fa-var-hacker-news }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-tencent-weibo {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-qq {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-weixin {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat:before {
- content: unquote('"#{ $fa-var-weixin }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-send:before {
- content: unquote('"#{ $fa-var-paper-plane }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o:before {
- content: unquote('"#{ $fa-var-paper-plane }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o:before {
- content: unquote('"#{ $fa-var-paper-plane }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin:before {
- content: unquote('"#{ $fa-var-circle }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-header:before {
- content: unquote('"#{ $fa-var-heading }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o:before {
- content: unquote('"#{ $fa-var-futbol }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o:before {
- content: unquote('"#{ $fa-var-futbol }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-slideshare {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-twitch {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-yelp {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o:before {
- content: unquote('"#{ $fa-var-newspaper }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-paypal {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-wallet {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-visa {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-mastercard {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-discover {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-amex {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-paypal {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-stripe {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o:before {
- content: unquote('"#{ $fa-var-bell-slash }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-trash:before {
- content: unquote('"#{ $fa-var-trash-can }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-copyright {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-eyedropper:before {
- content: unquote('"#{ $fa-var-eye-dropper }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-area-chart:before {
- content: unquote('"#{ $fa-var-chart-area }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pie-chart:before {
- content: unquote('"#{ $fa-var-chart-pie }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-line-chart:before {
- content: unquote('"#{ $fa-var-chart-line }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square:before {
- content: unquote('"#{ $fa-var-square-lastfm }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-ioxhost {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-angellist {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc:before {
- content: unquote('"#{ $fa-var-closed-captioning }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-ils:before {
- content: unquote('"#{ $fa-var-shekel-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-shekel:before {
- content: unquote('"#{ $fa-var-shekel-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sheqel:before {
- content: unquote('"#{ $fa-var-shekel-sign }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-buysellads {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-connectdevelop {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-dashcube {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-forumbee {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-leanpub {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sellsy {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-shirtsinbulk {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-simplybuilt {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-skyatlas {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond:before {
- content: unquote('"#{ $fa-var-gem }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-transgender:before {
- content: unquote('"#{ $fa-var-mars-and-venus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-intersex:before {
- content: unquote('"#{ $fa-var-mars-and-venus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-transgender-alt:before {
- content: unquote('"#{ $fa-var-transgender }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official:before {
- content: unquote('"#{ $fa-var-facebook }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-p {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-whatsapp {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hotel:before {
- content: unquote('"#{ $fa-var-bed }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-viacoin {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-medium {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-yc {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-yc:before {
- content: unquote('"#{ $fa-var-y-combinator }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-optin-monster {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-opencart {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-expeditedssl {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-4:before {
- content: unquote('"#{ $fa-var-battery-full }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-battery:before {
- content: unquote('"#{ $fa-var-battery-full }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-3:before {
- content: unquote('"#{ $fa-var-battery-three-quarters }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-2:before {
- content: unquote('"#{ $fa-var-battery-half }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-1:before {
- content: unquote('"#{ $fa-var-battery-quarter }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-0:before {
- content: unquote('"#{ $fa-var-battery-empty }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-object-group {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-object-ungroup {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o:before {
- content: unquote('"#{ $fa-var-note-sticky }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-jcb {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-diners-club {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-clone {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-o:before {
- content: unquote('"#{ $fa-var-hourglass }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-1:before {
- content: unquote('"#{ $fa-var-hourglass-start }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-2:before {
- content: unquote('"#{ $fa-var-hourglass-half }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-3:before {
- content: unquote('"#{ $fa-var-hourglass-end }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o:before {
- content: unquote('"#{ $fa-var-hand-back-fist }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o:before {
- content: unquote('"#{ $fa-var-hand-back-fist }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o:before {
- content: unquote('"#{ $fa-var-hand }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o:before {
- content: unquote('"#{ $fa-var-hand }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o:before {
- content: unquote('"#{ $fa-var-hand-scissors }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o:before {
- content: unquote('"#{ $fa-var-hand-lizard }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o:before {
- content: unquote('"#{ $fa-var-hand-spock }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o:before {
- content: unquote('"#{ $fa-var-hand-pointer }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o:before {
- content: unquote('"#{ $fa-var-hand-peace }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-registered {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-creative-commons {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gg {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gg-circle {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square:before {
- content: unquote('"#{ $fa-var-square-odnoklassniki }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-get-pocket {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wikipedia-w {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-safari {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-chrome {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-firefox {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-opera {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-internet-explorer {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-television:before {
- content: unquote('"#{ $fa-var-tv }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-contao {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-500px {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-amazon {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o:before {
- content: unquote('"#{ $fa-var-calendar-plus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o:before {
- content: unquote('"#{ $fa-var-calendar-minus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o:before {
- content: unquote('"#{ $fa-var-calendar-xmark }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o:before {
- content: unquote('"#{ $fa-var-calendar-check }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o:before {
- content: unquote('"#{ $fa-var-map }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting:before {
- content: unquote('"#{ $fa-var-comment-dots }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o:before {
- content: unquote('"#{ $fa-var-comment-dots }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-houzz {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo:before {
- content: unquote('"#{ $fa-var-vimeo-v }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-black-tie {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-fonticons {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-alien {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-edge {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card-alt:before {
- content: unquote('"#{ $fa-var-credit-card }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-codiepie {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-modx {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-fort-awesome {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-usb {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-product-hunt {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-mixcloud {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-scribd {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o:before {
- content: unquote('"#{ $fa-var-circle-pause }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o:before {
- content: unquote('"#{ $fa-var-circle-stop }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth-b {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-gitlab {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wpbeginner {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wpforms {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-envira {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt:before {
- content: unquote('"#{ $fa-var-accessible-icon }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o:before {
- content: unquote('"#{ $fa-var-circle-question }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-volume-control-phone:before {
- content: unquote('"#{ $fa-var-phone-volume }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-asl-interpreting:before {
- content: unquote('"#{ $fa-var-hands-asl-interpreting }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-deafness:before {
- content: unquote('"#{ $fa-var-ear-deaf }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-hard-of-hearing:before {
- content: unquote('"#{ $fa-var-ear-deaf }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-glide {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-glide-g {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-signing:before {
- content: unquote('"#{ $fa-var-hands }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square:before {
- content: unquote('"#{ $fa-var-square-viadeo }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost:before {
- content: unquote('"#{ $fa-var-snapchat }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square:before {
- content: unquote('"#{ $fa-var-square-snapchat }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-first-order {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-yoast {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-themeisle {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official:before {
- content: unquote('"#{ $fa-var-google-plus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle:before {
- content: unquote('"#{ $fa-var-google-plus }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-font-awesome {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-fa {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-fa:before {
- content: unquote('"#{ $fa-var-font-awesome }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o:before {
- content: unquote('"#{ $fa-var-handshake }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o:before {
- content: unquote('"#{ $fa-var-envelope-open }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-linode {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o:before {
- content: unquote('"#{ $fa-var-address-book }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard:before {
- content: unquote('"#{ $fa-var-address-card }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o:before {
- content: unquote('"#{ $fa-var-address-card }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o:before {
- content: unquote('"#{ $fa-var-address-card }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o:before {
- content: unquote('"#{ $fa-var-circle-user }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o:before {
- content: unquote('"#{ $fa-var-user }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-id-badge {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license:before {
- content: unquote('"#{ $fa-var-id-card }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o:before {
- content: unquote('"#{ $fa-var-id-card }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o:before {
- content: unquote('"#{ $fa-var-id-card }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-quora {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-free-code-camp {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-telegram {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-4:before {
- content: unquote('"#{ $fa-var-temperature-full }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer:before {
- content: unquote('"#{ $fa-var-temperature-full }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-3:before {
- content: unquote('"#{ $fa-var-temperature-three-quarters }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-2:before {
- content: unquote('"#{ $fa-var-temperature-half }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-1:before {
- content: unquote('"#{ $fa-var-temperature-quarter }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-0:before {
- content: unquote('"#{ $fa-var-temperature-empty }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bathtub:before {
- content: unquote('"#{ $fa-var-bath }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-s15:before {
- content: unquote('"#{ $fa-var-bath }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-window-maximize {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-window-restore {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle:before {
- content: unquote('"#{ $fa-var-rectangle-xmark }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o:before {
- content: unquote('"#{ $fa-var-rectangle-xmark }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o:before {
- content: unquote('"#{ $fa-var-rectangle-xmark }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-bandcamp {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-grav {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-etsy {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-imdb {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-ravelry {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast:before {
- content: unquote('"#{ $fa-var-sellcast }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o {
- font-family: "Font Awesome 6 Free";
- font-weight: 400;
-}
-.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o:before {
- content: unquote('"#{ $fa-var-snowflake }"');
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-superpowers {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-wpexplorer {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
-
-.#{$fa-css-prefix}.#{$fa-css-prefix}-meetup {
- font-family: "Font Awesome 6 Brands";
- font-weight: 400;
-}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glass:before {
+ content: unquote('"#{ $fa-var-martini-glass-empty }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o:before {
+ content: unquote('"#{ $fa-var-envelope }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-o:before {
+ content: unquote('"#{ $fa-var-star }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-remove:before {
+ content: unquote('"#{ $fa-var-xmark }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-close:before {
+ content: unquote('"#{ $fa-var-xmark }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gear:before {
+ content: unquote('"#{ $fa-var-gear }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o:before {
+ content: unquote('"#{ $fa-var-trash-can }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-home:before {
+ content: unquote('"#{ $fa-var-house }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-o:before {
+ content: unquote('"#{ $fa-var-file }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o:before {
+ content: unquote('"#{ $fa-var-clock }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down:before {
+ content: unquote('"#{ $fa-var-circle-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up:before {
+ content: unquote('"#{ $fa-var-circle-up }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o:before {
+ content: unquote('"#{ $fa-var-circle-play }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-repeat:before {
+ content: unquote('"#{ $fa-var-arrow-rotate-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-right:before {
+ content: unquote('"#{ $fa-var-arrow-rotate-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-refresh:before {
+ content: unquote('"#{ $fa-var-arrows-rotate }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt:before {
+ content: unquote('"#{ $fa-var-rectangle-list }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dedent:before {
+ content: unquote('"#{ $fa-var-outdent }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-video-camera:before {
+ content: unquote('"#{ $fa-var-video }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o:before {
+ content: unquote('"#{ $fa-var-image }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-photo {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-photo:before {
+ content: unquote('"#{ $fa-var-image }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-image {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-image:before {
+ content: unquote('"#{ $fa-var-image }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-marker:before {
+ content: unquote('"#{ $fa-var-location-dot }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o:before {
+ content: unquote('"#{ $fa-var-pen-to-square }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-edit {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-edit:before {
+ content: unquote('"#{ $fa-var-pen-to-square }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-share-square-o:before {
+ content: unquote('"#{ $fa-var-share-from-square }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o:before {
+ content: unquote('"#{ $fa-var-square-check }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows:before {
+ content: unquote('"#{ $fa-var-up-down-left-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o:before {
+ content: unquote('"#{ $fa-var-circle-xmark }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o:before {
+ content: unquote('"#{ $fa-var-circle-check }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-forward:before {
+ content: unquote('"#{ $fa-var-share }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-expand:before {
+ content: unquote('"#{ $fa-var-up-right-and-down-left-from-center }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-compress:before {
+ content: unquote('"#{ $fa-var-down-left-and-up-right-to-center }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eye {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eye-slash {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-warning:before {
+ content: unquote('"#{ $fa-var-triangle-exclamation }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar:before {
+ content: unquote('"#{ $fa-var-calendar-days }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-v:before {
+ content: unquote('"#{ $fa-var-up-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-h:before {
+ content: unquote('"#{ $fa-var-left-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart:before {
+ content: unquote('"#{ $fa-var-chart-column }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart-o:before {
+ content: unquote('"#{ $fa-var-chart-column }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square:before {
+ content: unquote('"#{ $fa-var-square-twitter }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square:before {
+ content: unquote('"#{ $fa-var-square-facebook }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gears:before {
+ content: unquote('"#{ $fa-var-gears }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up:before {
+ content: unquote('"#{ $fa-var-thumbs-up }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down:before {
+ content: unquote('"#{ $fa-var-thumbs-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o:before {
+ content: unquote('"#{ $fa-var-heart }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-out:before {
+ content: unquote('"#{ $fa-var-right-from-bracket }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square:before {
+ content: unquote('"#{ $fa-var-linkedin }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thumb-tack:before {
+ content: unquote('"#{ $fa-var-thumbtack }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link:before {
+ content: unquote('"#{ $fa-var-up-right-from-square }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sign-in:before {
+ content: unquote('"#{ $fa-var-right-to-bracket }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github-square:before {
+ content: unquote('"#{ $fa-var-square-github }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o:before {
+ content: unquote('"#{ $fa-var-lemon }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-square-o:before {
+ content: unquote('"#{ $fa-var-square }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o:before {
+ content: unquote('"#{ $fa-var-bookmark }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitter {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook:before {
+ content: unquote('"#{ $fa-var-facebook-f }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f:before {
+ content: unquote('"#{ $fa-var-facebook-f }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-feed:before {
+ content: unquote('"#{ $fa-var-rss }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o:before {
+ content: unquote('"#{ $fa-var-hard-drive }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right:before {
+ content: unquote('"#{ $fa-var-hand-point-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left:before {
+ content: unquote('"#{ $fa-var-hand-point-left }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up:before {
+ content: unquote('"#{ $fa-var-hand-point-up }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down:before {
+ content: unquote('"#{ $fa-var-hand-point-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-globe:before {
+ content: unquote('"#{ $fa-var-earth-americas }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tasks:before {
+ content: unquote('"#{ $fa-var-bars-progress }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-alt:before {
+ content: unquote('"#{ $fa-var-maximize }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-group:before {
+ content: unquote('"#{ $fa-var-users }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chain:before {
+ content: unquote('"#{ $fa-var-link }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cut:before {
+ content: unquote('"#{ $fa-var-scissors }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-files-o:before {
+ content: unquote('"#{ $fa-var-copy }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o:before {
+ content: unquote('"#{ $fa-var-floppy-disk }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-save {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-save:before {
+ content: unquote('"#{ $fa-var-floppy-disk }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-navicon:before {
+ content: unquote('"#{ $fa-var-bars }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reorder:before {
+ content: unquote('"#{ $fa-var-bars }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-magic:before {
+ content: unquote('"#{ $fa-var-wand-magic-sparkles }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square:before {
+ content: unquote('"#{ $fa-var-square-pinterest }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square:before {
+ content: unquote('"#{ $fa-var-square-google-plus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus:before {
+ content: unquote('"#{ $fa-var-google-plus-g }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-money:before {
+ content: unquote('"#{ $fa-var-money-bill-1 }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-unsorted:before {
+ content: unquote('"#{ $fa-var-sort }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-desc:before {
+ content: unquote('"#{ $fa-var-sort-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-asc:before {
+ content: unquote('"#{ $fa-var-sort-up }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin:before {
+ content: unquote('"#{ $fa-var-linkedin-in }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-left:before {
+ content: unquote('"#{ $fa-var-arrow-rotate-left }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-legal:before {
+ content: unquote('"#{ $fa-var-gavel }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tachometer:before {
+ content: unquote('"#{ $fa-var-gauge-high }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dashboard:before {
+ content: unquote('"#{ $fa-var-gauge-high }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o:before {
+ content: unquote('"#{ $fa-var-comment }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o:before {
+ content: unquote('"#{ $fa-var-comments }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flash:before {
+ content: unquote('"#{ $fa-var-bolt }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clipboard:before {
+ content: unquote('"#{ $fa-var-paste }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o:before {
+ content: unquote('"#{ $fa-var-lightbulb }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-exchange:before {
+ content: unquote('"#{ $fa-var-right-left }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-download:before {
+ content: unquote('"#{ $fa-var-cloud-arrow-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-upload:before {
+ content: unquote('"#{ $fa-var-cloud-arrow-up }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o:before {
+ content: unquote('"#{ $fa-var-bell }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cutlery:before {
+ content: unquote('"#{ $fa-var-utensils }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o:before {
+ content: unquote('"#{ $fa-var-file-lines }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-building-o:before {
+ content: unquote('"#{ $fa-var-building }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o:before {
+ content: unquote('"#{ $fa-var-hospital }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tablet:before {
+ content: unquote('"#{ $fa-var-tablet-screen-button }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile:before {
+ content: unquote('"#{ $fa-var-mobile-screen-button }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mobile-phone:before {
+ content: unquote('"#{ $fa-var-mobile-screen-button }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o:before {
+ content: unquote('"#{ $fa-var-circle }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply:before {
+ content: unquote('"#{ $fa-var-reply }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-github-alt {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o:before {
+ content: unquote('"#{ $fa-var-folder }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o:before {
+ content: unquote('"#{ $fa-var-folder-open }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o:before {
+ content: unquote('"#{ $fa-var-face-smile }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o:before {
+ content: unquote('"#{ $fa-var-face-frown }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o:before {
+ content: unquote('"#{ $fa-var-face-meh }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o:before {
+ content: unquote('"#{ $fa-var-keyboard }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o:before {
+ content: unquote('"#{ $fa-var-flag }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply-all:before {
+ content: unquote('"#{ $fa-var-reply-all }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o:before {
+ content: unquote('"#{ $fa-var-star-half-stroke }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty:before {
+ content: unquote('"#{ $fa-var-star-half-stroke }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full:before {
+ content: unquote('"#{ $fa-var-star-half-stroke }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-code-fork:before {
+ content: unquote('"#{ $fa-var-code-branch }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chain-broken:before {
+ content: unquote('"#{ $fa-var-link-slash }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-unlink:before {
+ content: unquote('"#{ $fa-var-link-slash }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o:before {
+ content: unquote('"#{ $fa-var-calendar }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-maxcdn {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-html5 {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-css3 {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-unlock-alt:before {
+ content: unquote('"#{ $fa-var-unlock }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o:before {
+ content: unquote('"#{ $fa-var-square-minus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-level-up:before {
+ content: unquote('"#{ $fa-var-turn-up }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-level-down:before {
+ content: unquote('"#{ $fa-var-turn-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square:before {
+ content: unquote('"#{ $fa-var-square-pen }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-external-link-square:before {
+ content: unquote('"#{ $fa-var-square-up-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-compass {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down:before {
+ content: unquote('"#{ $fa-var-square-caret-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down:before {
+ content: unquote('"#{ $fa-var-square-caret-down }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up:before {
+ content: unquote('"#{ $fa-var-square-caret-up }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up:before {
+ content: unquote('"#{ $fa-var-square-caret-up }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right:before {
+ content: unquote('"#{ $fa-var-square-caret-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right:before {
+ content: unquote('"#{ $fa-var-square-caret-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eur:before {
+ content: unquote('"#{ $fa-var-euro-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-euro:before {
+ content: unquote('"#{ $fa-var-euro-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gbp:before {
+ content: unquote('"#{ $fa-var-sterling-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-usd:before {
+ content: unquote('"#{ $fa-var-dollar-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dollar:before {
+ content: unquote('"#{ $fa-var-dollar-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-inr:before {
+ content: unquote('"#{ $fa-var-indian-rupee-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rupee:before {
+ content: unquote('"#{ $fa-var-indian-rupee-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-jpy:before {
+ content: unquote('"#{ $fa-var-yen-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cny:before {
+ content: unquote('"#{ $fa-var-yen-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rmb:before {
+ content: unquote('"#{ $fa-var-yen-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yen:before {
+ content: unquote('"#{ $fa-var-yen-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rub:before {
+ content: unquote('"#{ $fa-var-ruble-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ruble:before {
+ content: unquote('"#{ $fa-var-ruble-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rouble:before {
+ content: unquote('"#{ $fa-var-ruble-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-krw:before {
+ content: unquote('"#{ $fa-var-won-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-won:before {
+ content: unquote('"#{ $fa-var-won-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-btc {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin:before {
+ content: unquote('"#{ $fa-var-btc }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-text:before {
+ content: unquote('"#{ $fa-var-file-lines }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-asc:before {
+ content: unquote('"#{ $fa-var-arrow-down-a-z }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-desc:before {
+ content: unquote('"#{ $fa-var-arrow-down-z-a }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-asc:before {
+ content: unquote('"#{ $fa-var-arrow-down-short-wide }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-desc:before {
+ content: unquote('"#{ $fa-var-arrow-down-wide-short }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-asc:before {
+ content: unquote('"#{ $fa-var-arrow-down-1-9 }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-desc:before {
+ content: unquote('"#{ $fa-var-arrow-down-9-1 }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square:before {
+ content: unquote('"#{ $fa-var-square-youtube }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-xing {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square:before {
+ content: unquote('"#{ $fa-var-square-xing }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play:before {
+ content: unquote('"#{ $fa-var-youtube }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dropbox {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-overflow {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-instagram {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-flickr {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-adn {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square:before {
+ content: unquote('"#{ $fa-var-bitbucket }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square:before {
+ content: unquote('"#{ $fa-var-square-tumblr }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-down:before {
+ content: unquote('"#{ $fa-var-down-long }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-up:before {
+ content: unquote('"#{ $fa-var-up-long }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-left:before {
+ content: unquote('"#{ $fa-var-left-long }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-right:before {
+ content: unquote('"#{ $fa-var-right-long }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-apple {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-windows {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-android {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linux {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dribbble {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-skype {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-foursquare {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trello {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gratipay {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gittip:before {
+ content: unquote('"#{ $fa-var-gratipay }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o:before {
+ content: unquote('"#{ $fa-var-sun }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o:before {
+ content: unquote('"#{ $fa-var-moon }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vk {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-weibo {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-renren {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pagelines {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stack-exchange {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right:before {
+ content: unquote('"#{ $fa-var-circle-right }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left:before {
+ content: unquote('"#{ $fa-var-circle-left }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left:before {
+ content: unquote('"#{ $fa-var-square-caret-left }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left:before {
+ content: unquote('"#{ $fa-var-square-caret-left }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o:before {
+ content: unquote('"#{ $fa-var-circle-dot }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square:before {
+ content: unquote('"#{ $fa-var-square-vimeo }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-try:before {
+ content: unquote('"#{ $fa-var-turkish-lira-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-turkish-lira:before {
+ content: unquote('"#{ $fa-var-turkish-lira-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o:before {
+ content: unquote('"#{ $fa-var-square-plus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-slack {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wordpress {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-openid {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-institution:before {
+ content: unquote('"#{ $fa-var-building-columns }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bank:before {
+ content: unquote('"#{ $fa-var-building-columns }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mortar-board:before {
+ content: unquote('"#{ $fa-var-graduation-cap }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yahoo {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square:before {
+ content: unquote('"#{ $fa-var-square-reddit }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon-circle {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-delicious {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-digg {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-pp {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-alt {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drupal {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-joomla {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-behance {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square:before {
+ content: unquote('"#{ $fa-var-square-behance }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-steam {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square:before {
+ content: unquote('"#{ $fa-var-square-steam }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-automobile:before {
+ content: unquote('"#{ $fa-var-car }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cab:before {
+ content: unquote('"#{ $fa-var-taxi }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-spotify {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-deviantart {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soundcloud {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o:before {
+ content: unquote('"#{ $fa-var-file-pdf }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o:before {
+ content: unquote('"#{ $fa-var-file-word }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o:before {
+ content: unquote('"#{ $fa-var-file-excel }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o:before {
+ content: unquote('"#{ $fa-var-file-powerpoint }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o:before {
+ content: unquote('"#{ $fa-var-file-image }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o:before {
+ content: unquote('"#{ $fa-var-file-image }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o:before {
+ content: unquote('"#{ $fa-var-file-image }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o:before {
+ content: unquote('"#{ $fa-var-file-zipper }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o:before {
+ content: unquote('"#{ $fa-var-file-zipper }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o:before {
+ content: unquote('"#{ $fa-var-file-audio }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o:before {
+ content: unquote('"#{ $fa-var-file-audio }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o:before {
+ content: unquote('"#{ $fa-var-file-video }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o:before {
+ content: unquote('"#{ $fa-var-file-video }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o:before {
+ content: unquote('"#{ $fa-var-file-code }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vine {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-codepen {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-jsfiddle {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-bouy:before {
+ content: unquote('"#{ $fa-var-life-ring }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-buoy:before {
+ content: unquote('"#{ $fa-var-life-ring }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-life-saver:before {
+ content: unquote('"#{ $fa-var-life-ring }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-support:before {
+ content: unquote('"#{ $fa-var-life-ring }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o-notch:before {
+ content: unquote('"#{ $fa-var-circle-notch }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-rebel {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ra {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ra:before {
+ content: unquote('"#{ $fa-var-rebel }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-resistance:before {
+ content: unquote('"#{ $fa-var-rebel }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-empire {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ge {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ge:before {
+ content: unquote('"#{ $fa-var-empire }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-git-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-git-square:before {
+ content: unquote('"#{ $fa-var-square-git }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-git {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hacker-news {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square:before {
+ content: unquote('"#{ $fa-var-hacker-news }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square:before {
+ content: unquote('"#{ $fa-var-hacker-news }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-tencent-weibo {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-qq {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-weixin {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wechat:before {
+ content: unquote('"#{ $fa-var-weixin }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send:before {
+ content: unquote('"#{ $fa-var-paper-plane }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o:before {
+ content: unquote('"#{ $fa-var-paper-plane }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-send-o:before {
+ content: unquote('"#{ $fa-var-paper-plane }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin:before {
+ content: unquote('"#{ $fa-var-circle }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-header:before {
+ content: unquote('"#{ $fa-var-heading }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o:before {
+ content: unquote('"#{ $fa-var-futbol }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o:before {
+ content: unquote('"#{ $fa-var-futbol }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-slideshare {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-twitch {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yelp {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o:before {
+ content: unquote('"#{ $fa-var-newspaper }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-paypal {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-wallet {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-visa {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-mastercard {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-discover {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-amex {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-paypal {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-stripe {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o:before {
+ content: unquote('"#{ $fa-var-bell-slash }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-trash:before {
+ content: unquote('"#{ $fa-var-trash-can }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-copyright {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eyedropper:before {
+ content: unquote('"#{ $fa-var-eye-dropper }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-area-chart:before {
+ content: unquote('"#{ $fa-var-chart-area }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pie-chart:before {
+ content: unquote('"#{ $fa-var-chart-pie }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-line-chart:before {
+ content: unquote('"#{ $fa-var-chart-line }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square:before {
+ content: unquote('"#{ $fa-var-square-lastfm }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ioxhost {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-angellist {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc:before {
+ content: unquote('"#{ $fa-var-closed-captioning }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ils:before {
+ content: unquote('"#{ $fa-var-shekel-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-shekel:before {
+ content: unquote('"#{ $fa-var-shekel-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sheqel:before {
+ content: unquote('"#{ $fa-var-shekel-sign }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-buysellads {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-connectdevelop {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-dashcube {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-forumbee {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-leanpub {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sellsy {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-shirtsinbulk {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-simplybuilt {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-skyatlas {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-diamond:before {
+ content: unquote('"#{ $fa-var-gem }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-transgender:before {
+ content: unquote('"#{ $fa-var-mars-and-venus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-intersex:before {
+ content: unquote('"#{ $fa-var-mars-and-venus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-transgender-alt:before {
+ content: unquote('"#{ $fa-var-transgender }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official:before {
+ content: unquote('"#{ $fa-var-facebook }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-p {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-whatsapp {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hotel:before {
+ content: unquote('"#{ $fa-var-bed }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viacoin {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-medium {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yc:before {
+ content: unquote('"#{ $fa-var-y-combinator }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-optin-monster {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-opencart {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-expeditedssl {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-4:before {
+ content: unquote('"#{ $fa-var-battery-full }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery:before {
+ content: unquote('"#{ $fa-var-battery-full }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-3:before {
+ content: unquote('"#{ $fa-var-battery-three-quarters }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-2:before {
+ content: unquote('"#{ $fa-var-battery-half }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-1:before {
+ content: unquote('"#{ $fa-var-battery-quarter }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-battery-0:before {
+ content: unquote('"#{ $fa-var-battery-empty }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-object-group {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-object-ungroup {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o:before {
+ content: unquote('"#{ $fa-var-note-sticky }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-jcb {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-cc-diners-club {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-clone {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-o:before {
+ content: unquote('"#{ $fa-var-hourglass }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-1:before {
+ content: unquote('"#{ $fa-var-hourglass-start }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-2:before {
+ content: unquote('"#{ $fa-var-hourglass-half }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-3:before {
+ content: unquote('"#{ $fa-var-hourglass-end }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o:before {
+ content: unquote('"#{ $fa-var-hand-back-fist }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o:before {
+ content: unquote('"#{ $fa-var-hand-back-fist }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o:before {
+ content: unquote('"#{ $fa-var-hand }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o:before {
+ content: unquote('"#{ $fa-var-hand }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o:before {
+ content: unquote('"#{ $fa-var-hand-scissors }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o:before {
+ content: unquote('"#{ $fa-var-hand-lizard }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o:before {
+ content: unquote('"#{ $fa-var-hand-spock }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o:before {
+ content: unquote('"#{ $fa-var-hand-pointer }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o:before {
+ content: unquote('"#{ $fa-var-hand-peace }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-registered {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-creative-commons {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gg {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gg-circle {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square:before {
+ content: unquote('"#{ $fa-var-square-odnoklassniki }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-get-pocket {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wikipedia-w {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-safari {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-chrome {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-firefox {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-opera {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-internet-explorer {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-television:before {
+ content: unquote('"#{ $fa-var-tv }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-contao {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-500px {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-amazon {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o:before {
+ content: unquote('"#{ $fa-var-calendar-plus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o:before {
+ content: unquote('"#{ $fa-var-calendar-minus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o:before {
+ content: unquote('"#{ $fa-var-calendar-xmark }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o:before {
+ content: unquote('"#{ $fa-var-calendar-check }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-map-o:before {
+ content: unquote('"#{ $fa-var-map }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting:before {
+ content: unquote('"#{ $fa-var-comment-dots }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o:before {
+ content: unquote('"#{ $fa-var-comment-dots }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-houzz {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo:before {
+ content: unquote('"#{ $fa-var-vimeo-v }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-black-tie {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fonticons {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-alien {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-edge {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card-alt:before {
+ content: unquote('"#{ $fa-var-credit-card }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-codiepie {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-modx {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fort-awesome {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-usb {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-product-hunt {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-mixcloud {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-scribd {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o:before {
+ content: unquote('"#{ $fa-var-circle-pause }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o:before {
+ content: unquote('"#{ $fa-var-circle-stop }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth-b {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-gitlab {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpbeginner {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpforms {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envira {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt:before {
+ content: unquote('"#{ $fa-var-accessible-icon }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o:before {
+ content: unquote('"#{ $fa-var-circle-question }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-volume-control-phone:before {
+ content: unquote('"#{ $fa-var-phone-volume }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-asl-interpreting:before {
+ content: unquote('"#{ $fa-var-hands-asl-interpreting }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-deafness:before {
+ content: unquote('"#{ $fa-var-ear-deaf }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-hard-of-hearing:before {
+ content: unquote('"#{ $fa-var-ear-deaf }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glide {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-glide-g {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-signing:before {
+ content: unquote('"#{ $fa-var-hands }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square:before {
+ content: unquote('"#{ $fa-var-square-viadeo }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost:before {
+ content: unquote('"#{ $fa-var-snapchat }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square:before {
+ content: unquote('"#{ $fa-var-square-snapchat }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-first-order {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-yoast {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-themeisle {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official:before {
+ content: unquote('"#{ $fa-var-google-plus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle:before {
+ content: unquote('"#{ $fa-var-google-plus }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-font-awesome {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fa {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-fa:before {
+ content: unquote('"#{ $fa-var-font-awesome }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o:before {
+ content: unquote('"#{ $fa-var-handshake }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o:before {
+ content: unquote('"#{ $fa-var-envelope-open }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-linode {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o:before {
+ content: unquote('"#{ $fa-var-address-book }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard:before {
+ content: unquote('"#{ $fa-var-address-card }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o:before {
+ content: unquote('"#{ $fa-var-address-card }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o:before {
+ content: unquote('"#{ $fa-var-address-card }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o:before {
+ content: unquote('"#{ $fa-var-circle-user }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-user-o:before {
+ content: unquote('"#{ $fa-var-user }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-badge {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license:before {
+ content: unquote('"#{ $fa-var-id-card }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o:before {
+ content: unquote('"#{ $fa-var-id-card }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o:before {
+ content: unquote('"#{ $fa-var-id-card }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-quora {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-free-code-camp {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-telegram {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-4:before {
+ content: unquote('"#{ $fa-var-temperature-full }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer:before {
+ content: unquote('"#{ $fa-var-temperature-full }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-3:before {
+ content: unquote('"#{ $fa-var-temperature-three-quarters }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-2:before {
+ content: unquote('"#{ $fa-var-temperature-half }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-1:before {
+ content: unquote('"#{ $fa-var-temperature-quarter }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-0:before {
+ content: unquote('"#{ $fa-var-temperature-empty }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bathtub:before {
+ content: unquote('"#{ $fa-var-bath }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-s15:before {
+ content: unquote('"#{ $fa-var-bath }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-maximize {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-restore {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle:before {
+ content: unquote('"#{ $fa-var-rectangle-xmark }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o:before {
+ content: unquote('"#{ $fa-var-rectangle-xmark }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o:before {
+ content: unquote('"#{ $fa-var-rectangle-xmark }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-bandcamp {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-grav {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-etsy {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-imdb {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-ravelry {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-eercast:before {
+ content: unquote('"#{ $fa-var-sellcast }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o {
+ font-family: "Font Awesome 6 Free";
+ font-weight: 400;
+}
+.#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o:before {
+ content: unquote('"#{ $fa-var-snowflake }"');
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-superpowers {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-wpexplorer {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
+
+.#{$fa-css-prefix}.#{$fa-css-prefix}-meetup {
+ font-family: "Font Awesome 6 Brands";
+ font-weight: 400;
+}
diff --git a/_sass/font-awesome/_sizing.scss b/_sass/font-awesome/_sizing.scss
index c3b26a43..c89f4905 100644
--- a/_sass/font-awesome/_sizing.scss
+++ b/_sass/font-awesome/_sizing.scss
@@ -1,16 +1,16 @@
-// sizing icons
-// -------------------------
-
-// literal magnification scale
-@for $i from 1 through 10 {
- .#{$fa-css-prefix}-#{$i}x {
- font-size: $i * 1em;
- }
-}
-
-// step-based scale (with alignment)
-@each $size, $value in $fa-sizes {
- .#{$fa-css-prefix}-#{$size} {
- @include fa-size($value);
- }
-}
+// sizing icons
+// -------------------------
+
+// literal magnification scale
+@for $i from 1 through 10 {
+ .#{$fa-css-prefix}-#{$i}x {
+ font-size: $i * 1em;
+ }
+}
+
+// step-based scale (with alignment)
+@each $size, $value in $fa-sizes {
+ .#{$fa-css-prefix}-#{$size} {
+ @include fa-size($value);
+ }
+}
diff --git a/_sass/font-awesome/_stacked.scss b/_sass/font-awesome/_stacked.scss
index e34fbbe2..d9a9d4e9 100644
--- a/_sass/font-awesome/_stacked.scss
+++ b/_sass/font-awesome/_stacked.scss
@@ -1,32 +1,32 @@
-// stacking icons
-// -------------------------
-
-.#{$fa-css-prefix}-stack {
- display: inline-block;
- height: 2em;
- line-height: 2em;
- position: relative;
- vertical-align: $fa-stack-vertical-align;
- width: $fa-stack-width;
-}
-
-.#{$fa-css-prefix}-stack-1x,
-.#{$fa-css-prefix}-stack-2x {
- left: 0;
- position: absolute;
- text-align: center;
- width: 100%;
- z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index});
-}
-
-.#{$fa-css-prefix}-stack-1x {
- line-height: inherit;
-}
-
-.#{$fa-css-prefix}-stack-2x {
- font-size: 2em;
-}
-
-.#{$fa-css-prefix}-inverse {
- color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse});
-}
+// stacking icons
+// -------------------------
+
+.#{$fa-css-prefix}-stack {
+ display: inline-block;
+ height: 2em;
+ line-height: 2em;
+ position: relative;
+ vertical-align: $fa-stack-vertical-align;
+ width: $fa-stack-width;
+}
+
+.#{$fa-css-prefix}-stack-1x,
+.#{$fa-css-prefix}-stack-2x {
+ left: 0;
+ position: absolute;
+ text-align: center;
+ width: 100%;
+ z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index});
+}
+
+.#{$fa-css-prefix}-stack-1x {
+ line-height: inherit;
+}
+
+.#{$fa-css-prefix}-stack-2x {
+ font-size: 2em;
+}
+
+.#{$fa-css-prefix}-inverse {
+ color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse});
+}
diff --git a/_sass/font-awesome/_variables.scss b/_sass/font-awesome/_variables.scss
index 62adc2ac..db287b97 100644
--- a/_sass/font-awesome/_variables.scss
+++ b/_sass/font-awesome/_variables.scss
@@ -1,4971 +1,4971 @@
-// variables
-// --------------------------
-
-$fa-css-prefix: fa !default;
-$fa-style: 900 !default;
-$fa-style-family: "Font Awesome 6 Free" !default;
-
-$fa-display: inline-block !default;
-
-$fa-fw-width: fa-divide(20em, 16) !default;
-$fa-inverse: #fff !default;
-
-$fa-border-color: #eee !default;
-$fa-border-padding: 0.2em 0.25em 0.15em !default;
-$fa-border-radius: 0.1em !default;
-$fa-border-style: solid !default;
-$fa-border-width: 0.08em !default;
-
-$fa-size-scale-2xs: 10 !default;
-$fa-size-scale-xs: 12 !default;
-$fa-size-scale-sm: 14 !default;
-$fa-size-scale-base: 16 !default;
-$fa-size-scale-lg: 20 !default;
-$fa-size-scale-xl: 24 !default;
-$fa-size-scale-2xl: 32 !default;
-
-$fa-sizes: (
- "2xs": $fa-size-scale-2xs,
- "xs": $fa-size-scale-xs,
- "sm": $fa-size-scale-sm,
- "lg": $fa-size-scale-lg,
- "xl": $fa-size-scale-xl,
- "2xl": $fa-size-scale-2xl,
-) !default;
-
-$fa-li-width: 2em !default;
-$fa-li-margin: $fa-li-width * fa-divide(5, 4) !default;
-
-$fa-pull-margin: 0.3em !default;
-
-$fa-primary-opacity: 1 !default;
-$fa-secondary-opacity: 0.4 !default;
-
-$fa-stack-vertical-align: middle !default;
-$fa-stack-width: ($fa-fw-width * 2) !default;
-$fa-stack-z-index: auto !default;
-
-$fa-font-display: block !default;
-$fa-font-path: "../webfonts" !default;
-
-$fa-var-0: \30;
-$fa-var-1: \31;
-$fa-var-2: \32;
-$fa-var-3: \33;
-$fa-var-4: \34;
-$fa-var-5: \35;
-$fa-var-6: \36;
-$fa-var-7: \37;
-$fa-var-8: \38;
-$fa-var-9: \39;
-$fa-var-fill-drip: \f576;
-$fa-var-arrows-to-circle: \e4bd;
-$fa-var-circle-chevron-right: \f138;
-$fa-var-chevron-circle-right: \f138;
-$fa-var-at: \40;
-$fa-var-trash-can: \f2ed;
-$fa-var-trash-alt: \f2ed;
-$fa-var-text-height: \f034;
-$fa-var-user-xmark: \f235;
-$fa-var-user-times: \f235;
-$fa-var-stethoscope: \f0f1;
-$fa-var-message: \f27a;
-$fa-var-comment-alt: \f27a;
-$fa-var-info: \f129;
-$fa-var-down-left-and-up-right-to-center: \f422;
-$fa-var-compress-alt: \f422;
-$fa-var-explosion: \e4e9;
-$fa-var-file-lines: \f15c;
-$fa-var-file-alt: \f15c;
-$fa-var-file-text: \f15c;
-$fa-var-wave-square: \f83e;
-$fa-var-ring: \f70b;
-$fa-var-building-un: \e4d9;
-$fa-var-dice-three: \f527;
-$fa-var-calendar-days: \f073;
-$fa-var-calendar-alt: \f073;
-$fa-var-anchor-circle-check: \e4aa;
-$fa-var-building-circle-arrow-right: \e4d1;
-$fa-var-volleyball: \f45f;
-$fa-var-volleyball-ball: \f45f;
-$fa-var-arrows-up-to-line: \e4c2;
-$fa-var-sort-down: \f0dd;
-$fa-var-sort-desc: \f0dd;
-$fa-var-circle-minus: \f056;
-$fa-var-minus-circle: \f056;
-$fa-var-door-open: \f52b;
-$fa-var-right-from-bracket: \f2f5;
-$fa-var-sign-out-alt: \f2f5;
-$fa-var-atom: \f5d2;
-$fa-var-soap: \e06e;
-$fa-var-icons: \f86d;
-$fa-var-heart-music-camera-bolt: \f86d;
-$fa-var-microphone-lines-slash: \f539;
-$fa-var-microphone-alt-slash: \f539;
-$fa-var-bridge-circle-check: \e4c9;
-$fa-var-pump-medical: \e06a;
-$fa-var-fingerprint: \f577;
-$fa-var-hand-point-right: \f0a4;
-$fa-var-magnifying-glass-location: \f689;
-$fa-var-search-location: \f689;
-$fa-var-forward-step: \f051;
-$fa-var-step-forward: \f051;
-$fa-var-face-smile-beam: \f5b8;
-$fa-var-smile-beam: \f5b8;
-$fa-var-flag-checkered: \f11e;
-$fa-var-football: \f44e;
-$fa-var-football-ball: \f44e;
-$fa-var-school-circle-exclamation: \e56c;
-$fa-var-crop: \f125;
-$fa-var-angles-down: \f103;
-$fa-var-angle-double-down: \f103;
-$fa-var-users-rectangle: \e594;
-$fa-var-people-roof: \e537;
-$fa-var-people-line: \e534;
-$fa-var-beer-mug-empty: \f0fc;
-$fa-var-beer: \f0fc;
-$fa-var-diagram-predecessor: \e477;
-$fa-var-arrow-up-long: \f176;
-$fa-var-long-arrow-up: \f176;
-$fa-var-fire-flame-simple: \f46a;
-$fa-var-burn: \f46a;
-$fa-var-person: \f183;
-$fa-var-male: \f183;
-$fa-var-laptop: \f109;
-$fa-var-file-csv: \f6dd;
-$fa-var-menorah: \f676;
-$fa-var-truck-plane: \e58f;
-$fa-var-record-vinyl: \f8d9;
-$fa-var-face-grin-stars: \f587;
-$fa-var-grin-stars: \f587;
-$fa-var-bong: \f55c;
-$fa-var-spaghetti-monster-flying: \f67b;
-$fa-var-pastafarianism: \f67b;
-$fa-var-arrow-down-up-across-line: \e4af;
-$fa-var-spoon: \f2e5;
-$fa-var-utensil-spoon: \f2e5;
-$fa-var-jar-wheat: \e517;
-$fa-var-envelopes-bulk: \f674;
-$fa-var-mail-bulk: \f674;
-$fa-var-file-circle-exclamation: \e4eb;
-$fa-var-circle-h: \f47e;
-$fa-var-hospital-symbol: \f47e;
-$fa-var-pager: \f815;
-$fa-var-address-book: \f2b9;
-$fa-var-contact-book: \f2b9;
-$fa-var-strikethrough: \f0cc;
-$fa-var-k: \4b;
-$fa-var-landmark-flag: \e51c;
-$fa-var-pencil: \f303;
-$fa-var-pencil-alt: \f303;
-$fa-var-backward: \f04a;
-$fa-var-caret-right: \f0da;
-$fa-var-comments: \f086;
-$fa-var-paste: \f0ea;
-$fa-var-file-clipboard: \f0ea;
-$fa-var-code-pull-request: \e13c;
-$fa-var-clipboard-list: \f46d;
-$fa-var-truck-ramp-box: \f4de;
-$fa-var-truck-loading: \f4de;
-$fa-var-user-check: \f4fc;
-$fa-var-vial-virus: \e597;
-$fa-var-sheet-plastic: \e571;
-$fa-var-blog: \f781;
-$fa-var-user-ninja: \f504;
-$fa-var-person-arrow-up-from-line: \e539;
-$fa-var-scroll-torah: \f6a0;
-$fa-var-torah: \f6a0;
-$fa-var-broom-ball: \f458;
-$fa-var-quidditch: \f458;
-$fa-var-quidditch-broom-ball: \f458;
-$fa-var-toggle-off: \f204;
-$fa-var-box-archive: \f187;
-$fa-var-archive: \f187;
-$fa-var-person-drowning: \e545;
-$fa-var-arrow-down-9-1: \f886;
-$fa-var-sort-numeric-desc: \f886;
-$fa-var-sort-numeric-down-alt: \f886;
-$fa-var-face-grin-tongue-squint: \f58a;
-$fa-var-grin-tongue-squint: \f58a;
-$fa-var-spray-can: \f5bd;
-$fa-var-truck-monster: \f63b;
-$fa-var-w: \57;
-$fa-var-earth-africa: \f57c;
-$fa-var-globe-africa: \f57c;
-$fa-var-rainbow: \f75b;
-$fa-var-circle-notch: \f1ce;
-$fa-var-tablet-screen-button: \f3fa;
-$fa-var-tablet-alt: \f3fa;
-$fa-var-paw: \f1b0;
-$fa-var-cloud: \f0c2;
-$fa-var-trowel-bricks: \e58a;
-$fa-var-face-flushed: \f579;
-$fa-var-flushed: \f579;
-$fa-var-hospital-user: \f80d;
-$fa-var-tent-arrow-left-right: \e57f;
-$fa-var-gavel: \f0e3;
-$fa-var-legal: \f0e3;
-$fa-var-binoculars: \f1e5;
-$fa-var-microphone-slash: \f131;
-$fa-var-box-tissue: \e05b;
-$fa-var-motorcycle: \f21c;
-$fa-var-bell-concierge: \f562;
-$fa-var-concierge-bell: \f562;
-$fa-var-pen-ruler: \f5ae;
-$fa-var-pencil-ruler: \f5ae;
-$fa-var-people-arrows: \e068;
-$fa-var-people-arrows-left-right: \e068;
-$fa-var-mars-and-venus-burst: \e523;
-$fa-var-square-caret-right: \f152;
-$fa-var-caret-square-right: \f152;
-$fa-var-scissors: \f0c4;
-$fa-var-cut: \f0c4;
-$fa-var-sun-plant-wilt: \e57a;
-$fa-var-toilets-portable: \e584;
-$fa-var-hockey-puck: \f453;
-$fa-var-table: \f0ce;
-$fa-var-magnifying-glass-arrow-right: \e521;
-$fa-var-tachograph-digital: \f566;
-$fa-var-digital-tachograph: \f566;
-$fa-var-users-slash: \e073;
-$fa-var-clover: \e139;
-$fa-var-reply: \f3e5;
-$fa-var-mail-reply: \f3e5;
-$fa-var-star-and-crescent: \f699;
-$fa-var-house-fire: \e50c;
-$fa-var-square-minus: \f146;
-$fa-var-minus-square: \f146;
-$fa-var-helicopter: \f533;
-$fa-var-compass: \f14e;
-$fa-var-square-caret-down: \f150;
-$fa-var-caret-square-down: \f150;
-$fa-var-file-circle-question: \e4ef;
-$fa-var-laptop-code: \f5fc;
-$fa-var-swatchbook: \f5c3;
-$fa-var-prescription-bottle: \f485;
-$fa-var-bars: \f0c9;
-$fa-var-navicon: \f0c9;
-$fa-var-people-group: \e533;
-$fa-var-hourglass-end: \f253;
-$fa-var-hourglass-3: \f253;
-$fa-var-heart-crack: \f7a9;
-$fa-var-heart-broken: \f7a9;
-$fa-var-square-up-right: \f360;
-$fa-var-external-link-square-alt: \f360;
-$fa-var-face-kiss-beam: \f597;
-$fa-var-kiss-beam: \f597;
-$fa-var-film: \f008;
-$fa-var-ruler-horizontal: \f547;
-$fa-var-people-robbery: \e536;
-$fa-var-lightbulb: \f0eb;
-$fa-var-caret-left: \f0d9;
-$fa-var-circle-exclamation: \f06a;
-$fa-var-exclamation-circle: \f06a;
-$fa-var-school-circle-xmark: \e56d;
-$fa-var-arrow-right-from-bracket: \f08b;
-$fa-var-sign-out: \f08b;
-$fa-var-circle-chevron-down: \f13a;
-$fa-var-chevron-circle-down: \f13a;
-$fa-var-unlock-keyhole: \f13e;
-$fa-var-unlock-alt: \f13e;
-$fa-var-cloud-showers-heavy: \f740;
-$fa-var-headphones-simple: \f58f;
-$fa-var-headphones-alt: \f58f;
-$fa-var-sitemap: \f0e8;
-$fa-var-circle-dollar-to-slot: \f4b9;
-$fa-var-donate: \f4b9;
-$fa-var-memory: \f538;
-$fa-var-road-spikes: \e568;
-$fa-var-fire-burner: \e4f1;
-$fa-var-flag: \f024;
-$fa-var-hanukiah: \f6e6;
-$fa-var-feather: \f52d;
-$fa-var-volume-low: \f027;
-$fa-var-volume-down: \f027;
-$fa-var-comment-slash: \f4b3;
-$fa-var-cloud-sun-rain: \f743;
-$fa-var-compress: \f066;
-$fa-var-wheat-awn: \e2cd;
-$fa-var-wheat-alt: \e2cd;
-$fa-var-ankh: \f644;
-$fa-var-hands-holding-child: \e4fa;
-$fa-var-asterisk: \2a;
-$fa-var-square-check: \f14a;
-$fa-var-check-square: \f14a;
-$fa-var-peseta-sign: \e221;
-$fa-var-heading: \f1dc;
-$fa-var-header: \f1dc;
-$fa-var-ghost: \f6e2;
-$fa-var-list: \f03a;
-$fa-var-list-squares: \f03a;
-$fa-var-square-phone-flip: \f87b;
-$fa-var-phone-square-alt: \f87b;
-$fa-var-cart-plus: \f217;
-$fa-var-gamepad: \f11b;
-$fa-var-circle-dot: \f192;
-$fa-var-dot-circle: \f192;
-$fa-var-face-dizzy: \f567;
-$fa-var-dizzy: \f567;
-$fa-var-egg: \f7fb;
-$fa-var-house-medical-circle-xmark: \e513;
-$fa-var-campground: \f6bb;
-$fa-var-folder-plus: \f65e;
-$fa-var-futbol: \f1e3;
-$fa-var-futbol-ball: \f1e3;
-$fa-var-soccer-ball: \f1e3;
-$fa-var-paintbrush: \f1fc;
-$fa-var-paint-brush: \f1fc;
-$fa-var-lock: \f023;
-$fa-var-gas-pump: \f52f;
-$fa-var-hot-tub-person: \f593;
-$fa-var-hot-tub: \f593;
-$fa-var-map-location: \f59f;
-$fa-var-map-marked: \f59f;
-$fa-var-house-flood-water: \e50e;
-$fa-var-tree: \f1bb;
-$fa-var-bridge-lock: \e4cc;
-$fa-var-sack-dollar: \f81d;
-$fa-var-pen-to-square: \f044;
-$fa-var-edit: \f044;
-$fa-var-car-side: \f5e4;
-$fa-var-share-nodes: \f1e0;
-$fa-var-share-alt: \f1e0;
-$fa-var-heart-circle-minus: \e4ff;
-$fa-var-hourglass-half: \f252;
-$fa-var-hourglass-2: \f252;
-$fa-var-microscope: \f610;
-$fa-var-sink: \e06d;
-$fa-var-bag-shopping: \f290;
-$fa-var-shopping-bag: \f290;
-$fa-var-arrow-down-z-a: \f881;
-$fa-var-sort-alpha-desc: \f881;
-$fa-var-sort-alpha-down-alt: \f881;
-$fa-var-mitten: \f7b5;
-$fa-var-person-rays: \e54d;
-$fa-var-users: \f0c0;
-$fa-var-eye-slash: \f070;
-$fa-var-flask-vial: \e4f3;
-$fa-var-hand: \f256;
-$fa-var-hand-paper: \f256;
-$fa-var-om: \f679;
-$fa-var-worm: \e599;
-$fa-var-house-circle-xmark: \e50b;
-$fa-var-plug: \f1e6;
-$fa-var-chevron-up: \f077;
-$fa-var-hand-spock: \f259;
-$fa-var-stopwatch: \f2f2;
-$fa-var-face-kiss: \f596;
-$fa-var-kiss: \f596;
-$fa-var-bridge-circle-xmark: \e4cb;
-$fa-var-face-grin-tongue: \f589;
-$fa-var-grin-tongue: \f589;
-$fa-var-chess-bishop: \f43a;
-$fa-var-face-grin-wink: \f58c;
-$fa-var-grin-wink: \f58c;
-$fa-var-ear-deaf: \f2a4;
-$fa-var-deaf: \f2a4;
-$fa-var-deafness: \f2a4;
-$fa-var-hard-of-hearing: \f2a4;
-$fa-var-road-circle-check: \e564;
-$fa-var-dice-five: \f523;
-$fa-var-square-rss: \f143;
-$fa-var-rss-square: \f143;
-$fa-var-land-mine-on: \e51b;
-$fa-var-i-cursor: \f246;
-$fa-var-stamp: \f5bf;
-$fa-var-stairs: \e289;
-$fa-var-i: \49;
-$fa-var-hryvnia-sign: \f6f2;
-$fa-var-hryvnia: \f6f2;
-$fa-var-pills: \f484;
-$fa-var-face-grin-wide: \f581;
-$fa-var-grin-alt: \f581;
-$fa-var-tooth: \f5c9;
-$fa-var-v: \56;
-$fa-var-bangladeshi-taka-sign: \e2e6;
-$fa-var-bicycle: \f206;
-$fa-var-staff-snake: \e579;
-$fa-var-rod-asclepius: \e579;
-$fa-var-rod-snake: \e579;
-$fa-var-staff-aesculapius: \e579;
-$fa-var-head-side-cough-slash: \e062;
-$fa-var-truck-medical: \f0f9;
-$fa-var-ambulance: \f0f9;
-$fa-var-wheat-awn-circle-exclamation: \e598;
-$fa-var-snowman: \f7d0;
-$fa-var-mortar-pestle: \f5a7;
-$fa-var-road-barrier: \e562;
-$fa-var-school: \f549;
-$fa-var-igloo: \f7ae;
-$fa-var-joint: \f595;
-$fa-var-angle-right: \f105;
-$fa-var-horse: \f6f0;
-$fa-var-q: \51;
-$fa-var-g: \47;
-$fa-var-notes-medical: \f481;
-$fa-var-temperature-half: \f2c9;
-$fa-var-temperature-2: \f2c9;
-$fa-var-thermometer-2: \f2c9;
-$fa-var-thermometer-half: \f2c9;
-$fa-var-dong-sign: \e169;
-$fa-var-capsules: \f46b;
-$fa-var-poo-storm: \f75a;
-$fa-var-poo-bolt: \f75a;
-$fa-var-face-frown-open: \f57a;
-$fa-var-frown-open: \f57a;
-$fa-var-hand-point-up: \f0a6;
-$fa-var-money-bill: \f0d6;
-$fa-var-bookmark: \f02e;
-$fa-var-align-justify: \f039;
-$fa-var-umbrella-beach: \f5ca;
-$fa-var-helmet-un: \e503;
-$fa-var-bullseye: \f140;
-$fa-var-bacon: \f7e5;
-$fa-var-hand-point-down: \f0a7;
-$fa-var-arrow-up-from-bracket: \e09a;
-$fa-var-folder: \f07b;
-$fa-var-folder-blank: \f07b;
-$fa-var-file-waveform: \f478;
-$fa-var-file-medical-alt: \f478;
-$fa-var-radiation: \f7b9;
-$fa-var-chart-simple: \e473;
-$fa-var-mars-stroke: \f229;
-$fa-var-vial: \f492;
-$fa-var-gauge: \f624;
-$fa-var-dashboard: \f624;
-$fa-var-gauge-med: \f624;
-$fa-var-tachometer-alt-average: \f624;
-$fa-var-wand-magic-sparkles: \e2ca;
-$fa-var-magic-wand-sparkles: \e2ca;
-$fa-var-e: \45;
-$fa-var-pen-clip: \f305;
-$fa-var-pen-alt: \f305;
-$fa-var-bridge-circle-exclamation: \e4ca;
-$fa-var-user: \f007;
-$fa-var-school-circle-check: \e56b;
-$fa-var-dumpster: \f793;
-$fa-var-van-shuttle: \f5b6;
-$fa-var-shuttle-van: \f5b6;
-$fa-var-building-user: \e4da;
-$fa-var-square-caret-left: \f191;
-$fa-var-caret-square-left: \f191;
-$fa-var-highlighter: \f591;
-$fa-var-key: \f084;
-$fa-var-bullhorn: \f0a1;
-$fa-var-globe: \f0ac;
-$fa-var-synagogue: \f69b;
-$fa-var-person-half-dress: \e548;
-$fa-var-road-bridge: \e563;
-$fa-var-location-arrow: \f124;
-$fa-var-c: \43;
-$fa-var-tablet-button: \f10a;
-$fa-var-building-lock: \e4d6;
-$fa-var-pizza-slice: \f818;
-$fa-var-money-bill-wave: \f53a;
-$fa-var-chart-area: \f1fe;
-$fa-var-area-chart: \f1fe;
-$fa-var-house-flag: \e50d;
-$fa-var-person-circle-minus: \e540;
-$fa-var-ban: \f05e;
-$fa-var-cancel: \f05e;
-$fa-var-camera-rotate: \e0d8;
-$fa-var-spray-can-sparkles: \f5d0;
-$fa-var-air-freshener: \f5d0;
-$fa-var-star: \f005;
-$fa-var-repeat: \f363;
-$fa-var-cross: \f654;
-$fa-var-box: \f466;
-$fa-var-venus-mars: \f228;
-$fa-var-arrow-pointer: \f245;
-$fa-var-mouse-pointer: \f245;
-$fa-var-maximize: \f31e;
-$fa-var-expand-arrows-alt: \f31e;
-$fa-var-charging-station: \f5e7;
-$fa-var-shapes: \f61f;
-$fa-var-triangle-circle-square: \f61f;
-$fa-var-shuffle: \f074;
-$fa-var-random: \f074;
-$fa-var-person-running: \f70c;
-$fa-var-running: \f70c;
-$fa-var-mobile-retro: \e527;
-$fa-var-grip-lines-vertical: \f7a5;
-$fa-var-spider: \f717;
-$fa-var-hands-bound: \e4f9;
-$fa-var-file-invoice-dollar: \f571;
-$fa-var-plane-circle-exclamation: \e556;
-$fa-var-x-ray: \f497;
-$fa-var-spell-check: \f891;
-$fa-var-slash: \f715;
-$fa-var-computer-mouse: \f8cc;
-$fa-var-mouse: \f8cc;
-$fa-var-arrow-right-to-bracket: \f090;
-$fa-var-sign-in: \f090;
-$fa-var-shop-slash: \e070;
-$fa-var-store-alt-slash: \e070;
-$fa-var-server: \f233;
-$fa-var-virus-covid-slash: \e4a9;
-$fa-var-shop-lock: \e4a5;
-$fa-var-hourglass-start: \f251;
-$fa-var-hourglass-1: \f251;
-$fa-var-blender-phone: \f6b6;
-$fa-var-building-wheat: \e4db;
-$fa-var-person-breastfeeding: \e53a;
-$fa-var-right-to-bracket: \f2f6;
-$fa-var-sign-in-alt: \f2f6;
-$fa-var-venus: \f221;
-$fa-var-passport: \f5ab;
-$fa-var-heart-pulse: \f21e;
-$fa-var-heartbeat: \f21e;
-$fa-var-people-carry-box: \f4ce;
-$fa-var-people-carry: \f4ce;
-$fa-var-temperature-high: \f769;
-$fa-var-microchip: \f2db;
-$fa-var-crown: \f521;
-$fa-var-weight-hanging: \f5cd;
-$fa-var-xmarks-lines: \e59a;
-$fa-var-file-prescription: \f572;
-$fa-var-weight-scale: \f496;
-$fa-var-weight: \f496;
-$fa-var-user-group: \f500;
-$fa-var-user-friends: \f500;
-$fa-var-arrow-up-a-z: \f15e;
-$fa-var-sort-alpha-up: \f15e;
-$fa-var-chess-knight: \f441;
-$fa-var-face-laugh-squint: \f59b;
-$fa-var-laugh-squint: \f59b;
-$fa-var-wheelchair: \f193;
-$fa-var-circle-arrow-up: \f0aa;
-$fa-var-arrow-circle-up: \f0aa;
-$fa-var-toggle-on: \f205;
-$fa-var-person-walking: \f554;
-$fa-var-walking: \f554;
-$fa-var-l: \4c;
-$fa-var-fire: \f06d;
-$fa-var-bed-pulse: \f487;
-$fa-var-procedures: \f487;
-$fa-var-shuttle-space: \f197;
-$fa-var-space-shuttle: \f197;
-$fa-var-face-laugh: \f599;
-$fa-var-laugh: \f599;
-$fa-var-folder-open: \f07c;
-$fa-var-heart-circle-plus: \e500;
-$fa-var-code-fork: \e13b;
-$fa-var-city: \f64f;
-$fa-var-microphone-lines: \f3c9;
-$fa-var-microphone-alt: \f3c9;
-$fa-var-pepper-hot: \f816;
-$fa-var-unlock: \f09c;
-$fa-var-colon-sign: \e140;
-$fa-var-headset: \f590;
-$fa-var-store-slash: \e071;
-$fa-var-road-circle-xmark: \e566;
-$fa-var-user-minus: \f503;
-$fa-var-mars-stroke-up: \f22a;
-$fa-var-mars-stroke-v: \f22a;
-$fa-var-champagne-glasses: \f79f;
-$fa-var-glass-cheers: \f79f;
-$fa-var-clipboard: \f328;
-$fa-var-house-circle-exclamation: \e50a;
-$fa-var-file-arrow-up: \f574;
-$fa-var-file-upload: \f574;
-$fa-var-wifi: \f1eb;
-$fa-var-wifi-3: \f1eb;
-$fa-var-wifi-strong: \f1eb;
-$fa-var-bath: \f2cd;
-$fa-var-bathtub: \f2cd;
-$fa-var-underline: \f0cd;
-$fa-var-user-pen: \f4ff;
-$fa-var-user-edit: \f4ff;
-$fa-var-signature: \f5b7;
-$fa-var-stroopwafel: \f551;
-$fa-var-bold: \f032;
-$fa-var-anchor-lock: \e4ad;
-$fa-var-building-ngo: \e4d7;
-$fa-var-manat-sign: \e1d5;
-$fa-var-not-equal: \f53e;
-$fa-var-border-top-left: \f853;
-$fa-var-border-style: \f853;
-$fa-var-map-location-dot: \f5a0;
-$fa-var-map-marked-alt: \f5a0;
-$fa-var-jedi: \f669;
-$fa-var-square-poll-vertical: \f681;
-$fa-var-poll: \f681;
-$fa-var-mug-hot: \f7b6;
-$fa-var-car-battery: \f5df;
-$fa-var-battery-car: \f5df;
-$fa-var-gift: \f06b;
-$fa-var-dice-two: \f528;
-$fa-var-chess-queen: \f445;
-$fa-var-glasses: \f530;
-$fa-var-chess-board: \f43c;
-$fa-var-building-circle-check: \e4d2;
-$fa-var-person-chalkboard: \e53d;
-$fa-var-mars-stroke-right: \f22b;
-$fa-var-mars-stroke-h: \f22b;
-$fa-var-hand-back-fist: \f255;
-$fa-var-hand-rock: \f255;
-$fa-var-square-caret-up: \f151;
-$fa-var-caret-square-up: \f151;
-$fa-var-cloud-showers-water: \e4e4;
-$fa-var-chart-bar: \f080;
-$fa-var-bar-chart: \f080;
-$fa-var-hands-bubbles: \e05e;
-$fa-var-hands-wash: \e05e;
-$fa-var-less-than-equal: \f537;
-$fa-var-train: \f238;
-$fa-var-eye-low-vision: \f2a8;
-$fa-var-low-vision: \f2a8;
-$fa-var-crow: \f520;
-$fa-var-sailboat: \e445;
-$fa-var-window-restore: \f2d2;
-$fa-var-square-plus: \f0fe;
-$fa-var-plus-square: \f0fe;
-$fa-var-torii-gate: \f6a1;
-$fa-var-frog: \f52e;
-$fa-var-bucket: \e4cf;
-$fa-var-image: \f03e;
-$fa-var-microphone: \f130;
-$fa-var-cow: \f6c8;
-$fa-var-caret-up: \f0d8;
-$fa-var-screwdriver: \f54a;
-$fa-var-folder-closed: \e185;
-$fa-var-house-tsunami: \e515;
-$fa-var-square-nfi: \e576;
-$fa-var-arrow-up-from-ground-water: \e4b5;
-$fa-var-martini-glass: \f57b;
-$fa-var-glass-martini-alt: \f57b;
-$fa-var-rotate-left: \f2ea;
-$fa-var-rotate-back: \f2ea;
-$fa-var-rotate-backward: \f2ea;
-$fa-var-undo-alt: \f2ea;
-$fa-var-table-columns: \f0db;
-$fa-var-columns: \f0db;
-$fa-var-lemon: \f094;
-$fa-var-head-side-mask: \e063;
-$fa-var-handshake: \f2b5;
-$fa-var-gem: \f3a5;
-$fa-var-dolly: \f472;
-$fa-var-dolly-box: \f472;
-$fa-var-smoking: \f48d;
-$fa-var-minimize: \f78c;
-$fa-var-compress-arrows-alt: \f78c;
-$fa-var-monument: \f5a6;
-$fa-var-snowplow: \f7d2;
-$fa-var-angles-right: \f101;
-$fa-var-angle-double-right: \f101;
-$fa-var-cannabis: \f55f;
-$fa-var-circle-play: \f144;
-$fa-var-play-circle: \f144;
-$fa-var-tablets: \f490;
-$fa-var-ethernet: \f796;
-$fa-var-euro-sign: \f153;
-$fa-var-eur: \f153;
-$fa-var-euro: \f153;
-$fa-var-chair: \f6c0;
-$fa-var-circle-check: \f058;
-$fa-var-check-circle: \f058;
-$fa-var-circle-stop: \f28d;
-$fa-var-stop-circle: \f28d;
-$fa-var-compass-drafting: \f568;
-$fa-var-drafting-compass: \f568;
-$fa-var-plate-wheat: \e55a;
-$fa-var-icicles: \f7ad;
-$fa-var-person-shelter: \e54f;
-$fa-var-neuter: \f22c;
-$fa-var-id-badge: \f2c1;
-$fa-var-marker: \f5a1;
-$fa-var-face-laugh-beam: \f59a;
-$fa-var-laugh-beam: \f59a;
-$fa-var-helicopter-symbol: \e502;
-$fa-var-universal-access: \f29a;
-$fa-var-circle-chevron-up: \f139;
-$fa-var-chevron-circle-up: \f139;
-$fa-var-lari-sign: \e1c8;
-$fa-var-volcano: \f770;
-$fa-var-person-walking-dashed-line-arrow-right: \e553;
-$fa-var-sterling-sign: \f154;
-$fa-var-gbp: \f154;
-$fa-var-pound-sign: \f154;
-$fa-var-viruses: \e076;
-$fa-var-square-person-confined: \e577;
-$fa-var-user-tie: \f508;
-$fa-var-arrow-down-long: \f175;
-$fa-var-long-arrow-down: \f175;
-$fa-var-tent-arrow-down-to-line: \e57e;
-$fa-var-certificate: \f0a3;
-$fa-var-reply-all: \f122;
-$fa-var-mail-reply-all: \f122;
-$fa-var-suitcase: \f0f2;
-$fa-var-person-skating: \f7c5;
-$fa-var-skating: \f7c5;
-$fa-var-filter-circle-dollar: \f662;
-$fa-var-funnel-dollar: \f662;
-$fa-var-camera-retro: \f083;
-$fa-var-circle-arrow-down: \f0ab;
-$fa-var-arrow-circle-down: \f0ab;
-$fa-var-file-import: \f56f;
-$fa-var-arrow-right-to-file: \f56f;
-$fa-var-square-arrow-up-right: \f14c;
-$fa-var-external-link-square: \f14c;
-$fa-var-box-open: \f49e;
-$fa-var-scroll: \f70e;
-$fa-var-spa: \f5bb;
-$fa-var-location-pin-lock: \e51f;
-$fa-var-pause: \f04c;
-$fa-var-hill-avalanche: \e507;
-$fa-var-temperature-empty: \f2cb;
-$fa-var-temperature-0: \f2cb;
-$fa-var-thermometer-0: \f2cb;
-$fa-var-thermometer-empty: \f2cb;
-$fa-var-bomb: \f1e2;
-$fa-var-registered: \f25d;
-$fa-var-address-card: \f2bb;
-$fa-var-contact-card: \f2bb;
-$fa-var-vcard: \f2bb;
-$fa-var-scale-unbalanced-flip: \f516;
-$fa-var-balance-scale-right: \f516;
-$fa-var-subscript: \f12c;
-$fa-var-diamond-turn-right: \f5eb;
-$fa-var-directions: \f5eb;
-$fa-var-burst: \e4dc;
-$fa-var-house-laptop: \e066;
-$fa-var-laptop-house: \e066;
-$fa-var-face-tired: \f5c8;
-$fa-var-tired: \f5c8;
-$fa-var-money-bills: \e1f3;
-$fa-var-smog: \f75f;
-$fa-var-crutch: \f7f7;
-$fa-var-cloud-arrow-up: \f0ee;
-$fa-var-cloud-upload: \f0ee;
-$fa-var-cloud-upload-alt: \f0ee;
-$fa-var-palette: \f53f;
-$fa-var-arrows-turn-right: \e4c0;
-$fa-var-vest: \e085;
-$fa-var-ferry: \e4ea;
-$fa-var-arrows-down-to-people: \e4b9;
-$fa-var-seedling: \f4d8;
-$fa-var-sprout: \f4d8;
-$fa-var-left-right: \f337;
-$fa-var-arrows-alt-h: \f337;
-$fa-var-boxes-packing: \e4c7;
-$fa-var-circle-arrow-left: \f0a8;
-$fa-var-arrow-circle-left: \f0a8;
-$fa-var-group-arrows-rotate: \e4f6;
-$fa-var-bowl-food: \e4c6;
-$fa-var-candy-cane: \f786;
-$fa-var-arrow-down-wide-short: \f160;
-$fa-var-sort-amount-asc: \f160;
-$fa-var-sort-amount-down: \f160;
-$fa-var-cloud-bolt: \f76c;
-$fa-var-thunderstorm: \f76c;
-$fa-var-text-slash: \f87d;
-$fa-var-remove-format: \f87d;
-$fa-var-face-smile-wink: \f4da;
-$fa-var-smile-wink: \f4da;
-$fa-var-file-word: \f1c2;
-$fa-var-file-powerpoint: \f1c4;
-$fa-var-arrows-left-right: \f07e;
-$fa-var-arrows-h: \f07e;
-$fa-var-house-lock: \e510;
-$fa-var-cloud-arrow-down: \f0ed;
-$fa-var-cloud-download: \f0ed;
-$fa-var-cloud-download-alt: \f0ed;
-$fa-var-children: \e4e1;
-$fa-var-chalkboard: \f51b;
-$fa-var-blackboard: \f51b;
-$fa-var-user-large-slash: \f4fa;
-$fa-var-user-alt-slash: \f4fa;
-$fa-var-envelope-open: \f2b6;
-$fa-var-handshake-simple-slash: \e05f;
-$fa-var-handshake-alt-slash: \e05f;
-$fa-var-mattress-pillow: \e525;
-$fa-var-guarani-sign: \e19a;
-$fa-var-arrows-rotate: \f021;
-$fa-var-refresh: \f021;
-$fa-var-sync: \f021;
-$fa-var-fire-extinguisher: \f134;
-$fa-var-cruzeiro-sign: \e152;
-$fa-var-greater-than-equal: \f532;
-$fa-var-shield-halved: \f3ed;
-$fa-var-shield-alt: \f3ed;
-$fa-var-book-atlas: \f558;
-$fa-var-atlas: \f558;
-$fa-var-virus: \e074;
-$fa-var-envelope-circle-check: \e4e8;
-$fa-var-layer-group: \f5fd;
-$fa-var-arrows-to-dot: \e4be;
-$fa-var-archway: \f557;
-$fa-var-heart-circle-check: \e4fd;
-$fa-var-house-chimney-crack: \f6f1;
-$fa-var-house-damage: \f6f1;
-$fa-var-file-zipper: \f1c6;
-$fa-var-file-archive: \f1c6;
-$fa-var-square: \f0c8;
-$fa-var-martini-glass-empty: \f000;
-$fa-var-glass-martini: \f000;
-$fa-var-couch: \f4b8;
-$fa-var-cedi-sign: \e0df;
-$fa-var-italic: \f033;
-$fa-var-church: \f51d;
-$fa-var-comments-dollar: \f653;
-$fa-var-democrat: \f747;
-$fa-var-z: \5a;
-$fa-var-person-skiing: \f7c9;
-$fa-var-skiing: \f7c9;
-$fa-var-road-lock: \e567;
-$fa-var-a: \41;
-$fa-var-temperature-arrow-down: \e03f;
-$fa-var-temperature-down: \e03f;
-$fa-var-feather-pointed: \f56b;
-$fa-var-feather-alt: \f56b;
-$fa-var-p: \50;
-$fa-var-snowflake: \f2dc;
-$fa-var-newspaper: \f1ea;
-$fa-var-rectangle-ad: \f641;
-$fa-var-ad: \f641;
-$fa-var-circle-arrow-right: \f0a9;
-$fa-var-arrow-circle-right: \f0a9;
-$fa-var-filter-circle-xmark: \e17b;
-$fa-var-locust: \e520;
-$fa-var-sort: \f0dc;
-$fa-var-unsorted: \f0dc;
-$fa-var-list-ol: \f0cb;
-$fa-var-list-1-2: \f0cb;
-$fa-var-list-numeric: \f0cb;
-$fa-var-person-dress-burst: \e544;
-$fa-var-money-check-dollar: \f53d;
-$fa-var-money-check-alt: \f53d;
-$fa-var-vector-square: \f5cb;
-$fa-var-bread-slice: \f7ec;
-$fa-var-language: \f1ab;
-$fa-var-face-kiss-wink-heart: \f598;
-$fa-var-kiss-wink-heart: \f598;
-$fa-var-filter: \f0b0;
-$fa-var-question: \3f;
-$fa-var-file-signature: \f573;
-$fa-var-up-down-left-right: \f0b2;
-$fa-var-arrows-alt: \f0b2;
-$fa-var-house-chimney-user: \e065;
-$fa-var-hand-holding-heart: \f4be;
-$fa-var-puzzle-piece: \f12e;
-$fa-var-money-check: \f53c;
-$fa-var-star-half-stroke: \f5c0;
-$fa-var-star-half-alt: \f5c0;
-$fa-var-code: \f121;
-$fa-var-whiskey-glass: \f7a0;
-$fa-var-glass-whiskey: \f7a0;
-$fa-var-building-circle-exclamation: \e4d3;
-$fa-var-magnifying-glass-chart: \e522;
-$fa-var-arrow-up-right-from-square: \f08e;
-$fa-var-external-link: \f08e;
-$fa-var-cubes-stacked: \e4e6;
-$fa-var-won-sign: \f159;
-$fa-var-krw: \f159;
-$fa-var-won: \f159;
-$fa-var-virus-covid: \e4a8;
-$fa-var-austral-sign: \e0a9;
-$fa-var-f: \46;
-$fa-var-leaf: \f06c;
-$fa-var-road: \f018;
-$fa-var-taxi: \f1ba;
-$fa-var-cab: \f1ba;
-$fa-var-person-circle-plus: \e541;
-$fa-var-chart-pie: \f200;
-$fa-var-pie-chart: \f200;
-$fa-var-bolt-lightning: \e0b7;
-$fa-var-sack-xmark: \e56a;
-$fa-var-file-excel: \f1c3;
-$fa-var-file-contract: \f56c;
-$fa-var-fish-fins: \e4f2;
-$fa-var-building-flag: \e4d5;
-$fa-var-face-grin-beam: \f582;
-$fa-var-grin-beam: \f582;
-$fa-var-object-ungroup: \f248;
-$fa-var-poop: \f619;
-$fa-var-location-pin: \f041;
-$fa-var-map-marker: \f041;
-$fa-var-kaaba: \f66b;
-$fa-var-toilet-paper: \f71e;
-$fa-var-helmet-safety: \f807;
-$fa-var-hard-hat: \f807;
-$fa-var-hat-hard: \f807;
-$fa-var-eject: \f052;
-$fa-var-circle-right: \f35a;
-$fa-var-arrow-alt-circle-right: \f35a;
-$fa-var-plane-circle-check: \e555;
-$fa-var-face-rolling-eyes: \f5a5;
-$fa-var-meh-rolling-eyes: \f5a5;
-$fa-var-object-group: \f247;
-$fa-var-chart-line: \f201;
-$fa-var-line-chart: \f201;
-$fa-var-mask-ventilator: \e524;
-$fa-var-arrow-right: \f061;
-$fa-var-signs-post: \f277;
-$fa-var-map-signs: \f277;
-$fa-var-cash-register: \f788;
-$fa-var-person-circle-question: \e542;
-$fa-var-h: \48;
-$fa-var-tarp: \e57b;
-$fa-var-screwdriver-wrench: \f7d9;
-$fa-var-tools: \f7d9;
-$fa-var-arrows-to-eye: \e4bf;
-$fa-var-plug-circle-bolt: \e55b;
-$fa-var-heart: \f004;
-$fa-var-mars-and-venus: \f224;
-$fa-var-house-user: \e1b0;
-$fa-var-home-user: \e1b0;
-$fa-var-dumpster-fire: \f794;
-$fa-var-house-crack: \e3b1;
-$fa-var-martini-glass-citrus: \f561;
-$fa-var-cocktail: \f561;
-$fa-var-face-surprise: \f5c2;
-$fa-var-surprise: \f5c2;
-$fa-var-bottle-water: \e4c5;
-$fa-var-circle-pause: \f28b;
-$fa-var-pause-circle: \f28b;
-$fa-var-toilet-paper-slash: \e072;
-$fa-var-apple-whole: \f5d1;
-$fa-var-apple-alt: \f5d1;
-$fa-var-kitchen-set: \e51a;
-$fa-var-r: \52;
-$fa-var-temperature-quarter: \f2ca;
-$fa-var-temperature-1: \f2ca;
-$fa-var-thermometer-1: \f2ca;
-$fa-var-thermometer-quarter: \f2ca;
-$fa-var-cube: \f1b2;
-$fa-var-bitcoin-sign: \e0b4;
-$fa-var-shield-dog: \e573;
-$fa-var-solar-panel: \f5ba;
-$fa-var-lock-open: \f3c1;
-$fa-var-elevator: \e16d;
-$fa-var-money-bill-transfer: \e528;
-$fa-var-money-bill-trend-up: \e529;
-$fa-var-house-flood-water-circle-arrow-right: \e50f;
-$fa-var-square-poll-horizontal: \f682;
-$fa-var-poll-h: \f682;
-$fa-var-circle: \f111;
-$fa-var-backward-fast: \f049;
-$fa-var-fast-backward: \f049;
-$fa-var-recycle: \f1b8;
-$fa-var-user-astronaut: \f4fb;
-$fa-var-plane-slash: \e069;
-$fa-var-trademark: \f25c;
-$fa-var-basketball: \f434;
-$fa-var-basketball-ball: \f434;
-$fa-var-satellite-dish: \f7c0;
-$fa-var-circle-up: \f35b;
-$fa-var-arrow-alt-circle-up: \f35b;
-$fa-var-mobile-screen-button: \f3cd;
-$fa-var-mobile-alt: \f3cd;
-$fa-var-volume-high: \f028;
-$fa-var-volume-up: \f028;
-$fa-var-users-rays: \e593;
-$fa-var-wallet: \f555;
-$fa-var-clipboard-check: \f46c;
-$fa-var-file-audio: \f1c7;
-$fa-var-burger: \f805;
-$fa-var-hamburger: \f805;
-$fa-var-wrench: \f0ad;
-$fa-var-bugs: \e4d0;
-$fa-var-rupee-sign: \f156;
-$fa-var-rupee: \f156;
-$fa-var-file-image: \f1c5;
-$fa-var-circle-question: \f059;
-$fa-var-question-circle: \f059;
-$fa-var-plane-departure: \f5b0;
-$fa-var-handshake-slash: \e060;
-$fa-var-book-bookmark: \e0bb;
-$fa-var-code-branch: \f126;
-$fa-var-hat-cowboy: \f8c0;
-$fa-var-bridge: \e4c8;
-$fa-var-phone-flip: \f879;
-$fa-var-phone-alt: \f879;
-$fa-var-truck-front: \e2b7;
-$fa-var-cat: \f6be;
-$fa-var-anchor-circle-exclamation: \e4ab;
-$fa-var-truck-field: \e58d;
-$fa-var-route: \f4d7;
-$fa-var-clipboard-question: \e4e3;
-$fa-var-panorama: \e209;
-$fa-var-comment-medical: \f7f5;
-$fa-var-teeth-open: \f62f;
-$fa-var-file-circle-minus: \e4ed;
-$fa-var-tags: \f02c;
-$fa-var-wine-glass: \f4e3;
-$fa-var-forward-fast: \f050;
-$fa-var-fast-forward: \f050;
-$fa-var-face-meh-blank: \f5a4;
-$fa-var-meh-blank: \f5a4;
-$fa-var-square-parking: \f540;
-$fa-var-parking: \f540;
-$fa-var-house-signal: \e012;
-$fa-var-bars-progress: \f828;
-$fa-var-tasks-alt: \f828;
-$fa-var-faucet-drip: \e006;
-$fa-var-cart-flatbed: \f474;
-$fa-var-dolly-flatbed: \f474;
-$fa-var-ban-smoking: \f54d;
-$fa-var-smoking-ban: \f54d;
-$fa-var-terminal: \f120;
-$fa-var-mobile-button: \f10b;
-$fa-var-house-medical-flag: \e514;
-$fa-var-basket-shopping: \f291;
-$fa-var-shopping-basket: \f291;
-$fa-var-tape: \f4db;
-$fa-var-bus-simple: \f55e;
-$fa-var-bus-alt: \f55e;
-$fa-var-eye: \f06e;
-$fa-var-face-sad-cry: \f5b3;
-$fa-var-sad-cry: \f5b3;
-$fa-var-audio-description: \f29e;
-$fa-var-person-military-to-person: \e54c;
-$fa-var-file-shield: \e4f0;
-$fa-var-user-slash: \f506;
-$fa-var-pen: \f304;
-$fa-var-tower-observation: \e586;
-$fa-var-file-code: \f1c9;
-$fa-var-signal: \f012;
-$fa-var-signal-5: \f012;
-$fa-var-signal-perfect: \f012;
-$fa-var-bus: \f207;
-$fa-var-heart-circle-xmark: \e501;
-$fa-var-house-chimney: \e3af;
-$fa-var-home-lg: \e3af;
-$fa-var-window-maximize: \f2d0;
-$fa-var-face-frown: \f119;
-$fa-var-frown: \f119;
-$fa-var-prescription: \f5b1;
-$fa-var-shop: \f54f;
-$fa-var-store-alt: \f54f;
-$fa-var-floppy-disk: \f0c7;
-$fa-var-save: \f0c7;
-$fa-var-vihara: \f6a7;
-$fa-var-scale-unbalanced: \f515;
-$fa-var-balance-scale-left: \f515;
-$fa-var-sort-up: \f0de;
-$fa-var-sort-asc: \f0de;
-$fa-var-comment-dots: \f4ad;
-$fa-var-commenting: \f4ad;
-$fa-var-plant-wilt: \e5aa;
-$fa-var-diamond: \f219;
-$fa-var-face-grin-squint: \f585;
-$fa-var-grin-squint: \f585;
-$fa-var-hand-holding-dollar: \f4c0;
-$fa-var-hand-holding-usd: \f4c0;
-$fa-var-bacterium: \e05a;
-$fa-var-hand-pointer: \f25a;
-$fa-var-drum-steelpan: \f56a;
-$fa-var-hand-scissors: \f257;
-$fa-var-hands-praying: \f684;
-$fa-var-praying-hands: \f684;
-$fa-var-arrow-rotate-right: \f01e;
-$fa-var-arrow-right-rotate: \f01e;
-$fa-var-arrow-rotate-forward: \f01e;
-$fa-var-redo: \f01e;
-$fa-var-biohazard: \f780;
-$fa-var-location-crosshairs: \f601;
-$fa-var-location: \f601;
-$fa-var-mars-double: \f227;
-$fa-var-child-dress: \e59c;
-$fa-var-users-between-lines: \e591;
-$fa-var-lungs-virus: \e067;
-$fa-var-face-grin-tears: \f588;
-$fa-var-grin-tears: \f588;
-$fa-var-phone: \f095;
-$fa-var-calendar-xmark: \f273;
-$fa-var-calendar-times: \f273;
-$fa-var-child-reaching: \e59d;
-$fa-var-head-side-virus: \e064;
-$fa-var-user-gear: \f4fe;
-$fa-var-user-cog: \f4fe;
-$fa-var-arrow-up-1-9: \f163;
-$fa-var-sort-numeric-up: \f163;
-$fa-var-door-closed: \f52a;
-$fa-var-shield-virus: \e06c;
-$fa-var-dice-six: \f526;
-$fa-var-mosquito-net: \e52c;
-$fa-var-bridge-water: \e4ce;
-$fa-var-person-booth: \f756;
-$fa-var-text-width: \f035;
-$fa-var-hat-wizard: \f6e8;
-$fa-var-pen-fancy: \f5ac;
-$fa-var-person-digging: \f85e;
-$fa-var-digging: \f85e;
-$fa-var-trash: \f1f8;
-$fa-var-gauge-simple: \f629;
-$fa-var-gauge-simple-med: \f629;
-$fa-var-tachometer-average: \f629;
-$fa-var-book-medical: \f7e6;
-$fa-var-poo: \f2fe;
-$fa-var-quote-right: \f10e;
-$fa-var-quote-right-alt: \f10e;
-$fa-var-shirt: \f553;
-$fa-var-t-shirt: \f553;
-$fa-var-tshirt: \f553;
-$fa-var-cubes: \f1b3;
-$fa-var-divide: \f529;
-$fa-var-tenge-sign: \f7d7;
-$fa-var-tenge: \f7d7;
-$fa-var-headphones: \f025;
-$fa-var-hands-holding: \f4c2;
-$fa-var-hands-clapping: \e1a8;
-$fa-var-republican: \f75e;
-$fa-var-arrow-left: \f060;
-$fa-var-person-circle-xmark: \e543;
-$fa-var-ruler: \f545;
-$fa-var-align-left: \f036;
-$fa-var-dice-d6: \f6d1;
-$fa-var-restroom: \f7bd;
-$fa-var-j: \4a;
-$fa-var-users-viewfinder: \e595;
-$fa-var-file-video: \f1c8;
-$fa-var-up-right-from-square: \f35d;
-$fa-var-external-link-alt: \f35d;
-$fa-var-table-cells: \f00a;
-$fa-var-th: \f00a;
-$fa-var-file-pdf: \f1c1;
-$fa-var-book-bible: \f647;
-$fa-var-bible: \f647;
-$fa-var-o: \4f;
-$fa-var-suitcase-medical: \f0fa;
-$fa-var-medkit: \f0fa;
-$fa-var-user-secret: \f21b;
-$fa-var-otter: \f700;
-$fa-var-person-dress: \f182;
-$fa-var-female: \f182;
-$fa-var-comment-dollar: \f651;
-$fa-var-business-time: \f64a;
-$fa-var-briefcase-clock: \f64a;
-$fa-var-table-cells-large: \f009;
-$fa-var-th-large: \f009;
-$fa-var-book-tanakh: \f827;
-$fa-var-tanakh: \f827;
-$fa-var-phone-volume: \f2a0;
-$fa-var-volume-control-phone: \f2a0;
-$fa-var-hat-cowboy-side: \f8c1;
-$fa-var-clipboard-user: \f7f3;
-$fa-var-child: \f1ae;
-$fa-var-lira-sign: \f195;
-$fa-var-satellite: \f7bf;
-$fa-var-plane-lock: \e558;
-$fa-var-tag: \f02b;
-$fa-var-comment: \f075;
-$fa-var-cake-candles: \f1fd;
-$fa-var-birthday-cake: \f1fd;
-$fa-var-cake: \f1fd;
-$fa-var-envelope: \f0e0;
-$fa-var-angles-up: \f102;
-$fa-var-angle-double-up: \f102;
-$fa-var-paperclip: \f0c6;
-$fa-var-arrow-right-to-city: \e4b3;
-$fa-var-ribbon: \f4d6;
-$fa-var-lungs: \f604;
-$fa-var-arrow-up-9-1: \f887;
-$fa-var-sort-numeric-up-alt: \f887;
-$fa-var-litecoin-sign: \e1d3;
-$fa-var-border-none: \f850;
-$fa-var-circle-nodes: \e4e2;
-$fa-var-parachute-box: \f4cd;
-$fa-var-indent: \f03c;
-$fa-var-truck-field-un: \e58e;
-$fa-var-hourglass: \f254;
-$fa-var-hourglass-empty: \f254;
-$fa-var-mountain: \f6fc;
-$fa-var-user-doctor: \f0f0;
-$fa-var-user-md: \f0f0;
-$fa-var-circle-info: \f05a;
-$fa-var-info-circle: \f05a;
-$fa-var-cloud-meatball: \f73b;
-$fa-var-camera: \f030;
-$fa-var-camera-alt: \f030;
-$fa-var-square-virus: \e578;
-$fa-var-meteor: \f753;
-$fa-var-car-on: \e4dd;
-$fa-var-sleigh: \f7cc;
-$fa-var-arrow-down-1-9: \f162;
-$fa-var-sort-numeric-asc: \f162;
-$fa-var-sort-numeric-down: \f162;
-$fa-var-hand-holding-droplet: \f4c1;
-$fa-var-hand-holding-water: \f4c1;
-$fa-var-water: \f773;
-$fa-var-calendar-check: \f274;
-$fa-var-braille: \f2a1;
-$fa-var-prescription-bottle-medical: \f486;
-$fa-var-prescription-bottle-alt: \f486;
-$fa-var-landmark: \f66f;
-$fa-var-truck: \f0d1;
-$fa-var-crosshairs: \f05b;
-$fa-var-person-cane: \e53c;
-$fa-var-tent: \e57d;
-$fa-var-vest-patches: \e086;
-$fa-var-check-double: \f560;
-$fa-var-arrow-down-a-z: \f15d;
-$fa-var-sort-alpha-asc: \f15d;
-$fa-var-sort-alpha-down: \f15d;
-$fa-var-money-bill-wheat: \e52a;
-$fa-var-cookie: \f563;
-$fa-var-arrow-rotate-left: \f0e2;
-$fa-var-arrow-left-rotate: \f0e2;
-$fa-var-arrow-rotate-back: \f0e2;
-$fa-var-arrow-rotate-backward: \f0e2;
-$fa-var-undo: \f0e2;
-$fa-var-hard-drive: \f0a0;
-$fa-var-hdd: \f0a0;
-$fa-var-face-grin-squint-tears: \f586;
-$fa-var-grin-squint-tears: \f586;
-$fa-var-dumbbell: \f44b;
-$fa-var-rectangle-list: \f022;
-$fa-var-list-alt: \f022;
-$fa-var-tarp-droplet: \e57c;
-$fa-var-house-medical-circle-check: \e511;
-$fa-var-person-skiing-nordic: \f7ca;
-$fa-var-skiing-nordic: \f7ca;
-$fa-var-calendar-plus: \f271;
-$fa-var-plane-arrival: \f5af;
-$fa-var-circle-left: \f359;
-$fa-var-arrow-alt-circle-left: \f359;
-$fa-var-train-subway: \f239;
-$fa-var-subway: \f239;
-$fa-var-chart-gantt: \e0e4;
-$fa-var-indian-rupee-sign: \e1bc;
-$fa-var-indian-rupee: \e1bc;
-$fa-var-inr: \e1bc;
-$fa-var-crop-simple: \f565;
-$fa-var-crop-alt: \f565;
-$fa-var-money-bill-1: \f3d1;
-$fa-var-money-bill-alt: \f3d1;
-$fa-var-left-long: \f30a;
-$fa-var-long-arrow-alt-left: \f30a;
-$fa-var-dna: \f471;
-$fa-var-virus-slash: \e075;
-$fa-var-minus: \f068;
-$fa-var-subtract: \f068;
-$fa-var-chess: \f439;
-$fa-var-arrow-left-long: \f177;
-$fa-var-long-arrow-left: \f177;
-$fa-var-plug-circle-check: \e55c;
-$fa-var-street-view: \f21d;
-$fa-var-franc-sign: \e18f;
-$fa-var-volume-off: \f026;
-$fa-var-hands-asl-interpreting: \f2a3;
-$fa-var-american-sign-language-interpreting: \f2a3;
-$fa-var-asl-interpreting: \f2a3;
-$fa-var-hands-american-sign-language-interpreting: \f2a3;
-$fa-var-gear: \f013;
-$fa-var-cog: \f013;
-$fa-var-droplet-slash: \f5c7;
-$fa-var-tint-slash: \f5c7;
-$fa-var-mosque: \f678;
-$fa-var-mosquito: \e52b;
-$fa-var-star-of-david: \f69a;
-$fa-var-person-military-rifle: \e54b;
-$fa-var-cart-shopping: \f07a;
-$fa-var-shopping-cart: \f07a;
-$fa-var-vials: \f493;
-$fa-var-plug-circle-plus: \e55f;
-$fa-var-place-of-worship: \f67f;
-$fa-var-grip-vertical: \f58e;
-$fa-var-arrow-turn-up: \f148;
-$fa-var-level-up: \f148;
-$fa-var-u: \55;
-$fa-var-square-root-variable: \f698;
-$fa-var-square-root-alt: \f698;
-$fa-var-clock: \f017;
-$fa-var-clock-four: \f017;
-$fa-var-backward-step: \f048;
-$fa-var-step-backward: \f048;
-$fa-var-pallet: \f482;
-$fa-var-faucet: \e005;
-$fa-var-baseball-bat-ball: \f432;
-$fa-var-s: \53;
-$fa-var-timeline: \e29c;
-$fa-var-keyboard: \f11c;
-$fa-var-caret-down: \f0d7;
-$fa-var-house-chimney-medical: \f7f2;
-$fa-var-clinic-medical: \f7f2;
-$fa-var-temperature-three-quarters: \f2c8;
-$fa-var-temperature-3: \f2c8;
-$fa-var-thermometer-3: \f2c8;
-$fa-var-thermometer-three-quarters: \f2c8;
-$fa-var-mobile-screen: \f3cf;
-$fa-var-mobile-android-alt: \f3cf;
-$fa-var-plane-up: \e22d;
-$fa-var-piggy-bank: \f4d3;
-$fa-var-battery-half: \f242;
-$fa-var-battery-3: \f242;
-$fa-var-mountain-city: \e52e;
-$fa-var-coins: \f51e;
-$fa-var-khanda: \f66d;
-$fa-var-sliders: \f1de;
-$fa-var-sliders-h: \f1de;
-$fa-var-folder-tree: \f802;
-$fa-var-network-wired: \f6ff;
-$fa-var-map-pin: \f276;
-$fa-var-hamsa: \f665;
-$fa-var-cent-sign: \e3f5;
-$fa-var-flask: \f0c3;
-$fa-var-person-pregnant: \e31e;
-$fa-var-wand-sparkles: \f72b;
-$fa-var-ellipsis-vertical: \f142;
-$fa-var-ellipsis-v: \f142;
-$fa-var-ticket: \f145;
-$fa-var-power-off: \f011;
-$fa-var-right-long: \f30b;
-$fa-var-long-arrow-alt-right: \f30b;
-$fa-var-flag-usa: \f74d;
-$fa-var-laptop-file: \e51d;
-$fa-var-tty: \f1e4;
-$fa-var-teletype: \f1e4;
-$fa-var-diagram-next: \e476;
-$fa-var-person-rifle: \e54e;
-$fa-var-house-medical-circle-exclamation: \e512;
-$fa-var-closed-captioning: \f20a;
-$fa-var-person-hiking: \f6ec;
-$fa-var-hiking: \f6ec;
-$fa-var-venus-double: \f226;
-$fa-var-images: \f302;
-$fa-var-calculator: \f1ec;
-$fa-var-people-pulling: \e535;
-$fa-var-n: \4e;
-$fa-var-cable-car: \f7da;
-$fa-var-tram: \f7da;
-$fa-var-cloud-rain: \f73d;
-$fa-var-building-circle-xmark: \e4d4;
-$fa-var-ship: \f21a;
-$fa-var-arrows-down-to-line: \e4b8;
-$fa-var-download: \f019;
-$fa-var-face-grin: \f580;
-$fa-var-grin: \f580;
-$fa-var-delete-left: \f55a;
-$fa-var-backspace: \f55a;
-$fa-var-eye-dropper: \f1fb;
-$fa-var-eye-dropper-empty: \f1fb;
-$fa-var-eyedropper: \f1fb;
-$fa-var-file-circle-check: \e5a0;
-$fa-var-forward: \f04e;
-$fa-var-mobile: \f3ce;
-$fa-var-mobile-android: \f3ce;
-$fa-var-mobile-phone: \f3ce;
-$fa-var-face-meh: \f11a;
-$fa-var-meh: \f11a;
-$fa-var-align-center: \f037;
-$fa-var-book-skull: \f6b7;
-$fa-var-book-dead: \f6b7;
-$fa-var-id-card: \f2c2;
-$fa-var-drivers-license: \f2c2;
-$fa-var-outdent: \f03b;
-$fa-var-dedent: \f03b;
-$fa-var-heart-circle-exclamation: \e4fe;
-$fa-var-house: \f015;
-$fa-var-home: \f015;
-$fa-var-home-alt: \f015;
-$fa-var-home-lg-alt: \f015;
-$fa-var-calendar-week: \f784;
-$fa-var-laptop-medical: \f812;
-$fa-var-b: \42;
-$fa-var-file-medical: \f477;
-$fa-var-dice-one: \f525;
-$fa-var-kiwi-bird: \f535;
-$fa-var-arrow-right-arrow-left: \f0ec;
-$fa-var-exchange: \f0ec;
-$fa-var-rotate-right: \f2f9;
-$fa-var-redo-alt: \f2f9;
-$fa-var-rotate-forward: \f2f9;
-$fa-var-utensils: \f2e7;
-$fa-var-cutlery: \f2e7;
-$fa-var-arrow-up-wide-short: \f161;
-$fa-var-sort-amount-up: \f161;
-$fa-var-mill-sign: \e1ed;
-$fa-var-bowl-rice: \e2eb;
-$fa-var-skull: \f54c;
-$fa-var-tower-broadcast: \f519;
-$fa-var-broadcast-tower: \f519;
-$fa-var-truck-pickup: \f63c;
-$fa-var-up-long: \f30c;
-$fa-var-long-arrow-alt-up: \f30c;
-$fa-var-stop: \f04d;
-$fa-var-code-merge: \f387;
-$fa-var-upload: \f093;
-$fa-var-hurricane: \f751;
-$fa-var-mound: \e52d;
-$fa-var-toilet-portable: \e583;
-$fa-var-compact-disc: \f51f;
-$fa-var-file-arrow-down: \f56d;
-$fa-var-file-download: \f56d;
-$fa-var-caravan: \f8ff;
-$fa-var-shield-cat: \e572;
-$fa-var-bolt: \f0e7;
-$fa-var-zap: \f0e7;
-$fa-var-glass-water: \e4f4;
-$fa-var-oil-well: \e532;
-$fa-var-vault: \e2c5;
-$fa-var-mars: \f222;
-$fa-var-toilet: \f7d8;
-$fa-var-plane-circle-xmark: \e557;
-$fa-var-yen-sign: \f157;
-$fa-var-cny: \f157;
-$fa-var-jpy: \f157;
-$fa-var-rmb: \f157;
-$fa-var-yen: \f157;
-$fa-var-ruble-sign: \f158;
-$fa-var-rouble: \f158;
-$fa-var-rub: \f158;
-$fa-var-ruble: \f158;
-$fa-var-sun: \f185;
-$fa-var-guitar: \f7a6;
-$fa-var-face-laugh-wink: \f59c;
-$fa-var-laugh-wink: \f59c;
-$fa-var-horse-head: \f7ab;
-$fa-var-bore-hole: \e4c3;
-$fa-var-industry: \f275;
-$fa-var-circle-down: \f358;
-$fa-var-arrow-alt-circle-down: \f358;
-$fa-var-arrows-turn-to-dots: \e4c1;
-$fa-var-florin-sign: \e184;
-$fa-var-arrow-down-short-wide: \f884;
-$fa-var-sort-amount-desc: \f884;
-$fa-var-sort-amount-down-alt: \f884;
-$fa-var-less-than: \3c;
-$fa-var-angle-down: \f107;
-$fa-var-car-tunnel: \e4de;
-$fa-var-head-side-cough: \e061;
-$fa-var-grip-lines: \f7a4;
-$fa-var-thumbs-down: \f165;
-$fa-var-user-lock: \f502;
-$fa-var-arrow-right-long: \f178;
-$fa-var-long-arrow-right: \f178;
-$fa-var-anchor-circle-xmark: \e4ac;
-$fa-var-ellipsis: \f141;
-$fa-var-ellipsis-h: \f141;
-$fa-var-chess-pawn: \f443;
-$fa-var-kit-medical: \f479;
-$fa-var-first-aid: \f479;
-$fa-var-person-through-window: \e5a9;
-$fa-var-toolbox: \f552;
-$fa-var-hands-holding-circle: \e4fb;
-$fa-var-bug: \f188;
-$fa-var-credit-card: \f09d;
-$fa-var-credit-card-alt: \f09d;
-$fa-var-car: \f1b9;
-$fa-var-automobile: \f1b9;
-$fa-var-hand-holding-hand: \e4f7;
-$fa-var-book-open-reader: \f5da;
-$fa-var-book-reader: \f5da;
-$fa-var-mountain-sun: \e52f;
-$fa-var-arrows-left-right-to-line: \e4ba;
-$fa-var-dice-d20: \f6cf;
-$fa-var-truck-droplet: \e58c;
-$fa-var-file-circle-xmark: \e5a1;
-$fa-var-temperature-arrow-up: \e040;
-$fa-var-temperature-up: \e040;
-$fa-var-medal: \f5a2;
-$fa-var-bed: \f236;
-$fa-var-square-h: \f0fd;
-$fa-var-h-square: \f0fd;
-$fa-var-podcast: \f2ce;
-$fa-var-temperature-full: \f2c7;
-$fa-var-temperature-4: \f2c7;
-$fa-var-thermometer-4: \f2c7;
-$fa-var-thermometer-full: \f2c7;
-$fa-var-bell: \f0f3;
-$fa-var-superscript: \f12b;
-$fa-var-plug-circle-xmark: \e560;
-$fa-var-star-of-life: \f621;
-$fa-var-phone-slash: \f3dd;
-$fa-var-paint-roller: \f5aa;
-$fa-var-handshake-angle: \f4c4;
-$fa-var-hands-helping: \f4c4;
-$fa-var-location-dot: \f3c5;
-$fa-var-map-marker-alt: \f3c5;
-$fa-var-file: \f15b;
-$fa-var-greater-than: \3e;
-$fa-var-person-swimming: \f5c4;
-$fa-var-swimmer: \f5c4;
-$fa-var-arrow-down: \f063;
-$fa-var-droplet: \f043;
-$fa-var-tint: \f043;
-$fa-var-eraser: \f12d;
-$fa-var-earth-americas: \f57d;
-$fa-var-earth: \f57d;
-$fa-var-earth-america: \f57d;
-$fa-var-globe-americas: \f57d;
-$fa-var-person-burst: \e53b;
-$fa-var-dove: \f4ba;
-$fa-var-battery-empty: \f244;
-$fa-var-battery-0: \f244;
-$fa-var-socks: \f696;
-$fa-var-inbox: \f01c;
-$fa-var-section: \e447;
-$fa-var-gauge-high: \f625;
-$fa-var-tachometer-alt: \f625;
-$fa-var-tachometer-alt-fast: \f625;
-$fa-var-envelope-open-text: \f658;
-$fa-var-hospital: \f0f8;
-$fa-var-hospital-alt: \f0f8;
-$fa-var-hospital-wide: \f0f8;
-$fa-var-wine-bottle: \f72f;
-$fa-var-chess-rook: \f447;
-$fa-var-bars-staggered: \f550;
-$fa-var-reorder: \f550;
-$fa-var-stream: \f550;
-$fa-var-dharmachakra: \f655;
-$fa-var-hotdog: \f80f;
-$fa-var-person-walking-with-cane: \f29d;
-$fa-var-blind: \f29d;
-$fa-var-drum: \f569;
-$fa-var-ice-cream: \f810;
-$fa-var-heart-circle-bolt: \e4fc;
-$fa-var-fax: \f1ac;
-$fa-var-paragraph: \f1dd;
-$fa-var-check-to-slot: \f772;
-$fa-var-vote-yea: \f772;
-$fa-var-star-half: \f089;
-$fa-var-boxes-stacked: \f468;
-$fa-var-boxes: \f468;
-$fa-var-boxes-alt: \f468;
-$fa-var-link: \f0c1;
-$fa-var-chain: \f0c1;
-$fa-var-ear-listen: \f2a2;
-$fa-var-assistive-listening-systems: \f2a2;
-$fa-var-tree-city: \e587;
-$fa-var-play: \f04b;
-$fa-var-font: \f031;
-$fa-var-rupiah-sign: \e23d;
-$fa-var-magnifying-glass: \f002;
-$fa-var-search: \f002;
-$fa-var-table-tennis-paddle-ball: \f45d;
-$fa-var-ping-pong-paddle-ball: \f45d;
-$fa-var-table-tennis: \f45d;
-$fa-var-person-dots-from-line: \f470;
-$fa-var-diagnoses: \f470;
-$fa-var-trash-can-arrow-up: \f82a;
-$fa-var-trash-restore-alt: \f82a;
-$fa-var-naira-sign: \e1f6;
-$fa-var-cart-arrow-down: \f218;
-$fa-var-walkie-talkie: \f8ef;
-$fa-var-file-pen: \f31c;
-$fa-var-file-edit: \f31c;
-$fa-var-receipt: \f543;
-$fa-var-square-pen: \f14b;
-$fa-var-pen-square: \f14b;
-$fa-var-pencil-square: \f14b;
-$fa-var-suitcase-rolling: \f5c1;
-$fa-var-person-circle-exclamation: \e53f;
-$fa-var-chevron-down: \f078;
-$fa-var-battery-full: \f240;
-$fa-var-battery: \f240;
-$fa-var-battery-5: \f240;
-$fa-var-skull-crossbones: \f714;
-$fa-var-code-compare: \e13a;
-$fa-var-list-ul: \f0ca;
-$fa-var-list-dots: \f0ca;
-$fa-var-school-lock: \e56f;
-$fa-var-tower-cell: \e585;
-$fa-var-down-long: \f309;
-$fa-var-long-arrow-alt-down: \f309;
-$fa-var-ranking-star: \e561;
-$fa-var-chess-king: \f43f;
-$fa-var-person-harassing: \e549;
-$fa-var-brazilian-real-sign: \e46c;
-$fa-var-landmark-dome: \f752;
-$fa-var-landmark-alt: \f752;
-$fa-var-arrow-up: \f062;
-$fa-var-tv: \f26c;
-$fa-var-television: \f26c;
-$fa-var-tv-alt: \f26c;
-$fa-var-shrimp: \e448;
-$fa-var-list-check: \f0ae;
-$fa-var-tasks: \f0ae;
-$fa-var-jug-detergent: \e519;
-$fa-var-circle-user: \f2bd;
-$fa-var-user-circle: \f2bd;
-$fa-var-user-shield: \f505;
-$fa-var-wind: \f72e;
-$fa-var-car-burst: \f5e1;
-$fa-var-car-crash: \f5e1;
-$fa-var-y: \59;
-$fa-var-person-snowboarding: \f7ce;
-$fa-var-snowboarding: \f7ce;
-$fa-var-truck-fast: \f48b;
-$fa-var-shipping-fast: \f48b;
-$fa-var-fish: \f578;
-$fa-var-user-graduate: \f501;
-$fa-var-circle-half-stroke: \f042;
-$fa-var-adjust: \f042;
-$fa-var-clapperboard: \e131;
-$fa-var-circle-radiation: \f7ba;
-$fa-var-radiation-alt: \f7ba;
-$fa-var-baseball: \f433;
-$fa-var-baseball-ball: \f433;
-$fa-var-jet-fighter-up: \e518;
-$fa-var-diagram-project: \f542;
-$fa-var-project-diagram: \f542;
-$fa-var-copy: \f0c5;
-$fa-var-volume-xmark: \f6a9;
-$fa-var-volume-mute: \f6a9;
-$fa-var-volume-times: \f6a9;
-$fa-var-hand-sparkles: \e05d;
-$fa-var-grip: \f58d;
-$fa-var-grip-horizontal: \f58d;
-$fa-var-share-from-square: \f14d;
-$fa-var-share-square: \f14d;
-$fa-var-child-combatant: \e4e0;
-$fa-var-child-rifle: \e4e0;
-$fa-var-gun: \e19b;
-$fa-var-square-phone: \f098;
-$fa-var-phone-square: \f098;
-$fa-var-plus: \2b;
-$fa-var-add: \2b;
-$fa-var-expand: \f065;
-$fa-var-computer: \e4e5;
-$fa-var-xmark: \f00d;
-$fa-var-close: \f00d;
-$fa-var-multiply: \f00d;
-$fa-var-remove: \f00d;
-$fa-var-times: \f00d;
-$fa-var-arrows-up-down-left-right: \f047;
-$fa-var-arrows: \f047;
-$fa-var-chalkboard-user: \f51c;
-$fa-var-chalkboard-teacher: \f51c;
-$fa-var-peso-sign: \e222;
-$fa-var-building-shield: \e4d8;
-$fa-var-baby: \f77c;
-$fa-var-users-line: \e592;
-$fa-var-quote-left: \f10d;
-$fa-var-quote-left-alt: \f10d;
-$fa-var-tractor: \f722;
-$fa-var-trash-arrow-up: \f829;
-$fa-var-trash-restore: \f829;
-$fa-var-arrow-down-up-lock: \e4b0;
-$fa-var-lines-leaning: \e51e;
-$fa-var-ruler-combined: \f546;
-$fa-var-copyright: \f1f9;
-$fa-var-equals: \3d;
-$fa-var-blender: \f517;
-$fa-var-teeth: \f62e;
-$fa-var-shekel-sign: \f20b;
-$fa-var-ils: \f20b;
-$fa-var-shekel: \f20b;
-$fa-var-sheqel: \f20b;
-$fa-var-sheqel-sign: \f20b;
-$fa-var-map: \f279;
-$fa-var-rocket: \f135;
-$fa-var-photo-film: \f87c;
-$fa-var-photo-video: \f87c;
-$fa-var-folder-minus: \f65d;
-$fa-var-store: \f54e;
-$fa-var-arrow-trend-up: \e098;
-$fa-var-plug-circle-minus: \e55e;
-$fa-var-sign-hanging: \f4d9;
-$fa-var-sign: \f4d9;
-$fa-var-bezier-curve: \f55b;
-$fa-var-bell-slash: \f1f6;
-$fa-var-tablet: \f3fb;
-$fa-var-tablet-android: \f3fb;
-$fa-var-school-flag: \e56e;
-$fa-var-fill: \f575;
-$fa-var-angle-up: \f106;
-$fa-var-drumstick-bite: \f6d7;
-$fa-var-holly-berry: \f7aa;
-$fa-var-chevron-left: \f053;
-$fa-var-bacteria: \e059;
-$fa-var-hand-lizard: \f258;
-$fa-var-notdef: \e1fe;
-$fa-var-disease: \f7fa;
-$fa-var-briefcase-medical: \f469;
-$fa-var-genderless: \f22d;
-$fa-var-chevron-right: \f054;
-$fa-var-retweet: \f079;
-$fa-var-car-rear: \f5de;
-$fa-var-car-alt: \f5de;
-$fa-var-pump-soap: \e06b;
-$fa-var-video-slash: \f4e2;
-$fa-var-battery-quarter: \f243;
-$fa-var-battery-2: \f243;
-$fa-var-radio: \f8d7;
-$fa-var-baby-carriage: \f77d;
-$fa-var-carriage-baby: \f77d;
-$fa-var-traffic-light: \f637;
-$fa-var-thermometer: \f491;
-$fa-var-vr-cardboard: \f729;
-$fa-var-hand-middle-finger: \f806;
-$fa-var-percent: \25;
-$fa-var-percentage: \25;
-$fa-var-truck-moving: \f4df;
-$fa-var-glass-water-droplet: \e4f5;
-$fa-var-display: \e163;
-$fa-var-face-smile: \f118;
-$fa-var-smile: \f118;
-$fa-var-thumbtack: \f08d;
-$fa-var-thumb-tack: \f08d;
-$fa-var-trophy: \f091;
-$fa-var-person-praying: \f683;
-$fa-var-pray: \f683;
-$fa-var-hammer: \f6e3;
-$fa-var-hand-peace: \f25b;
-$fa-var-rotate: \f2f1;
-$fa-var-sync-alt: \f2f1;
-$fa-var-spinner: \f110;
-$fa-var-robot: \f544;
-$fa-var-peace: \f67c;
-$fa-var-gears: \f085;
-$fa-var-cogs: \f085;
-$fa-var-warehouse: \f494;
-$fa-var-arrow-up-right-dots: \e4b7;
-$fa-var-splotch: \f5bc;
-$fa-var-face-grin-hearts: \f584;
-$fa-var-grin-hearts: \f584;
-$fa-var-dice-four: \f524;
-$fa-var-sim-card: \f7c4;
-$fa-var-transgender: \f225;
-$fa-var-transgender-alt: \f225;
-$fa-var-mercury: \f223;
-$fa-var-arrow-turn-down: \f149;
-$fa-var-level-down: \f149;
-$fa-var-person-falling-burst: \e547;
-$fa-var-award: \f559;
-$fa-var-ticket-simple: \f3ff;
-$fa-var-ticket-alt: \f3ff;
-$fa-var-building: \f1ad;
-$fa-var-angles-left: \f100;
-$fa-var-angle-double-left: \f100;
-$fa-var-qrcode: \f029;
-$fa-var-clock-rotate-left: \f1da;
-$fa-var-history: \f1da;
-$fa-var-face-grin-beam-sweat: \f583;
-$fa-var-grin-beam-sweat: \f583;
-$fa-var-file-export: \f56e;
-$fa-var-arrow-right-from-file: \f56e;
-$fa-var-shield: \f132;
-$fa-var-shield-blank: \f132;
-$fa-var-arrow-up-short-wide: \f885;
-$fa-var-sort-amount-up-alt: \f885;
-$fa-var-house-medical: \e3b2;
-$fa-var-golf-ball-tee: \f450;
-$fa-var-golf-ball: \f450;
-$fa-var-circle-chevron-left: \f137;
-$fa-var-chevron-circle-left: \f137;
-$fa-var-house-chimney-window: \e00d;
-$fa-var-pen-nib: \f5ad;
-$fa-var-tent-arrow-turn-left: \e580;
-$fa-var-tents: \e582;
-$fa-var-wand-magic: \f0d0;
-$fa-var-magic: \f0d0;
-$fa-var-dog: \f6d3;
-$fa-var-carrot: \f787;
-$fa-var-moon: \f186;
-$fa-var-wine-glass-empty: \f5ce;
-$fa-var-wine-glass-alt: \f5ce;
-$fa-var-cheese: \f7ef;
-$fa-var-yin-yang: \f6ad;
-$fa-var-music: \f001;
-$fa-var-code-commit: \f386;
-$fa-var-temperature-low: \f76b;
-$fa-var-person-biking: \f84a;
-$fa-var-biking: \f84a;
-$fa-var-broom: \f51a;
-$fa-var-shield-heart: \e574;
-$fa-var-gopuram: \f664;
-$fa-var-earth-oceania: \e47b;
-$fa-var-globe-oceania: \e47b;
-$fa-var-square-xmark: \f2d3;
-$fa-var-times-square: \f2d3;
-$fa-var-xmark-square: \f2d3;
-$fa-var-hashtag: \23;
-$fa-var-up-right-and-down-left-from-center: \f424;
-$fa-var-expand-alt: \f424;
-$fa-var-oil-can: \f613;
-$fa-var-t: \54;
-$fa-var-hippo: \f6ed;
-$fa-var-chart-column: \e0e3;
-$fa-var-infinity: \f534;
-$fa-var-vial-circle-check: \e596;
-$fa-var-person-arrow-down-to-line: \e538;
-$fa-var-voicemail: \f897;
-$fa-var-fan: \f863;
-$fa-var-person-walking-luggage: \e554;
-$fa-var-up-down: \f338;
-$fa-var-arrows-alt-v: \f338;
-$fa-var-cloud-moon-rain: \f73c;
-$fa-var-calendar: \f133;
-$fa-var-trailer: \e041;
-$fa-var-bahai: \f666;
-$fa-var-haykal: \f666;
-$fa-var-sd-card: \f7c2;
-$fa-var-dragon: \f6d5;
-$fa-var-shoe-prints: \f54b;
-$fa-var-circle-plus: \f055;
-$fa-var-plus-circle: \f055;
-$fa-var-face-grin-tongue-wink: \f58b;
-$fa-var-grin-tongue-wink: \f58b;
-$fa-var-hand-holding: \f4bd;
-$fa-var-plug-circle-exclamation: \e55d;
-$fa-var-link-slash: \f127;
-$fa-var-chain-broken: \f127;
-$fa-var-chain-slash: \f127;
-$fa-var-unlink: \f127;
-$fa-var-clone: \f24d;
-$fa-var-person-walking-arrow-loop-left: \e551;
-$fa-var-arrow-up-z-a: \f882;
-$fa-var-sort-alpha-up-alt: \f882;
-$fa-var-fire-flame-curved: \f7e4;
-$fa-var-fire-alt: \f7e4;
-$fa-var-tornado: \f76f;
-$fa-var-file-circle-plus: \e494;
-$fa-var-book-quran: \f687;
-$fa-var-quran: \f687;
-$fa-var-anchor: \f13d;
-$fa-var-border-all: \f84c;
-$fa-var-face-angry: \f556;
-$fa-var-angry: \f556;
-$fa-var-cookie-bite: \f564;
-$fa-var-arrow-trend-down: \e097;
-$fa-var-rss: \f09e;
-$fa-var-feed: \f09e;
-$fa-var-draw-polygon: \f5ee;
-$fa-var-scale-balanced: \f24e;
-$fa-var-balance-scale: \f24e;
-$fa-var-gauge-simple-high: \f62a;
-$fa-var-tachometer: \f62a;
-$fa-var-tachometer-fast: \f62a;
-$fa-var-shower: \f2cc;
-$fa-var-desktop: \f390;
-$fa-var-desktop-alt: \f390;
-$fa-var-m: \4d;
-$fa-var-table-list: \f00b;
-$fa-var-th-list: \f00b;
-$fa-var-comment-sms: \f7cd;
-$fa-var-sms: \f7cd;
-$fa-var-book: \f02d;
-$fa-var-user-plus: \f234;
-$fa-var-check: \f00c;
-$fa-var-battery-three-quarters: \f241;
-$fa-var-battery-4: \f241;
-$fa-var-house-circle-check: \e509;
-$fa-var-angle-left: \f104;
-$fa-var-diagram-successor: \e47a;
-$fa-var-truck-arrow-right: \e58b;
-$fa-var-arrows-split-up-and-left: \e4bc;
-$fa-var-hand-fist: \f6de;
-$fa-var-fist-raised: \f6de;
-$fa-var-cloud-moon: \f6c3;
-$fa-var-briefcase: \f0b1;
-$fa-var-person-falling: \e546;
-$fa-var-image-portrait: \f3e0;
-$fa-var-portrait: \f3e0;
-$fa-var-user-tag: \f507;
-$fa-var-rug: \e569;
-$fa-var-earth-europe: \f7a2;
-$fa-var-globe-europe: \f7a2;
-$fa-var-cart-flatbed-suitcase: \f59d;
-$fa-var-luggage-cart: \f59d;
-$fa-var-rectangle-xmark: \f410;
-$fa-var-rectangle-times: \f410;
-$fa-var-times-rectangle: \f410;
-$fa-var-window-close: \f410;
-$fa-var-baht-sign: \e0ac;
-$fa-var-book-open: \f518;
-$fa-var-book-journal-whills: \f66a;
-$fa-var-journal-whills: \f66a;
-$fa-var-handcuffs: \e4f8;
-$fa-var-triangle-exclamation: \f071;
-$fa-var-exclamation-triangle: \f071;
-$fa-var-warning: \f071;
-$fa-var-database: \f1c0;
-$fa-var-share: \f064;
-$fa-var-arrow-turn-right: \f064;
-$fa-var-mail-forward: \f064;
-$fa-var-bottle-droplet: \e4c4;
-$fa-var-mask-face: \e1d7;
-$fa-var-hill-rockslide: \e508;
-$fa-var-right-left: \f362;
-$fa-var-exchange-alt: \f362;
-$fa-var-paper-plane: \f1d8;
-$fa-var-road-circle-exclamation: \e565;
-$fa-var-dungeon: \f6d9;
-$fa-var-align-right: \f038;
-$fa-var-money-bill-1-wave: \f53b;
-$fa-var-money-bill-wave-alt: \f53b;
-$fa-var-life-ring: \f1cd;
-$fa-var-hands: \f2a7;
-$fa-var-sign-language: \f2a7;
-$fa-var-signing: \f2a7;
-$fa-var-calendar-day: \f783;
-$fa-var-water-ladder: \f5c5;
-$fa-var-ladder-water: \f5c5;
-$fa-var-swimming-pool: \f5c5;
-$fa-var-arrows-up-down: \f07d;
-$fa-var-arrows-v: \f07d;
-$fa-var-face-grimace: \f57f;
-$fa-var-grimace: \f57f;
-$fa-var-wheelchair-move: \e2ce;
-$fa-var-wheelchair-alt: \e2ce;
-$fa-var-turn-down: \f3be;
-$fa-var-level-down-alt: \f3be;
-$fa-var-person-walking-arrow-right: \e552;
-$fa-var-square-envelope: \f199;
-$fa-var-envelope-square: \f199;
-$fa-var-dice: \f522;
-$fa-var-bowling-ball: \f436;
-$fa-var-brain: \f5dc;
-$fa-var-bandage: \f462;
-$fa-var-band-aid: \f462;
-$fa-var-calendar-minus: \f272;
-$fa-var-circle-xmark: \f057;
-$fa-var-times-circle: \f057;
-$fa-var-xmark-circle: \f057;
-$fa-var-gifts: \f79c;
-$fa-var-hotel: \f594;
-$fa-var-earth-asia: \f57e;
-$fa-var-globe-asia: \f57e;
-$fa-var-id-card-clip: \f47f;
-$fa-var-id-card-alt: \f47f;
-$fa-var-magnifying-glass-plus: \f00e;
-$fa-var-search-plus: \f00e;
-$fa-var-thumbs-up: \f164;
-$fa-var-user-clock: \f4fd;
-$fa-var-hand-dots: \f461;
-$fa-var-allergies: \f461;
-$fa-var-file-invoice: \f570;
-$fa-var-window-minimize: \f2d1;
-$fa-var-mug-saucer: \f0f4;
-$fa-var-coffee: \f0f4;
-$fa-var-brush: \f55d;
-$fa-var-mask: \f6fa;
-$fa-var-magnifying-glass-minus: \f010;
-$fa-var-search-minus: \f010;
-$fa-var-ruler-vertical: \f548;
-$fa-var-user-large: \f406;
-$fa-var-user-alt: \f406;
-$fa-var-train-tram: \e5b4;
-$fa-var-user-nurse: \f82f;
-$fa-var-syringe: \f48e;
-$fa-var-cloud-sun: \f6c4;
-$fa-var-stopwatch-20: \e06f;
-$fa-var-square-full: \f45c;
-$fa-var-magnet: \f076;
-$fa-var-jar: \e516;
-$fa-var-note-sticky: \f249;
-$fa-var-sticky-note: \f249;
-$fa-var-bug-slash: \e490;
-$fa-var-arrow-up-from-water-pump: \e4b6;
-$fa-var-bone: \f5d7;
-$fa-var-user-injured: \f728;
-$fa-var-face-sad-tear: \f5b4;
-$fa-var-sad-tear: \f5b4;
-$fa-var-plane: \f072;
-$fa-var-tent-arrows-down: \e581;
-$fa-var-exclamation: \21;
-$fa-var-arrows-spin: \e4bb;
-$fa-var-print: \f02f;
-$fa-var-turkish-lira-sign: \e2bb;
-$fa-var-try: \e2bb;
-$fa-var-turkish-lira: \e2bb;
-$fa-var-dollar-sign: \24;
-$fa-var-dollar: \24;
-$fa-var-usd: \24;
-$fa-var-x: \58;
-$fa-var-magnifying-glass-dollar: \f688;
-$fa-var-search-dollar: \f688;
-$fa-var-users-gear: \f509;
-$fa-var-users-cog: \f509;
-$fa-var-person-military-pointing: \e54a;
-$fa-var-building-columns: \f19c;
-$fa-var-bank: \f19c;
-$fa-var-institution: \f19c;
-$fa-var-museum: \f19c;
-$fa-var-university: \f19c;
-$fa-var-umbrella: \f0e9;
-$fa-var-trowel: \e589;
-$fa-var-d: \44;
-$fa-var-stapler: \e5af;
-$fa-var-masks-theater: \f630;
-$fa-var-theater-masks: \f630;
-$fa-var-kip-sign: \e1c4;
-$fa-var-hand-point-left: \f0a5;
-$fa-var-handshake-simple: \f4c6;
-$fa-var-handshake-alt: \f4c6;
-$fa-var-jet-fighter: \f0fb;
-$fa-var-fighter-jet: \f0fb;
-$fa-var-square-share-nodes: \f1e1;
-$fa-var-share-alt-square: \f1e1;
-$fa-var-barcode: \f02a;
-$fa-var-plus-minus: \e43c;
-$fa-var-video: \f03d;
-$fa-var-video-camera: \f03d;
-$fa-var-graduation-cap: \f19d;
-$fa-var-mortar-board: \f19d;
-$fa-var-hand-holding-medical: \e05c;
-$fa-var-person-circle-check: \e53e;
-$fa-var-turn-up: \f3bf;
-$fa-var-level-up-alt: \f3bf;
-
-$fa-var-monero: \f3d0;
-$fa-var-hooli: \f427;
-$fa-var-yelp: \f1e9;
-$fa-var-cc-visa: \f1f0;
-$fa-var-lastfm: \f202;
-$fa-var-shopware: \f5b5;
-$fa-var-creative-commons-nc: \f4e8;
-$fa-var-aws: \f375;
-$fa-var-redhat: \f7bc;
-$fa-var-yoast: \f2b1;
-$fa-var-cloudflare: \e07d;
-$fa-var-ups: \f7e0;
-$fa-var-wpexplorer: \f2de;
-$fa-var-dyalog: \f399;
-$fa-var-bity: \f37a;
-$fa-var-stackpath: \f842;
-$fa-var-buysellads: \f20d;
-$fa-var-first-order: \f2b0;
-$fa-var-modx: \f285;
-$fa-var-guilded: \e07e;
-$fa-var-vnv: \f40b;
-$fa-var-square-js: \f3b9;
-$fa-var-js-square: \f3b9;
-$fa-var-microsoft: \f3ca;
-$fa-var-qq: \f1d6;
-$fa-var-orcid: \f8d2;
-$fa-var-java: \f4e4;
-$fa-var-invision: \f7b0;
-$fa-var-creative-commons-pd-alt: \f4ed;
-$fa-var-centercode: \f380;
-$fa-var-glide-g: \f2a6;
-$fa-var-drupal: \f1a9;
-$fa-var-hire-a-helper: \f3b0;
-$fa-var-creative-commons-by: \f4e7;
-$fa-var-unity: \e049;
-$fa-var-whmcs: \f40d;
-$fa-var-rocketchat: \f3e8;
-$fa-var-vk: \f189;
-$fa-var-untappd: \f405;
-$fa-var-mailchimp: \f59e;
-$fa-var-css3-alt: \f38b;
-$fa-var-square-reddit: \f1a2;
-$fa-var-reddit-square: \f1a2;
-$fa-var-vimeo-v: \f27d;
-$fa-var-contao: \f26d;
-$fa-var-square-font-awesome: \e5ad;
-$fa-var-deskpro: \f38f;
-$fa-var-sistrix: \f3ee;
-$fa-var-square-instagram: \e055;
-$fa-var-instagram-square: \e055;
-$fa-var-battle-net: \f835;
-$fa-var-the-red-yeti: \f69d;
-$fa-var-square-hacker-news: \f3af;
-$fa-var-hacker-news-square: \f3af;
-$fa-var-edge: \f282;
-$fa-var-threads: \e618;
-$fa-var-napster: \f3d2;
-$fa-var-square-snapchat: \f2ad;
-$fa-var-snapchat-square: \f2ad;
-$fa-var-google-plus-g: \f0d5;
-$fa-var-artstation: \f77a;
-$fa-var-markdown: \f60f;
-$fa-var-sourcetree: \f7d3;
-$fa-var-google-plus: \f2b3;
-$fa-var-diaspora: \f791;
-$fa-var-foursquare: \f180;
-$fa-var-stack-overflow: \f16c;
-$fa-var-github-alt: \f113;
-$fa-var-phoenix-squadron: \f511;
-$fa-var-pagelines: \f18c;
-$fa-var-algolia: \f36c;
-$fa-var-red-river: \f3e3;
-$fa-var-creative-commons-sa: \f4ef;
-$fa-var-safari: \f267;
-$fa-var-google: \f1a0;
-$fa-var-square-font-awesome-stroke: \f35c;
-$fa-var-font-awesome-alt: \f35c;
-$fa-var-atlassian: \f77b;
-$fa-var-linkedin-in: \f0e1;
-$fa-var-digital-ocean: \f391;
-$fa-var-nimblr: \f5a8;
-$fa-var-chromecast: \f838;
-$fa-var-evernote: \f839;
-$fa-var-hacker-news: \f1d4;
-$fa-var-creative-commons-sampling: \f4f0;
-$fa-var-adversal: \f36a;
-$fa-var-creative-commons: \f25e;
-$fa-var-watchman-monitoring: \e087;
-$fa-var-fonticons: \f280;
-$fa-var-weixin: \f1d7;
-$fa-var-shirtsinbulk: \f214;
-$fa-var-codepen: \f1cb;
-$fa-var-git-alt: \f841;
-$fa-var-lyft: \f3c3;
-$fa-var-rev: \f5b2;
-$fa-var-windows: \f17a;
-$fa-var-wizards-of-the-coast: \f730;
-$fa-var-square-viadeo: \f2aa;
-$fa-var-viadeo-square: \f2aa;
-$fa-var-meetup: \f2e0;
-$fa-var-centos: \f789;
-$fa-var-adn: \f170;
-$fa-var-cloudsmith: \f384;
-$fa-var-pied-piper-alt: \f1a8;
-$fa-var-square-dribbble: \f397;
-$fa-var-dribbble-square: \f397;
-$fa-var-codiepie: \f284;
-$fa-var-node: \f419;
-$fa-var-mix: \f3cb;
-$fa-var-steam: \f1b6;
-$fa-var-cc-apple-pay: \f416;
-$fa-var-scribd: \f28a;
-$fa-var-debian: \e60b;
-$fa-var-openid: \f19b;
-$fa-var-instalod: \e081;
-$fa-var-expeditedssl: \f23e;
-$fa-var-sellcast: \f2da;
-$fa-var-square-twitter: \f081;
-$fa-var-twitter-square: \f081;
-$fa-var-r-project: \f4f7;
-$fa-var-delicious: \f1a5;
-$fa-var-freebsd: \f3a4;
-$fa-var-vuejs: \f41f;
-$fa-var-accusoft: \f369;
-$fa-var-ioxhost: \f208;
-$fa-var-fonticons-fi: \f3a2;
-$fa-var-app-store: \f36f;
-$fa-var-cc-mastercard: \f1f1;
-$fa-var-itunes-note: \f3b5;
-$fa-var-golang: \e40f;
-$fa-var-kickstarter: \f3bb;
-$fa-var-grav: \f2d6;
-$fa-var-weibo: \f18a;
-$fa-var-uncharted: \e084;
-$fa-var-firstdraft: \f3a1;
-$fa-var-square-youtube: \f431;
-$fa-var-youtube-square: \f431;
-$fa-var-wikipedia-w: \f266;
-$fa-var-wpressr: \f3e4;
-$fa-var-rendact: \f3e4;
-$fa-var-angellist: \f209;
-$fa-var-galactic-republic: \f50c;
-$fa-var-nfc-directional: \e530;
-$fa-var-skype: \f17e;
-$fa-var-joget: \f3b7;
-$fa-var-fedora: \f798;
-$fa-var-stripe-s: \f42a;
-$fa-var-meta: \e49b;
-$fa-var-laravel: \f3bd;
-$fa-var-hotjar: \f3b1;
-$fa-var-bluetooth-b: \f294;
-$fa-var-sticker-mule: \f3f7;
-$fa-var-creative-commons-zero: \f4f3;
-$fa-var-hips: \f452;
-$fa-var-behance: \f1b4;
-$fa-var-reddit: \f1a1;
-$fa-var-discord: \f392;
-$fa-var-chrome: \f268;
-$fa-var-app-store-ios: \f370;
-$fa-var-cc-discover: \f1f2;
-$fa-var-wpbeginner: \f297;
-$fa-var-confluence: \f78d;
-$fa-var-mdb: \f8ca;
-$fa-var-dochub: \f394;
-$fa-var-accessible-icon: \f368;
-$fa-var-ebay: \f4f4;
-$fa-var-amazon: \f270;
-$fa-var-unsplash: \e07c;
-$fa-var-yarn: \f7e3;
-$fa-var-square-steam: \f1b7;
-$fa-var-steam-square: \f1b7;
-$fa-var-500px: \f26e;
-$fa-var-square-vimeo: \f194;
-$fa-var-vimeo-square: \f194;
-$fa-var-asymmetrik: \f372;
-$fa-var-font-awesome: \f2b4;
-$fa-var-font-awesome-flag: \f2b4;
-$fa-var-font-awesome-logo-full: \f2b4;
-$fa-var-gratipay: \f184;
-$fa-var-apple: \f179;
-$fa-var-hive: \e07f;
-$fa-var-gitkraken: \f3a6;
-$fa-var-keybase: \f4f5;
-$fa-var-apple-pay: \f415;
-$fa-var-padlet: \e4a0;
-$fa-var-amazon-pay: \f42c;
-$fa-var-square-github: \f092;
-$fa-var-github-square: \f092;
-$fa-var-stumbleupon: \f1a4;
-$fa-var-fedex: \f797;
-$fa-var-phoenix-framework: \f3dc;
-$fa-var-shopify: \e057;
-$fa-var-neos: \f612;
-$fa-var-square-threads: \e619;
-$fa-var-hackerrank: \f5f7;
-$fa-var-researchgate: \f4f8;
-$fa-var-swift: \f8e1;
-$fa-var-angular: \f420;
-$fa-var-speakap: \f3f3;
-$fa-var-angrycreative: \f36e;
-$fa-var-y-combinator: \f23b;
-$fa-var-empire: \f1d1;
-$fa-var-envira: \f299;
-$fa-var-square-gitlab: \e5ae;
-$fa-var-gitlab-square: \e5ae;
-$fa-var-studiovinari: \f3f8;
-$fa-var-pied-piper: \f2ae;
-$fa-var-wordpress: \f19a;
-$fa-var-product-hunt: \f288;
-$fa-var-firefox: \f269;
-$fa-var-linode: \f2b8;
-$fa-var-goodreads: \f3a8;
-$fa-var-square-odnoklassniki: \f264;
-$fa-var-odnoklassniki-square: \f264;
-$fa-var-jsfiddle: \f1cc;
-$fa-var-sith: \f512;
-$fa-var-themeisle: \f2b2;
-$fa-var-page4: \f3d7;
-$fa-var-hashnode: \e499;
-$fa-var-react: \f41b;
-$fa-var-cc-paypal: \f1f4;
-$fa-var-squarespace: \f5be;
-$fa-var-cc-stripe: \f1f5;
-$fa-var-creative-commons-share: \f4f2;
-$fa-var-bitcoin: \f379;
-$fa-var-keycdn: \f3ba;
-$fa-var-opera: \f26a;
-$fa-var-itch-io: \f83a;
-$fa-var-umbraco: \f8e8;
-$fa-var-galactic-senate: \f50d;
-$fa-var-ubuntu: \f7df;
-$fa-var-draft2digital: \f396;
-$fa-var-stripe: \f429;
-$fa-var-houzz: \f27c;
-$fa-var-gg: \f260;
-$fa-var-dhl: \f790;
-$fa-var-square-pinterest: \f0d3;
-$fa-var-pinterest-square: \f0d3;
-$fa-var-xing: \f168;
-$fa-var-blackberry: \f37b;
-$fa-var-creative-commons-pd: \f4ec;
-$fa-var-playstation: \f3df;
-$fa-var-quinscape: \f459;
-$fa-var-less: \f41d;
-$fa-var-blogger-b: \f37d;
-$fa-var-opencart: \f23d;
-$fa-var-vine: \f1ca;
-$fa-var-paypal: \f1ed;
-$fa-var-gitlab: \f296;
-$fa-var-typo3: \f42b;
-$fa-var-reddit-alien: \f281;
-$fa-var-yahoo: \f19e;
-$fa-var-dailymotion: \e052;
-$fa-var-affiliatetheme: \f36b;
-$fa-var-pied-piper-pp: \f1a7;
-$fa-var-bootstrap: \f836;
-$fa-var-odnoklassniki: \f263;
-$fa-var-nfc-symbol: \e531;
-$fa-var-ethereum: \f42e;
-$fa-var-speaker-deck: \f83c;
-$fa-var-creative-commons-nc-eu: \f4e9;
-$fa-var-patreon: \f3d9;
-$fa-var-avianex: \f374;
-$fa-var-ello: \f5f1;
-$fa-var-gofore: \f3a7;
-$fa-var-bimobject: \f378;
-$fa-var-facebook-f: \f39e;
-$fa-var-square-google-plus: \f0d4;
-$fa-var-google-plus-square: \f0d4;
-$fa-var-mandalorian: \f50f;
-$fa-var-first-order-alt: \f50a;
-$fa-var-osi: \f41a;
-$fa-var-google-wallet: \f1ee;
-$fa-var-d-and-d-beyond: \f6ca;
-$fa-var-periscope: \f3da;
-$fa-var-fulcrum: \f50b;
-$fa-var-cloudscale: \f383;
-$fa-var-forumbee: \f211;
-$fa-var-mizuni: \f3cc;
-$fa-var-schlix: \f3ea;
-$fa-var-square-xing: \f169;
-$fa-var-xing-square: \f169;
-$fa-var-bandcamp: \f2d5;
-$fa-var-wpforms: \f298;
-$fa-var-cloudversify: \f385;
-$fa-var-usps: \f7e1;
-$fa-var-megaport: \f5a3;
-$fa-var-magento: \f3c4;
-$fa-var-spotify: \f1bc;
-$fa-var-optin-monster: \f23c;
-$fa-var-fly: \f417;
-$fa-var-aviato: \f421;
-$fa-var-itunes: \f3b4;
-$fa-var-cuttlefish: \f38c;
-$fa-var-blogger: \f37c;
-$fa-var-flickr: \f16e;
-$fa-var-viber: \f409;
-$fa-var-soundcloud: \f1be;
-$fa-var-digg: \f1a6;
-$fa-var-tencent-weibo: \f1d5;
-$fa-var-symfony: \f83d;
-$fa-var-maxcdn: \f136;
-$fa-var-etsy: \f2d7;
-$fa-var-facebook-messenger: \f39f;
-$fa-var-audible: \f373;
-$fa-var-think-peaks: \f731;
-$fa-var-bilibili: \e3d9;
-$fa-var-erlang: \f39d;
-$fa-var-x-twitter: \e61b;
-$fa-var-cotton-bureau: \f89e;
-$fa-var-dashcube: \f210;
-$fa-var-42-group: \e080;
-$fa-var-innosoft: \e080;
-$fa-var-stack-exchange: \f18d;
-$fa-var-elementor: \f430;
-$fa-var-square-pied-piper: \e01e;
-$fa-var-pied-piper-square: \e01e;
-$fa-var-creative-commons-nd: \f4eb;
-$fa-var-palfed: \f3d8;
-$fa-var-superpowers: \f2dd;
-$fa-var-resolving: \f3e7;
-$fa-var-xbox: \f412;
-$fa-var-searchengin: \f3eb;
-$fa-var-tiktok: \e07b;
-$fa-var-square-facebook: \f082;
-$fa-var-facebook-square: \f082;
-$fa-var-renren: \f18b;
-$fa-var-linux: \f17c;
-$fa-var-glide: \f2a5;
-$fa-var-linkedin: \f08c;
-$fa-var-hubspot: \f3b2;
-$fa-var-deploydog: \f38e;
-$fa-var-twitch: \f1e8;
-$fa-var-ravelry: \f2d9;
-$fa-var-mixer: \e056;
-$fa-var-square-lastfm: \f203;
-$fa-var-lastfm-square: \f203;
-$fa-var-vimeo: \f40a;
-$fa-var-mendeley: \f7b3;
-$fa-var-uniregistry: \f404;
-$fa-var-figma: \f799;
-$fa-var-creative-commons-remix: \f4ee;
-$fa-var-cc-amazon-pay: \f42d;
-$fa-var-dropbox: \f16b;
-$fa-var-instagram: \f16d;
-$fa-var-cmplid: \e360;
-$fa-var-facebook: \f09a;
-$fa-var-gripfire: \f3ac;
-$fa-var-jedi-order: \f50e;
-$fa-var-uikit: \f403;
-$fa-var-fort-awesome-alt: \f3a3;
-$fa-var-phabricator: \f3db;
-$fa-var-ussunnah: \f407;
-$fa-var-earlybirds: \f39a;
-$fa-var-trade-federation: \f513;
-$fa-var-autoprefixer: \f41c;
-$fa-var-whatsapp: \f232;
-$fa-var-slideshare: \f1e7;
-$fa-var-google-play: \f3ab;
-$fa-var-viadeo: \f2a9;
-$fa-var-line: \f3c0;
-$fa-var-google-drive: \f3aa;
-$fa-var-servicestack: \f3ec;
-$fa-var-simplybuilt: \f215;
-$fa-var-bitbucket: \f171;
-$fa-var-imdb: \f2d8;
-$fa-var-deezer: \e077;
-$fa-var-raspberry-pi: \f7bb;
-$fa-var-jira: \f7b1;
-$fa-var-docker: \f395;
-$fa-var-screenpal: \e570;
-$fa-var-bluetooth: \f293;
-$fa-var-gitter: \f426;
-$fa-var-d-and-d: \f38d;
-$fa-var-microblog: \e01a;
-$fa-var-cc-diners-club: \f24c;
-$fa-var-gg-circle: \f261;
-$fa-var-pied-piper-hat: \f4e5;
-$fa-var-kickstarter-k: \f3bc;
-$fa-var-yandex: \f413;
-$fa-var-readme: \f4d5;
-$fa-var-html5: \f13b;
-$fa-var-sellsy: \f213;
-$fa-var-sass: \f41e;
-$fa-var-wirsindhandwerk: \e2d0;
-$fa-var-wsh: \e2d0;
-$fa-var-buromobelexperte: \f37f;
-$fa-var-salesforce: \f83b;
-$fa-var-octopus-deploy: \e082;
-$fa-var-medapps: \f3c6;
-$fa-var-ns8: \f3d5;
-$fa-var-pinterest-p: \f231;
-$fa-var-apper: \f371;
-$fa-var-fort-awesome: \f286;
-$fa-var-waze: \f83f;
-$fa-var-cc-jcb: \f24b;
-$fa-var-snapchat: \f2ab;
-$fa-var-snapchat-ghost: \f2ab;
-$fa-var-fantasy-flight-games: \f6dc;
-$fa-var-rust: \e07a;
-$fa-var-wix: \f5cf;
-$fa-var-square-behance: \f1b5;
-$fa-var-behance-square: \f1b5;
-$fa-var-supple: \f3f9;
-$fa-var-rebel: \f1d0;
-$fa-var-css3: \f13c;
-$fa-var-staylinked: \f3f5;
-$fa-var-kaggle: \f5fa;
-$fa-var-space-awesome: \e5ac;
-$fa-var-deviantart: \f1bd;
-$fa-var-cpanel: \f388;
-$fa-var-goodreads-g: \f3a9;
-$fa-var-square-git: \f1d2;
-$fa-var-git-square: \f1d2;
-$fa-var-square-tumblr: \f174;
-$fa-var-tumblr-square: \f174;
-$fa-var-trello: \f181;
-$fa-var-creative-commons-nc-jp: \f4ea;
-$fa-var-get-pocket: \f265;
-$fa-var-perbyte: \e083;
-$fa-var-grunt: \f3ad;
-$fa-var-weebly: \f5cc;
-$fa-var-connectdevelop: \f20e;
-$fa-var-leanpub: \f212;
-$fa-var-black-tie: \f27e;
-$fa-var-themeco: \f5c6;
-$fa-var-python: \f3e2;
-$fa-var-android: \f17b;
-$fa-var-bots: \e340;
-$fa-var-free-code-camp: \f2c5;
-$fa-var-hornbill: \f592;
-$fa-var-js: \f3b8;
-$fa-var-ideal: \e013;
-$fa-var-git: \f1d3;
-$fa-var-dev: \f6cc;
-$fa-var-sketch: \f7c6;
-$fa-var-yandex-international: \f414;
-$fa-var-cc-amex: \f1f3;
-$fa-var-uber: \f402;
-$fa-var-github: \f09b;
-$fa-var-php: \f457;
-$fa-var-alipay: \f642;
-$fa-var-youtube: \f167;
-$fa-var-skyatlas: \f216;
-$fa-var-firefox-browser: \e007;
-$fa-var-replyd: \f3e6;
-$fa-var-suse: \f7d6;
-$fa-var-jenkins: \f3b6;
-$fa-var-twitter: \f099;
-$fa-var-rockrms: \f3e9;
-$fa-var-pinterest: \f0d2;
-$fa-var-buffer: \f837;
-$fa-var-npm: \f3d4;
-$fa-var-yammer: \f840;
-$fa-var-btc: \f15a;
-$fa-var-dribbble: \f17d;
-$fa-var-stumbleupon-circle: \f1a3;
-$fa-var-internet-explorer: \f26b;
-$fa-var-stubber: \e5c7;
-$fa-var-telegram: \f2c6;
-$fa-var-telegram-plane: \f2c6;
-$fa-var-old-republic: \f510;
-$fa-var-odysee: \e5c6;
-$fa-var-square-whatsapp: \f40c;
-$fa-var-whatsapp-square: \f40c;
-$fa-var-node-js: \f3d3;
-$fa-var-edge-legacy: \e078;
-$fa-var-slack: \f198;
-$fa-var-slack-hash: \f198;
-$fa-var-medrt: \f3c8;
-$fa-var-usb: \f287;
-$fa-var-tumblr: \f173;
-$fa-var-vaadin: \f408;
-$fa-var-quora: \f2c4;
-$fa-var-square-x-twitter: \e61a;
-$fa-var-reacteurope: \f75d;
-$fa-var-medium: \f23a;
-$fa-var-medium-m: \f23a;
-$fa-var-amilia: \f36d;
-$fa-var-mixcloud: \f289;
-$fa-var-flipboard: \f44d;
-$fa-var-viacoin: \f237;
-$fa-var-critical-role: \f6c9;
-$fa-var-sitrox: \e44a;
-$fa-var-discourse: \f393;
-$fa-var-joomla: \f1aa;
-$fa-var-mastodon: \f4f6;
-$fa-var-airbnb: \f834;
-$fa-var-wolf-pack-battalion: \f514;
-$fa-var-buy-n-large: \f8a6;
-$fa-var-gulp: \f3ae;
-$fa-var-creative-commons-sampling-plus: \f4f1;
-$fa-var-strava: \f428;
-$fa-var-ember: \f423;
-$fa-var-canadian-maple-leaf: \f785;
-$fa-var-teamspeak: \f4f9;
-$fa-var-pushed: \f3e1;
-$fa-var-wordpress-simple: \f411;
-$fa-var-nutritionix: \f3d6;
-$fa-var-wodu: \e088;
-$fa-var-google-pay: \e079;
-$fa-var-intercom: \f7af;
-$fa-var-zhihu: \f63f;
-$fa-var-korvue: \f42f;
-$fa-var-pix: \e43a;
-$fa-var-steam-symbol: \f3f6;
-
-$fa-icons: (
- "0": $fa-var-0,
- "1": $fa-var-1,
- "2": $fa-var-2,
- "3": $fa-var-3,
- "4": $fa-var-4,
- "5": $fa-var-5,
- "6": $fa-var-6,
- "7": $fa-var-7,
- "8": $fa-var-8,
- "9": $fa-var-9,
- "fill-drip": $fa-var-fill-drip,
- "arrows-to-circle": $fa-var-arrows-to-circle,
- "circle-chevron-right": $fa-var-circle-chevron-right,
- "chevron-circle-right": $fa-var-chevron-circle-right,
- "at": $fa-var-at,
- "trash-can": $fa-var-trash-can,
- "trash-alt": $fa-var-trash-alt,
- "text-height": $fa-var-text-height,
- "user-xmark": $fa-var-user-xmark,
- "user-times": $fa-var-user-times,
- "stethoscope": $fa-var-stethoscope,
- "message": $fa-var-message,
- "comment-alt": $fa-var-comment-alt,
- "info": $fa-var-info,
- "down-left-and-up-right-to-center": $fa-var-down-left-and-up-right-to-center,
- "compress-alt": $fa-var-compress-alt,
- "explosion": $fa-var-explosion,
- "file-lines": $fa-var-file-lines,
- "file-alt": $fa-var-file-alt,
- "file-text": $fa-var-file-text,
- "wave-square": $fa-var-wave-square,
- "ring": $fa-var-ring,
- "building-un": $fa-var-building-un,
- "dice-three": $fa-var-dice-three,
- "calendar-days": $fa-var-calendar-days,
- "calendar-alt": $fa-var-calendar-alt,
- "anchor-circle-check": $fa-var-anchor-circle-check,
- "building-circle-arrow-right": $fa-var-building-circle-arrow-right,
- "volleyball": $fa-var-volleyball,
- "volleyball-ball": $fa-var-volleyball-ball,
- "arrows-up-to-line": $fa-var-arrows-up-to-line,
- "sort-down": $fa-var-sort-down,
- "sort-desc": $fa-var-sort-desc,
- "circle-minus": $fa-var-circle-minus,
- "minus-circle": $fa-var-minus-circle,
- "door-open": $fa-var-door-open,
- "right-from-bracket": $fa-var-right-from-bracket,
- "sign-out-alt": $fa-var-sign-out-alt,
- "atom": $fa-var-atom,
- "soap": $fa-var-soap,
- "icons": $fa-var-icons,
- "heart-music-camera-bolt": $fa-var-heart-music-camera-bolt,
- "microphone-lines-slash": $fa-var-microphone-lines-slash,
- "microphone-alt-slash": $fa-var-microphone-alt-slash,
- "bridge-circle-check": $fa-var-bridge-circle-check,
- "pump-medical": $fa-var-pump-medical,
- "fingerprint": $fa-var-fingerprint,
- "hand-point-right": $fa-var-hand-point-right,
- "magnifying-glass-location": $fa-var-magnifying-glass-location,
- "search-location": $fa-var-search-location,
- "forward-step": $fa-var-forward-step,
- "step-forward": $fa-var-step-forward,
- "face-smile-beam": $fa-var-face-smile-beam,
- "smile-beam": $fa-var-smile-beam,
- "flag-checkered": $fa-var-flag-checkered,
- "football": $fa-var-football,
- "football-ball": $fa-var-football-ball,
- "school-circle-exclamation": $fa-var-school-circle-exclamation,
- "crop": $fa-var-crop,
- "angles-down": $fa-var-angles-down,
- "angle-double-down": $fa-var-angle-double-down,
- "users-rectangle": $fa-var-users-rectangle,
- "people-roof": $fa-var-people-roof,
- "people-line": $fa-var-people-line,
- "beer-mug-empty": $fa-var-beer-mug-empty,
- "beer": $fa-var-beer,
- "diagram-predecessor": $fa-var-diagram-predecessor,
- "arrow-up-long": $fa-var-arrow-up-long,
- "long-arrow-up": $fa-var-long-arrow-up,
- "fire-flame-simple": $fa-var-fire-flame-simple,
- "burn": $fa-var-burn,
- "person": $fa-var-person,
- "male": $fa-var-male,
- "laptop": $fa-var-laptop,
- "file-csv": $fa-var-file-csv,
- "menorah": $fa-var-menorah,
- "truck-plane": $fa-var-truck-plane,
- "record-vinyl": $fa-var-record-vinyl,
- "face-grin-stars": $fa-var-face-grin-stars,
- "grin-stars": $fa-var-grin-stars,
- "bong": $fa-var-bong,
- "spaghetti-monster-flying": $fa-var-spaghetti-monster-flying,
- "pastafarianism": $fa-var-pastafarianism,
- "arrow-down-up-across-line": $fa-var-arrow-down-up-across-line,
- "spoon": $fa-var-spoon,
- "utensil-spoon": $fa-var-utensil-spoon,
- "jar-wheat": $fa-var-jar-wheat,
- "envelopes-bulk": $fa-var-envelopes-bulk,
- "mail-bulk": $fa-var-mail-bulk,
- "file-circle-exclamation": $fa-var-file-circle-exclamation,
- "circle-h": $fa-var-circle-h,
- "hospital-symbol": $fa-var-hospital-symbol,
- "pager": $fa-var-pager,
- "address-book": $fa-var-address-book,
- "contact-book": $fa-var-contact-book,
- "strikethrough": $fa-var-strikethrough,
- "k": $fa-var-k,
- "landmark-flag": $fa-var-landmark-flag,
- "pencil": $fa-var-pencil,
- "pencil-alt": $fa-var-pencil-alt,
- "backward": $fa-var-backward,
- "caret-right": $fa-var-caret-right,
- "comments": $fa-var-comments,
- "paste": $fa-var-paste,
- "file-clipboard": $fa-var-file-clipboard,
- "code-pull-request": $fa-var-code-pull-request,
- "clipboard-list": $fa-var-clipboard-list,
- "truck-ramp-box": $fa-var-truck-ramp-box,
- "truck-loading": $fa-var-truck-loading,
- "user-check": $fa-var-user-check,
- "vial-virus": $fa-var-vial-virus,
- "sheet-plastic": $fa-var-sheet-plastic,
- "blog": $fa-var-blog,
- "user-ninja": $fa-var-user-ninja,
- "person-arrow-up-from-line": $fa-var-person-arrow-up-from-line,
- "scroll-torah": $fa-var-scroll-torah,
- "torah": $fa-var-torah,
- "broom-ball": $fa-var-broom-ball,
- "quidditch": $fa-var-quidditch,
- "quidditch-broom-ball": $fa-var-quidditch-broom-ball,
- "toggle-off": $fa-var-toggle-off,
- "box-archive": $fa-var-box-archive,
- "archive": $fa-var-archive,
- "person-drowning": $fa-var-person-drowning,
- "arrow-down-9-1": $fa-var-arrow-down-9-1,
- "sort-numeric-desc": $fa-var-sort-numeric-desc,
- "sort-numeric-down-alt": $fa-var-sort-numeric-down-alt,
- "face-grin-tongue-squint": $fa-var-face-grin-tongue-squint,
- "grin-tongue-squint": $fa-var-grin-tongue-squint,
- "spray-can": $fa-var-spray-can,
- "truck-monster": $fa-var-truck-monster,
- "w": $fa-var-w,
- "earth-africa": $fa-var-earth-africa,
- "globe-africa": $fa-var-globe-africa,
- "rainbow": $fa-var-rainbow,
- "circle-notch": $fa-var-circle-notch,
- "tablet-screen-button": $fa-var-tablet-screen-button,
- "tablet-alt": $fa-var-tablet-alt,
- "paw": $fa-var-paw,
- "cloud": $fa-var-cloud,
- "trowel-bricks": $fa-var-trowel-bricks,
- "face-flushed": $fa-var-face-flushed,
- "flushed": $fa-var-flushed,
- "hospital-user": $fa-var-hospital-user,
- "tent-arrow-left-right": $fa-var-tent-arrow-left-right,
- "gavel": $fa-var-gavel,
- "legal": $fa-var-legal,
- "binoculars": $fa-var-binoculars,
- "microphone-slash": $fa-var-microphone-slash,
- "box-tissue": $fa-var-box-tissue,
- "motorcycle": $fa-var-motorcycle,
- "bell-concierge": $fa-var-bell-concierge,
- "concierge-bell": $fa-var-concierge-bell,
- "pen-ruler": $fa-var-pen-ruler,
- "pencil-ruler": $fa-var-pencil-ruler,
- "people-arrows": $fa-var-people-arrows,
- "people-arrows-left-right": $fa-var-people-arrows-left-right,
- "mars-and-venus-burst": $fa-var-mars-and-venus-burst,
- "square-caret-right": $fa-var-square-caret-right,
- "caret-square-right": $fa-var-caret-square-right,
- "scissors": $fa-var-scissors,
- "cut": $fa-var-cut,
- "sun-plant-wilt": $fa-var-sun-plant-wilt,
- "toilets-portable": $fa-var-toilets-portable,
- "hockey-puck": $fa-var-hockey-puck,
- "table": $fa-var-table,
- "magnifying-glass-arrow-right": $fa-var-magnifying-glass-arrow-right,
- "tachograph-digital": $fa-var-tachograph-digital,
- "digital-tachograph": $fa-var-digital-tachograph,
- "users-slash": $fa-var-users-slash,
- "clover": $fa-var-clover,
- "reply": $fa-var-reply,
- "mail-reply": $fa-var-mail-reply,
- "star-and-crescent": $fa-var-star-and-crescent,
- "house-fire": $fa-var-house-fire,
- "square-minus": $fa-var-square-minus,
- "minus-square": $fa-var-minus-square,
- "helicopter": $fa-var-helicopter,
- "compass": $fa-var-compass,
- "square-caret-down": $fa-var-square-caret-down,
- "caret-square-down": $fa-var-caret-square-down,
- "file-circle-question": $fa-var-file-circle-question,
- "laptop-code": $fa-var-laptop-code,
- "swatchbook": $fa-var-swatchbook,
- "prescription-bottle": $fa-var-prescription-bottle,
- "bars": $fa-var-bars,
- "navicon": $fa-var-navicon,
- "people-group": $fa-var-people-group,
- "hourglass-end": $fa-var-hourglass-end,
- "hourglass-3": $fa-var-hourglass-3,
- "heart-crack": $fa-var-heart-crack,
- "heart-broken": $fa-var-heart-broken,
- "square-up-right": $fa-var-square-up-right,
- "external-link-square-alt": $fa-var-external-link-square-alt,
- "face-kiss-beam": $fa-var-face-kiss-beam,
- "kiss-beam": $fa-var-kiss-beam,
- "film": $fa-var-film,
- "ruler-horizontal": $fa-var-ruler-horizontal,
- "people-robbery": $fa-var-people-robbery,
- "lightbulb": $fa-var-lightbulb,
- "caret-left": $fa-var-caret-left,
- "circle-exclamation": $fa-var-circle-exclamation,
- "exclamation-circle": $fa-var-exclamation-circle,
- "school-circle-xmark": $fa-var-school-circle-xmark,
- "arrow-right-from-bracket": $fa-var-arrow-right-from-bracket,
- "sign-out": $fa-var-sign-out,
- "circle-chevron-down": $fa-var-circle-chevron-down,
- "chevron-circle-down": $fa-var-chevron-circle-down,
- "unlock-keyhole": $fa-var-unlock-keyhole,
- "unlock-alt": $fa-var-unlock-alt,
- "cloud-showers-heavy": $fa-var-cloud-showers-heavy,
- "headphones-simple": $fa-var-headphones-simple,
- "headphones-alt": $fa-var-headphones-alt,
- "sitemap": $fa-var-sitemap,
- "circle-dollar-to-slot": $fa-var-circle-dollar-to-slot,
- "donate": $fa-var-donate,
- "memory": $fa-var-memory,
- "road-spikes": $fa-var-road-spikes,
- "fire-burner": $fa-var-fire-burner,
- "flag": $fa-var-flag,
- "hanukiah": $fa-var-hanukiah,
- "feather": $fa-var-feather,
- "volume-low": $fa-var-volume-low,
- "volume-down": $fa-var-volume-down,
- "comment-slash": $fa-var-comment-slash,
- "cloud-sun-rain": $fa-var-cloud-sun-rain,
- "compress": $fa-var-compress,
- "wheat-awn": $fa-var-wheat-awn,
- "wheat-alt": $fa-var-wheat-alt,
- "ankh": $fa-var-ankh,
- "hands-holding-child": $fa-var-hands-holding-child,
- "asterisk": $fa-var-asterisk,
- "square-check": $fa-var-square-check,
- "check-square": $fa-var-check-square,
- "peseta-sign": $fa-var-peseta-sign,
- "heading": $fa-var-heading,
- "header": $fa-var-header,
- "ghost": $fa-var-ghost,
- "list": $fa-var-list,
- "list-squares": $fa-var-list-squares,
- "square-phone-flip": $fa-var-square-phone-flip,
- "phone-square-alt": $fa-var-phone-square-alt,
- "cart-plus": $fa-var-cart-plus,
- "gamepad": $fa-var-gamepad,
- "circle-dot": $fa-var-circle-dot,
- "dot-circle": $fa-var-dot-circle,
- "face-dizzy": $fa-var-face-dizzy,
- "dizzy": $fa-var-dizzy,
- "egg": $fa-var-egg,
- "house-medical-circle-xmark": $fa-var-house-medical-circle-xmark,
- "campground": $fa-var-campground,
- "folder-plus": $fa-var-folder-plus,
- "futbol": $fa-var-futbol,
- "futbol-ball": $fa-var-futbol-ball,
- "soccer-ball": $fa-var-soccer-ball,
- "paintbrush": $fa-var-paintbrush,
- "paint-brush": $fa-var-paint-brush,
- "lock": $fa-var-lock,
- "gas-pump": $fa-var-gas-pump,
- "hot-tub-person": $fa-var-hot-tub-person,
- "hot-tub": $fa-var-hot-tub,
- "map-location": $fa-var-map-location,
- "map-marked": $fa-var-map-marked,
- "house-flood-water": $fa-var-house-flood-water,
- "tree": $fa-var-tree,
- "bridge-lock": $fa-var-bridge-lock,
- "sack-dollar": $fa-var-sack-dollar,
- "pen-to-square": $fa-var-pen-to-square,
- "edit": $fa-var-edit,
- "car-side": $fa-var-car-side,
- "share-nodes": $fa-var-share-nodes,
- "share-alt": $fa-var-share-alt,
- "heart-circle-minus": $fa-var-heart-circle-minus,
- "hourglass-half": $fa-var-hourglass-half,
- "hourglass-2": $fa-var-hourglass-2,
- "microscope": $fa-var-microscope,
- "sink": $fa-var-sink,
- "bag-shopping": $fa-var-bag-shopping,
- "shopping-bag": $fa-var-shopping-bag,
- "arrow-down-z-a": $fa-var-arrow-down-z-a,
- "sort-alpha-desc": $fa-var-sort-alpha-desc,
- "sort-alpha-down-alt": $fa-var-sort-alpha-down-alt,
- "mitten": $fa-var-mitten,
- "person-rays": $fa-var-person-rays,
- "users": $fa-var-users,
- "eye-slash": $fa-var-eye-slash,
- "flask-vial": $fa-var-flask-vial,
- "hand": $fa-var-hand,
- "hand-paper": $fa-var-hand-paper,
- "om": $fa-var-om,
- "worm": $fa-var-worm,
- "house-circle-xmark": $fa-var-house-circle-xmark,
- "plug": $fa-var-plug,
- "chevron-up": $fa-var-chevron-up,
- "hand-spock": $fa-var-hand-spock,
- "stopwatch": $fa-var-stopwatch,
- "face-kiss": $fa-var-face-kiss,
- "kiss": $fa-var-kiss,
- "bridge-circle-xmark": $fa-var-bridge-circle-xmark,
- "face-grin-tongue": $fa-var-face-grin-tongue,
- "grin-tongue": $fa-var-grin-tongue,
- "chess-bishop": $fa-var-chess-bishop,
- "face-grin-wink": $fa-var-face-grin-wink,
- "grin-wink": $fa-var-grin-wink,
- "ear-deaf": $fa-var-ear-deaf,
- "deaf": $fa-var-deaf,
- "deafness": $fa-var-deafness,
- "hard-of-hearing": $fa-var-hard-of-hearing,
- "road-circle-check": $fa-var-road-circle-check,
- "dice-five": $fa-var-dice-five,
- "square-rss": $fa-var-square-rss,
- "rss-square": $fa-var-rss-square,
- "land-mine-on": $fa-var-land-mine-on,
- "i-cursor": $fa-var-i-cursor,
- "stamp": $fa-var-stamp,
- "stairs": $fa-var-stairs,
- "i": $fa-var-i,
- "hryvnia-sign": $fa-var-hryvnia-sign,
- "hryvnia": $fa-var-hryvnia,
- "pills": $fa-var-pills,
- "face-grin-wide": $fa-var-face-grin-wide,
- "grin-alt": $fa-var-grin-alt,
- "tooth": $fa-var-tooth,
- "v": $fa-var-v,
- "bangladeshi-taka-sign": $fa-var-bangladeshi-taka-sign,
- "bicycle": $fa-var-bicycle,
- "staff-snake": $fa-var-staff-snake,
- "rod-asclepius": $fa-var-rod-asclepius,
- "rod-snake": $fa-var-rod-snake,
- "staff-aesculapius": $fa-var-staff-aesculapius,
- "head-side-cough-slash": $fa-var-head-side-cough-slash,
- "truck-medical": $fa-var-truck-medical,
- "ambulance": $fa-var-ambulance,
- "wheat-awn-circle-exclamation": $fa-var-wheat-awn-circle-exclamation,
- "snowman": $fa-var-snowman,
- "mortar-pestle": $fa-var-mortar-pestle,
- "road-barrier": $fa-var-road-barrier,
- "school": $fa-var-school,
- "igloo": $fa-var-igloo,
- "joint": $fa-var-joint,
- "angle-right": $fa-var-angle-right,
- "horse": $fa-var-horse,
- "q": $fa-var-q,
- "g": $fa-var-g,
- "notes-medical": $fa-var-notes-medical,
- "temperature-half": $fa-var-temperature-half,
- "temperature-2": $fa-var-temperature-2,
- "thermometer-2": $fa-var-thermometer-2,
- "thermometer-half": $fa-var-thermometer-half,
- "dong-sign": $fa-var-dong-sign,
- "capsules": $fa-var-capsules,
- "poo-storm": $fa-var-poo-storm,
- "poo-bolt": $fa-var-poo-bolt,
- "face-frown-open": $fa-var-face-frown-open,
- "frown-open": $fa-var-frown-open,
- "hand-point-up": $fa-var-hand-point-up,
- "money-bill": $fa-var-money-bill,
- "bookmark": $fa-var-bookmark,
- "align-justify": $fa-var-align-justify,
- "umbrella-beach": $fa-var-umbrella-beach,
- "helmet-un": $fa-var-helmet-un,
- "bullseye": $fa-var-bullseye,
- "bacon": $fa-var-bacon,
- "hand-point-down": $fa-var-hand-point-down,
- "arrow-up-from-bracket": $fa-var-arrow-up-from-bracket,
- "folder": $fa-var-folder,
- "folder-blank": $fa-var-folder-blank,
- "file-waveform": $fa-var-file-waveform,
- "file-medical-alt": $fa-var-file-medical-alt,
- "radiation": $fa-var-radiation,
- "chart-simple": $fa-var-chart-simple,
- "mars-stroke": $fa-var-mars-stroke,
- "vial": $fa-var-vial,
- "gauge": $fa-var-gauge,
- "dashboard": $fa-var-dashboard,
- "gauge-med": $fa-var-gauge-med,
- "tachometer-alt-average": $fa-var-tachometer-alt-average,
- "wand-magic-sparkles": $fa-var-wand-magic-sparkles,
- "magic-wand-sparkles": $fa-var-magic-wand-sparkles,
- "e": $fa-var-e,
- "pen-clip": $fa-var-pen-clip,
- "pen-alt": $fa-var-pen-alt,
- "bridge-circle-exclamation": $fa-var-bridge-circle-exclamation,
- "user": $fa-var-user,
- "school-circle-check": $fa-var-school-circle-check,
- "dumpster": $fa-var-dumpster,
- "van-shuttle": $fa-var-van-shuttle,
- "shuttle-van": $fa-var-shuttle-van,
- "building-user": $fa-var-building-user,
- "square-caret-left": $fa-var-square-caret-left,
- "caret-square-left": $fa-var-caret-square-left,
- "highlighter": $fa-var-highlighter,
- "key": $fa-var-key,
- "bullhorn": $fa-var-bullhorn,
- "globe": $fa-var-globe,
- "synagogue": $fa-var-synagogue,
- "person-half-dress": $fa-var-person-half-dress,
- "road-bridge": $fa-var-road-bridge,
- "location-arrow": $fa-var-location-arrow,
- "c": $fa-var-c,
- "tablet-button": $fa-var-tablet-button,
- "building-lock": $fa-var-building-lock,
- "pizza-slice": $fa-var-pizza-slice,
- "money-bill-wave": $fa-var-money-bill-wave,
- "chart-area": $fa-var-chart-area,
- "area-chart": $fa-var-area-chart,
- "house-flag": $fa-var-house-flag,
- "person-circle-minus": $fa-var-person-circle-minus,
- "ban": $fa-var-ban,
- "cancel": $fa-var-cancel,
- "camera-rotate": $fa-var-camera-rotate,
- "spray-can-sparkles": $fa-var-spray-can-sparkles,
- "air-freshener": $fa-var-air-freshener,
- "star": $fa-var-star,
- "repeat": $fa-var-repeat,
- "cross": $fa-var-cross,
- "box": $fa-var-box,
- "venus-mars": $fa-var-venus-mars,
- "arrow-pointer": $fa-var-arrow-pointer,
- "mouse-pointer": $fa-var-mouse-pointer,
- "maximize": $fa-var-maximize,
- "expand-arrows-alt": $fa-var-expand-arrows-alt,
- "charging-station": $fa-var-charging-station,
- "shapes": $fa-var-shapes,
- "triangle-circle-square": $fa-var-triangle-circle-square,
- "shuffle": $fa-var-shuffle,
- "random": $fa-var-random,
- "person-running": $fa-var-person-running,
- "running": $fa-var-running,
- "mobile-retro": $fa-var-mobile-retro,
- "grip-lines-vertical": $fa-var-grip-lines-vertical,
- "spider": $fa-var-spider,
- "hands-bound": $fa-var-hands-bound,
- "file-invoice-dollar": $fa-var-file-invoice-dollar,
- "plane-circle-exclamation": $fa-var-plane-circle-exclamation,
- "x-ray": $fa-var-x-ray,
- "spell-check": $fa-var-spell-check,
- "slash": $fa-var-slash,
- "computer-mouse": $fa-var-computer-mouse,
- "mouse": $fa-var-mouse,
- "arrow-right-to-bracket": $fa-var-arrow-right-to-bracket,
- "sign-in": $fa-var-sign-in,
- "shop-slash": $fa-var-shop-slash,
- "store-alt-slash": $fa-var-store-alt-slash,
- "server": $fa-var-server,
- "virus-covid-slash": $fa-var-virus-covid-slash,
- "shop-lock": $fa-var-shop-lock,
- "hourglass-start": $fa-var-hourglass-start,
- "hourglass-1": $fa-var-hourglass-1,
- "blender-phone": $fa-var-blender-phone,
- "building-wheat": $fa-var-building-wheat,
- "person-breastfeeding": $fa-var-person-breastfeeding,
- "right-to-bracket": $fa-var-right-to-bracket,
- "sign-in-alt": $fa-var-sign-in-alt,
- "venus": $fa-var-venus,
- "passport": $fa-var-passport,
- "heart-pulse": $fa-var-heart-pulse,
- "heartbeat": $fa-var-heartbeat,
- "people-carry-box": $fa-var-people-carry-box,
- "people-carry": $fa-var-people-carry,
- "temperature-high": $fa-var-temperature-high,
- "microchip": $fa-var-microchip,
- "crown": $fa-var-crown,
- "weight-hanging": $fa-var-weight-hanging,
- "xmarks-lines": $fa-var-xmarks-lines,
- "file-prescription": $fa-var-file-prescription,
- "weight-scale": $fa-var-weight-scale,
- "weight": $fa-var-weight,
- "user-group": $fa-var-user-group,
- "user-friends": $fa-var-user-friends,
- "arrow-up-a-z": $fa-var-arrow-up-a-z,
- "sort-alpha-up": $fa-var-sort-alpha-up,
- "chess-knight": $fa-var-chess-knight,
- "face-laugh-squint": $fa-var-face-laugh-squint,
- "laugh-squint": $fa-var-laugh-squint,
- "wheelchair": $fa-var-wheelchair,
- "circle-arrow-up": $fa-var-circle-arrow-up,
- "arrow-circle-up": $fa-var-arrow-circle-up,
- "toggle-on": $fa-var-toggle-on,
- "person-walking": $fa-var-person-walking,
- "walking": $fa-var-walking,
- "l": $fa-var-l,
- "fire": $fa-var-fire,
- "bed-pulse": $fa-var-bed-pulse,
- "procedures": $fa-var-procedures,
- "shuttle-space": $fa-var-shuttle-space,
- "space-shuttle": $fa-var-space-shuttle,
- "face-laugh": $fa-var-face-laugh,
- "laugh": $fa-var-laugh,
- "folder-open": $fa-var-folder-open,
- "heart-circle-plus": $fa-var-heart-circle-plus,
- "code-fork": $fa-var-code-fork,
- "city": $fa-var-city,
- "microphone-lines": $fa-var-microphone-lines,
- "microphone-alt": $fa-var-microphone-alt,
- "pepper-hot": $fa-var-pepper-hot,
- "unlock": $fa-var-unlock,
- "colon-sign": $fa-var-colon-sign,
- "headset": $fa-var-headset,
- "store-slash": $fa-var-store-slash,
- "road-circle-xmark": $fa-var-road-circle-xmark,
- "user-minus": $fa-var-user-minus,
- "mars-stroke-up": $fa-var-mars-stroke-up,
- "mars-stroke-v": $fa-var-mars-stroke-v,
- "champagne-glasses": $fa-var-champagne-glasses,
- "glass-cheers": $fa-var-glass-cheers,
- "clipboard": $fa-var-clipboard,
- "house-circle-exclamation": $fa-var-house-circle-exclamation,
- "file-arrow-up": $fa-var-file-arrow-up,
- "file-upload": $fa-var-file-upload,
- "wifi": $fa-var-wifi,
- "wifi-3": $fa-var-wifi-3,
- "wifi-strong": $fa-var-wifi-strong,
- "bath": $fa-var-bath,
- "bathtub": $fa-var-bathtub,
- "underline": $fa-var-underline,
- "user-pen": $fa-var-user-pen,
- "user-edit": $fa-var-user-edit,
- "signature": $fa-var-signature,
- "stroopwafel": $fa-var-stroopwafel,
- "bold": $fa-var-bold,
- "anchor-lock": $fa-var-anchor-lock,
- "building-ngo": $fa-var-building-ngo,
- "manat-sign": $fa-var-manat-sign,
- "not-equal": $fa-var-not-equal,
- "border-top-left": $fa-var-border-top-left,
- "border-style": $fa-var-border-style,
- "map-location-dot": $fa-var-map-location-dot,
- "map-marked-alt": $fa-var-map-marked-alt,
- "jedi": $fa-var-jedi,
- "square-poll-vertical": $fa-var-square-poll-vertical,
- "poll": $fa-var-poll,
- "mug-hot": $fa-var-mug-hot,
- "car-battery": $fa-var-car-battery,
- "battery-car": $fa-var-battery-car,
- "gift": $fa-var-gift,
- "dice-two": $fa-var-dice-two,
- "chess-queen": $fa-var-chess-queen,
- "glasses": $fa-var-glasses,
- "chess-board": $fa-var-chess-board,
- "building-circle-check": $fa-var-building-circle-check,
- "person-chalkboard": $fa-var-person-chalkboard,
- "mars-stroke-right": $fa-var-mars-stroke-right,
- "mars-stroke-h": $fa-var-mars-stroke-h,
- "hand-back-fist": $fa-var-hand-back-fist,
- "hand-rock": $fa-var-hand-rock,
- "square-caret-up": $fa-var-square-caret-up,
- "caret-square-up": $fa-var-caret-square-up,
- "cloud-showers-water": $fa-var-cloud-showers-water,
- "chart-bar": $fa-var-chart-bar,
- "bar-chart": $fa-var-bar-chart,
- "hands-bubbles": $fa-var-hands-bubbles,
- "hands-wash": $fa-var-hands-wash,
- "less-than-equal": $fa-var-less-than-equal,
- "train": $fa-var-train,
- "eye-low-vision": $fa-var-eye-low-vision,
- "low-vision": $fa-var-low-vision,
- "crow": $fa-var-crow,
- "sailboat": $fa-var-sailboat,
- "window-restore": $fa-var-window-restore,
- "square-plus": $fa-var-square-plus,
- "plus-square": $fa-var-plus-square,
- "torii-gate": $fa-var-torii-gate,
- "frog": $fa-var-frog,
- "bucket": $fa-var-bucket,
- "image": $fa-var-image,
- "microphone": $fa-var-microphone,
- "cow": $fa-var-cow,
- "caret-up": $fa-var-caret-up,
- "screwdriver": $fa-var-screwdriver,
- "folder-closed": $fa-var-folder-closed,
- "house-tsunami": $fa-var-house-tsunami,
- "square-nfi": $fa-var-square-nfi,
- "arrow-up-from-ground-water": $fa-var-arrow-up-from-ground-water,
- "martini-glass": $fa-var-martini-glass,
- "glass-martini-alt": $fa-var-glass-martini-alt,
- "rotate-left": $fa-var-rotate-left,
- "rotate-back": $fa-var-rotate-back,
- "rotate-backward": $fa-var-rotate-backward,
- "undo-alt": $fa-var-undo-alt,
- "table-columns": $fa-var-table-columns,
- "columns": $fa-var-columns,
- "lemon": $fa-var-lemon,
- "head-side-mask": $fa-var-head-side-mask,
- "handshake": $fa-var-handshake,
- "gem": $fa-var-gem,
- "dolly": $fa-var-dolly,
- "dolly-box": $fa-var-dolly-box,
- "smoking": $fa-var-smoking,
- "minimize": $fa-var-minimize,
- "compress-arrows-alt": $fa-var-compress-arrows-alt,
- "monument": $fa-var-monument,
- "snowplow": $fa-var-snowplow,
- "angles-right": $fa-var-angles-right,
- "angle-double-right": $fa-var-angle-double-right,
- "cannabis": $fa-var-cannabis,
- "circle-play": $fa-var-circle-play,
- "play-circle": $fa-var-play-circle,
- "tablets": $fa-var-tablets,
- "ethernet": $fa-var-ethernet,
- "euro-sign": $fa-var-euro-sign,
- "eur": $fa-var-eur,
- "euro": $fa-var-euro,
- "chair": $fa-var-chair,
- "circle-check": $fa-var-circle-check,
- "check-circle": $fa-var-check-circle,
- "circle-stop": $fa-var-circle-stop,
- "stop-circle": $fa-var-stop-circle,
- "compass-drafting": $fa-var-compass-drafting,
- "drafting-compass": $fa-var-drafting-compass,
- "plate-wheat": $fa-var-plate-wheat,
- "icicles": $fa-var-icicles,
- "person-shelter": $fa-var-person-shelter,
- "neuter": $fa-var-neuter,
- "id-badge": $fa-var-id-badge,
- "marker": $fa-var-marker,
- "face-laugh-beam": $fa-var-face-laugh-beam,
- "laugh-beam": $fa-var-laugh-beam,
- "helicopter-symbol": $fa-var-helicopter-symbol,
- "universal-access": $fa-var-universal-access,
- "circle-chevron-up": $fa-var-circle-chevron-up,
- "chevron-circle-up": $fa-var-chevron-circle-up,
- "lari-sign": $fa-var-lari-sign,
- "volcano": $fa-var-volcano,
- "person-walking-dashed-line-arrow-right": $fa-var-person-walking-dashed-line-arrow-right,
- "sterling-sign": $fa-var-sterling-sign,
- "gbp": $fa-var-gbp,
- "pound-sign": $fa-var-pound-sign,
- "viruses": $fa-var-viruses,
- "square-person-confined": $fa-var-square-person-confined,
- "user-tie": $fa-var-user-tie,
- "arrow-down-long": $fa-var-arrow-down-long,
- "long-arrow-down": $fa-var-long-arrow-down,
- "tent-arrow-down-to-line": $fa-var-tent-arrow-down-to-line,
- "certificate": $fa-var-certificate,
- "reply-all": $fa-var-reply-all,
- "mail-reply-all": $fa-var-mail-reply-all,
- "suitcase": $fa-var-suitcase,
- "person-skating": $fa-var-person-skating,
- "skating": $fa-var-skating,
- "filter-circle-dollar": $fa-var-filter-circle-dollar,
- "funnel-dollar": $fa-var-funnel-dollar,
- "camera-retro": $fa-var-camera-retro,
- "circle-arrow-down": $fa-var-circle-arrow-down,
- "arrow-circle-down": $fa-var-arrow-circle-down,
- "file-import": $fa-var-file-import,
- "arrow-right-to-file": $fa-var-arrow-right-to-file,
- "square-arrow-up-right": $fa-var-square-arrow-up-right,
- "external-link-square": $fa-var-external-link-square,
- "box-open": $fa-var-box-open,
- "scroll": $fa-var-scroll,
- "spa": $fa-var-spa,
- "location-pin-lock": $fa-var-location-pin-lock,
- "pause": $fa-var-pause,
- "hill-avalanche": $fa-var-hill-avalanche,
- "temperature-empty": $fa-var-temperature-empty,
- "temperature-0": $fa-var-temperature-0,
- "thermometer-0": $fa-var-thermometer-0,
- "thermometer-empty": $fa-var-thermometer-empty,
- "bomb": $fa-var-bomb,
- "registered": $fa-var-registered,
- "address-card": $fa-var-address-card,
- "contact-card": $fa-var-contact-card,
- "vcard": $fa-var-vcard,
- "scale-unbalanced-flip": $fa-var-scale-unbalanced-flip,
- "balance-scale-right": $fa-var-balance-scale-right,
- "subscript": $fa-var-subscript,
- "diamond-turn-right": $fa-var-diamond-turn-right,
- "directions": $fa-var-directions,
- "burst": $fa-var-burst,
- "house-laptop": $fa-var-house-laptop,
- "laptop-house": $fa-var-laptop-house,
- "face-tired": $fa-var-face-tired,
- "tired": $fa-var-tired,
- "money-bills": $fa-var-money-bills,
- "smog": $fa-var-smog,
- "crutch": $fa-var-crutch,
- "cloud-arrow-up": $fa-var-cloud-arrow-up,
- "cloud-upload": $fa-var-cloud-upload,
- "cloud-upload-alt": $fa-var-cloud-upload-alt,
- "palette": $fa-var-palette,
- "arrows-turn-right": $fa-var-arrows-turn-right,
- "vest": $fa-var-vest,
- "ferry": $fa-var-ferry,
- "arrows-down-to-people": $fa-var-arrows-down-to-people,
- "seedling": $fa-var-seedling,
- "sprout": $fa-var-sprout,
- "left-right": $fa-var-left-right,
- "arrows-alt-h": $fa-var-arrows-alt-h,
- "boxes-packing": $fa-var-boxes-packing,
- "circle-arrow-left": $fa-var-circle-arrow-left,
- "arrow-circle-left": $fa-var-arrow-circle-left,
- "group-arrows-rotate": $fa-var-group-arrows-rotate,
- "bowl-food": $fa-var-bowl-food,
- "candy-cane": $fa-var-candy-cane,
- "arrow-down-wide-short": $fa-var-arrow-down-wide-short,
- "sort-amount-asc": $fa-var-sort-amount-asc,
- "sort-amount-down": $fa-var-sort-amount-down,
- "cloud-bolt": $fa-var-cloud-bolt,
- "thunderstorm": $fa-var-thunderstorm,
- "text-slash": $fa-var-text-slash,
- "remove-format": $fa-var-remove-format,
- "face-smile-wink": $fa-var-face-smile-wink,
- "smile-wink": $fa-var-smile-wink,
- "file-word": $fa-var-file-word,
- "file-powerpoint": $fa-var-file-powerpoint,
- "arrows-left-right": $fa-var-arrows-left-right,
- "arrows-h": $fa-var-arrows-h,
- "house-lock": $fa-var-house-lock,
- "cloud-arrow-down": $fa-var-cloud-arrow-down,
- "cloud-download": $fa-var-cloud-download,
- "cloud-download-alt": $fa-var-cloud-download-alt,
- "children": $fa-var-children,
- "chalkboard": $fa-var-chalkboard,
- "blackboard": $fa-var-blackboard,
- "user-large-slash": $fa-var-user-large-slash,
- "user-alt-slash": $fa-var-user-alt-slash,
- "envelope-open": $fa-var-envelope-open,
- "handshake-simple-slash": $fa-var-handshake-simple-slash,
- "handshake-alt-slash": $fa-var-handshake-alt-slash,
- "mattress-pillow": $fa-var-mattress-pillow,
- "guarani-sign": $fa-var-guarani-sign,
- "arrows-rotate": $fa-var-arrows-rotate,
- "refresh": $fa-var-refresh,
- "sync": $fa-var-sync,
- "fire-extinguisher": $fa-var-fire-extinguisher,
- "cruzeiro-sign": $fa-var-cruzeiro-sign,
- "greater-than-equal": $fa-var-greater-than-equal,
- "shield-halved": $fa-var-shield-halved,
- "shield-alt": $fa-var-shield-alt,
- "book-atlas": $fa-var-book-atlas,
- "atlas": $fa-var-atlas,
- "virus": $fa-var-virus,
- "envelope-circle-check": $fa-var-envelope-circle-check,
- "layer-group": $fa-var-layer-group,
- "arrows-to-dot": $fa-var-arrows-to-dot,
- "archway": $fa-var-archway,
- "heart-circle-check": $fa-var-heart-circle-check,
- "house-chimney-crack": $fa-var-house-chimney-crack,
- "house-damage": $fa-var-house-damage,
- "file-zipper": $fa-var-file-zipper,
- "file-archive": $fa-var-file-archive,
- "square": $fa-var-square,
- "martini-glass-empty": $fa-var-martini-glass-empty,
- "glass-martini": $fa-var-glass-martini,
- "couch": $fa-var-couch,
- "cedi-sign": $fa-var-cedi-sign,
- "italic": $fa-var-italic,
- "church": $fa-var-church,
- "comments-dollar": $fa-var-comments-dollar,
- "democrat": $fa-var-democrat,
- "z": $fa-var-z,
- "person-skiing": $fa-var-person-skiing,
- "skiing": $fa-var-skiing,
- "road-lock": $fa-var-road-lock,
- "a": $fa-var-a,
- "temperature-arrow-down": $fa-var-temperature-arrow-down,
- "temperature-down": $fa-var-temperature-down,
- "feather-pointed": $fa-var-feather-pointed,
- "feather-alt": $fa-var-feather-alt,
- "p": $fa-var-p,
- "snowflake": $fa-var-snowflake,
- "newspaper": $fa-var-newspaper,
- "rectangle-ad": $fa-var-rectangle-ad,
- "ad": $fa-var-ad,
- "circle-arrow-right": $fa-var-circle-arrow-right,
- "arrow-circle-right": $fa-var-arrow-circle-right,
- "filter-circle-xmark": $fa-var-filter-circle-xmark,
- "locust": $fa-var-locust,
- "sort": $fa-var-sort,
- "unsorted": $fa-var-unsorted,
- "list-ol": $fa-var-list-ol,
- "list-1-2": $fa-var-list-1-2,
- "list-numeric": $fa-var-list-numeric,
- "person-dress-burst": $fa-var-person-dress-burst,
- "money-check-dollar": $fa-var-money-check-dollar,
- "money-check-alt": $fa-var-money-check-alt,
- "vector-square": $fa-var-vector-square,
- "bread-slice": $fa-var-bread-slice,
- "language": $fa-var-language,
- "face-kiss-wink-heart": $fa-var-face-kiss-wink-heart,
- "kiss-wink-heart": $fa-var-kiss-wink-heart,
- "filter": $fa-var-filter,
- "question": $fa-var-question,
- "file-signature": $fa-var-file-signature,
- "up-down-left-right": $fa-var-up-down-left-right,
- "arrows-alt": $fa-var-arrows-alt,
- "house-chimney-user": $fa-var-house-chimney-user,
- "hand-holding-heart": $fa-var-hand-holding-heart,
- "puzzle-piece": $fa-var-puzzle-piece,
- "money-check": $fa-var-money-check,
- "star-half-stroke": $fa-var-star-half-stroke,
- "star-half-alt": $fa-var-star-half-alt,
- "code": $fa-var-code,
- "whiskey-glass": $fa-var-whiskey-glass,
- "glass-whiskey": $fa-var-glass-whiskey,
- "building-circle-exclamation": $fa-var-building-circle-exclamation,
- "magnifying-glass-chart": $fa-var-magnifying-glass-chart,
- "arrow-up-right-from-square": $fa-var-arrow-up-right-from-square,
- "external-link": $fa-var-external-link,
- "cubes-stacked": $fa-var-cubes-stacked,
- "won-sign": $fa-var-won-sign,
- "krw": $fa-var-krw,
- "won": $fa-var-won,
- "virus-covid": $fa-var-virus-covid,
- "austral-sign": $fa-var-austral-sign,
- "f": $fa-var-f,
- "leaf": $fa-var-leaf,
- "road": $fa-var-road,
- "taxi": $fa-var-taxi,
- "cab": $fa-var-cab,
- "person-circle-plus": $fa-var-person-circle-plus,
- "chart-pie": $fa-var-chart-pie,
- "pie-chart": $fa-var-pie-chart,
- "bolt-lightning": $fa-var-bolt-lightning,
- "sack-xmark": $fa-var-sack-xmark,
- "file-excel": $fa-var-file-excel,
- "file-contract": $fa-var-file-contract,
- "fish-fins": $fa-var-fish-fins,
- "building-flag": $fa-var-building-flag,
- "face-grin-beam": $fa-var-face-grin-beam,
- "grin-beam": $fa-var-grin-beam,
- "object-ungroup": $fa-var-object-ungroup,
- "poop": $fa-var-poop,
- "location-pin": $fa-var-location-pin,
- "map-marker": $fa-var-map-marker,
- "kaaba": $fa-var-kaaba,
- "toilet-paper": $fa-var-toilet-paper,
- "helmet-safety": $fa-var-helmet-safety,
- "hard-hat": $fa-var-hard-hat,
- "hat-hard": $fa-var-hat-hard,
- "eject": $fa-var-eject,
- "circle-right": $fa-var-circle-right,
- "arrow-alt-circle-right": $fa-var-arrow-alt-circle-right,
- "plane-circle-check": $fa-var-plane-circle-check,
- "face-rolling-eyes": $fa-var-face-rolling-eyes,
- "meh-rolling-eyes": $fa-var-meh-rolling-eyes,
- "object-group": $fa-var-object-group,
- "chart-line": $fa-var-chart-line,
- "line-chart": $fa-var-line-chart,
- "mask-ventilator": $fa-var-mask-ventilator,
- "arrow-right": $fa-var-arrow-right,
- "signs-post": $fa-var-signs-post,
- "map-signs": $fa-var-map-signs,
- "cash-register": $fa-var-cash-register,
- "person-circle-question": $fa-var-person-circle-question,
- "h": $fa-var-h,
- "tarp": $fa-var-tarp,
- "screwdriver-wrench": $fa-var-screwdriver-wrench,
- "tools": $fa-var-tools,
- "arrows-to-eye": $fa-var-arrows-to-eye,
- "plug-circle-bolt": $fa-var-plug-circle-bolt,
- "heart": $fa-var-heart,
- "mars-and-venus": $fa-var-mars-and-venus,
- "house-user": $fa-var-house-user,
- "home-user": $fa-var-home-user,
- "dumpster-fire": $fa-var-dumpster-fire,
- "house-crack": $fa-var-house-crack,
- "martini-glass-citrus": $fa-var-martini-glass-citrus,
- "cocktail": $fa-var-cocktail,
- "face-surprise": $fa-var-face-surprise,
- "surprise": $fa-var-surprise,
- "bottle-water": $fa-var-bottle-water,
- "circle-pause": $fa-var-circle-pause,
- "pause-circle": $fa-var-pause-circle,
- "toilet-paper-slash": $fa-var-toilet-paper-slash,
- "apple-whole": $fa-var-apple-whole,
- "apple-alt": $fa-var-apple-alt,
- "kitchen-set": $fa-var-kitchen-set,
- "r": $fa-var-r,
- "temperature-quarter": $fa-var-temperature-quarter,
- "temperature-1": $fa-var-temperature-1,
- "thermometer-1": $fa-var-thermometer-1,
- "thermometer-quarter": $fa-var-thermometer-quarter,
- "cube": $fa-var-cube,
- "bitcoin-sign": $fa-var-bitcoin-sign,
- "shield-dog": $fa-var-shield-dog,
- "solar-panel": $fa-var-solar-panel,
- "lock-open": $fa-var-lock-open,
- "elevator": $fa-var-elevator,
- "money-bill-transfer": $fa-var-money-bill-transfer,
- "money-bill-trend-up": $fa-var-money-bill-trend-up,
- "house-flood-water-circle-arrow-right": $fa-var-house-flood-water-circle-arrow-right,
- "square-poll-horizontal": $fa-var-square-poll-horizontal,
- "poll-h": $fa-var-poll-h,
- "circle": $fa-var-circle,
- "backward-fast": $fa-var-backward-fast,
- "fast-backward": $fa-var-fast-backward,
- "recycle": $fa-var-recycle,
- "user-astronaut": $fa-var-user-astronaut,
- "plane-slash": $fa-var-plane-slash,
- "trademark": $fa-var-trademark,
- "basketball": $fa-var-basketball,
- "basketball-ball": $fa-var-basketball-ball,
- "satellite-dish": $fa-var-satellite-dish,
- "circle-up": $fa-var-circle-up,
- "arrow-alt-circle-up": $fa-var-arrow-alt-circle-up,
- "mobile-screen-button": $fa-var-mobile-screen-button,
- "mobile-alt": $fa-var-mobile-alt,
- "volume-high": $fa-var-volume-high,
- "volume-up": $fa-var-volume-up,
- "users-rays": $fa-var-users-rays,
- "wallet": $fa-var-wallet,
- "clipboard-check": $fa-var-clipboard-check,
- "file-audio": $fa-var-file-audio,
- "burger": $fa-var-burger,
- "hamburger": $fa-var-hamburger,
- "wrench": $fa-var-wrench,
- "bugs": $fa-var-bugs,
- "rupee-sign": $fa-var-rupee-sign,
- "rupee": $fa-var-rupee,
- "file-image": $fa-var-file-image,
- "circle-question": $fa-var-circle-question,
- "question-circle": $fa-var-question-circle,
- "plane-departure": $fa-var-plane-departure,
- "handshake-slash": $fa-var-handshake-slash,
- "book-bookmark": $fa-var-book-bookmark,
- "code-branch": $fa-var-code-branch,
- "hat-cowboy": $fa-var-hat-cowboy,
- "bridge": $fa-var-bridge,
- "phone-flip": $fa-var-phone-flip,
- "phone-alt": $fa-var-phone-alt,
- "truck-front": $fa-var-truck-front,
- "cat": $fa-var-cat,
- "anchor-circle-exclamation": $fa-var-anchor-circle-exclamation,
- "truck-field": $fa-var-truck-field,
- "route": $fa-var-route,
- "clipboard-question": $fa-var-clipboard-question,
- "panorama": $fa-var-panorama,
- "comment-medical": $fa-var-comment-medical,
- "teeth-open": $fa-var-teeth-open,
- "file-circle-minus": $fa-var-file-circle-minus,
- "tags": $fa-var-tags,
- "wine-glass": $fa-var-wine-glass,
- "forward-fast": $fa-var-forward-fast,
- "fast-forward": $fa-var-fast-forward,
- "face-meh-blank": $fa-var-face-meh-blank,
- "meh-blank": $fa-var-meh-blank,
- "square-parking": $fa-var-square-parking,
- "parking": $fa-var-parking,
- "house-signal": $fa-var-house-signal,
- "bars-progress": $fa-var-bars-progress,
- "tasks-alt": $fa-var-tasks-alt,
- "faucet-drip": $fa-var-faucet-drip,
- "cart-flatbed": $fa-var-cart-flatbed,
- "dolly-flatbed": $fa-var-dolly-flatbed,
- "ban-smoking": $fa-var-ban-smoking,
- "smoking-ban": $fa-var-smoking-ban,
- "terminal": $fa-var-terminal,
- "mobile-button": $fa-var-mobile-button,
- "house-medical-flag": $fa-var-house-medical-flag,
- "basket-shopping": $fa-var-basket-shopping,
- "shopping-basket": $fa-var-shopping-basket,
- "tape": $fa-var-tape,
- "bus-simple": $fa-var-bus-simple,
- "bus-alt": $fa-var-bus-alt,
- "eye": $fa-var-eye,
- "face-sad-cry": $fa-var-face-sad-cry,
- "sad-cry": $fa-var-sad-cry,
- "audio-description": $fa-var-audio-description,
- "person-military-to-person": $fa-var-person-military-to-person,
- "file-shield": $fa-var-file-shield,
- "user-slash": $fa-var-user-slash,
- "pen": $fa-var-pen,
- "tower-observation": $fa-var-tower-observation,
- "file-code": $fa-var-file-code,
- "signal": $fa-var-signal,
- "signal-5": $fa-var-signal-5,
- "signal-perfect": $fa-var-signal-perfect,
- "bus": $fa-var-bus,
- "heart-circle-xmark": $fa-var-heart-circle-xmark,
- "house-chimney": $fa-var-house-chimney,
- "home-lg": $fa-var-home-lg,
- "window-maximize": $fa-var-window-maximize,
- "face-frown": $fa-var-face-frown,
- "frown": $fa-var-frown,
- "prescription": $fa-var-prescription,
- "shop": $fa-var-shop,
- "store-alt": $fa-var-store-alt,
- "floppy-disk": $fa-var-floppy-disk,
- "save": $fa-var-save,
- "vihara": $fa-var-vihara,
- "scale-unbalanced": $fa-var-scale-unbalanced,
- "balance-scale-left": $fa-var-balance-scale-left,
- "sort-up": $fa-var-sort-up,
- "sort-asc": $fa-var-sort-asc,
- "comment-dots": $fa-var-comment-dots,
- "commenting": $fa-var-commenting,
- "plant-wilt": $fa-var-plant-wilt,
- "diamond": $fa-var-diamond,
- "face-grin-squint": $fa-var-face-grin-squint,
- "grin-squint": $fa-var-grin-squint,
- "hand-holding-dollar": $fa-var-hand-holding-dollar,
- "hand-holding-usd": $fa-var-hand-holding-usd,
- "bacterium": $fa-var-bacterium,
- "hand-pointer": $fa-var-hand-pointer,
- "drum-steelpan": $fa-var-drum-steelpan,
- "hand-scissors": $fa-var-hand-scissors,
- "hands-praying": $fa-var-hands-praying,
- "praying-hands": $fa-var-praying-hands,
- "arrow-rotate-right": $fa-var-arrow-rotate-right,
- "arrow-right-rotate": $fa-var-arrow-right-rotate,
- "arrow-rotate-forward": $fa-var-arrow-rotate-forward,
- "redo": $fa-var-redo,
- "biohazard": $fa-var-biohazard,
- "location-crosshairs": $fa-var-location-crosshairs,
- "location": $fa-var-location,
- "mars-double": $fa-var-mars-double,
- "child-dress": $fa-var-child-dress,
- "users-between-lines": $fa-var-users-between-lines,
- "lungs-virus": $fa-var-lungs-virus,
- "face-grin-tears": $fa-var-face-grin-tears,
- "grin-tears": $fa-var-grin-tears,
- "phone": $fa-var-phone,
- "calendar-xmark": $fa-var-calendar-xmark,
- "calendar-times": $fa-var-calendar-times,
- "child-reaching": $fa-var-child-reaching,
- "head-side-virus": $fa-var-head-side-virus,
- "user-gear": $fa-var-user-gear,
- "user-cog": $fa-var-user-cog,
- "arrow-up-1-9": $fa-var-arrow-up-1-9,
- "sort-numeric-up": $fa-var-sort-numeric-up,
- "door-closed": $fa-var-door-closed,
- "shield-virus": $fa-var-shield-virus,
- "dice-six": $fa-var-dice-six,
- "mosquito-net": $fa-var-mosquito-net,
- "bridge-water": $fa-var-bridge-water,
- "person-booth": $fa-var-person-booth,
- "text-width": $fa-var-text-width,
- "hat-wizard": $fa-var-hat-wizard,
- "pen-fancy": $fa-var-pen-fancy,
- "person-digging": $fa-var-person-digging,
- "digging": $fa-var-digging,
- "trash": $fa-var-trash,
- "gauge-simple": $fa-var-gauge-simple,
- "gauge-simple-med": $fa-var-gauge-simple-med,
- "tachometer-average": $fa-var-tachometer-average,
- "book-medical": $fa-var-book-medical,
- "poo": $fa-var-poo,
- "quote-right": $fa-var-quote-right,
- "quote-right-alt": $fa-var-quote-right-alt,
- "shirt": $fa-var-shirt,
- "t-shirt": $fa-var-t-shirt,
- "tshirt": $fa-var-tshirt,
- "cubes": $fa-var-cubes,
- "divide": $fa-var-divide,
- "tenge-sign": $fa-var-tenge-sign,
- "tenge": $fa-var-tenge,
- "headphones": $fa-var-headphones,
- "hands-holding": $fa-var-hands-holding,
- "hands-clapping": $fa-var-hands-clapping,
- "republican": $fa-var-republican,
- "arrow-left": $fa-var-arrow-left,
- "person-circle-xmark": $fa-var-person-circle-xmark,
- "ruler": $fa-var-ruler,
- "align-left": $fa-var-align-left,
- "dice-d6": $fa-var-dice-d6,
- "restroom": $fa-var-restroom,
- "j": $fa-var-j,
- "users-viewfinder": $fa-var-users-viewfinder,
- "file-video": $fa-var-file-video,
- "up-right-from-square": $fa-var-up-right-from-square,
- "external-link-alt": $fa-var-external-link-alt,
- "table-cells": $fa-var-table-cells,
- "th": $fa-var-th,
- "file-pdf": $fa-var-file-pdf,
- "book-bible": $fa-var-book-bible,
- "bible": $fa-var-bible,
- "o": $fa-var-o,
- "suitcase-medical": $fa-var-suitcase-medical,
- "medkit": $fa-var-medkit,
- "user-secret": $fa-var-user-secret,
- "otter": $fa-var-otter,
- "person-dress": $fa-var-person-dress,
- "female": $fa-var-female,
- "comment-dollar": $fa-var-comment-dollar,
- "business-time": $fa-var-business-time,
- "briefcase-clock": $fa-var-briefcase-clock,
- "table-cells-large": $fa-var-table-cells-large,
- "th-large": $fa-var-th-large,
- "book-tanakh": $fa-var-book-tanakh,
- "tanakh": $fa-var-tanakh,
- "phone-volume": $fa-var-phone-volume,
- "volume-control-phone": $fa-var-volume-control-phone,
- "hat-cowboy-side": $fa-var-hat-cowboy-side,
- "clipboard-user": $fa-var-clipboard-user,
- "child": $fa-var-child,
- "lira-sign": $fa-var-lira-sign,
- "satellite": $fa-var-satellite,
- "plane-lock": $fa-var-plane-lock,
- "tag": $fa-var-tag,
- "comment": $fa-var-comment,
- "cake-candles": $fa-var-cake-candles,
- "birthday-cake": $fa-var-birthday-cake,
- "cake": $fa-var-cake,
- "envelope": $fa-var-envelope,
- "angles-up": $fa-var-angles-up,
- "angle-double-up": $fa-var-angle-double-up,
- "paperclip": $fa-var-paperclip,
- "arrow-right-to-city": $fa-var-arrow-right-to-city,
- "ribbon": $fa-var-ribbon,
- "lungs": $fa-var-lungs,
- "arrow-up-9-1": $fa-var-arrow-up-9-1,
- "sort-numeric-up-alt": $fa-var-sort-numeric-up-alt,
- "litecoin-sign": $fa-var-litecoin-sign,
- "border-none": $fa-var-border-none,
- "circle-nodes": $fa-var-circle-nodes,
- "parachute-box": $fa-var-parachute-box,
- "indent": $fa-var-indent,
- "truck-field-un": $fa-var-truck-field-un,
- "hourglass": $fa-var-hourglass,
- "hourglass-empty": $fa-var-hourglass-empty,
- "mountain": $fa-var-mountain,
- "user-doctor": $fa-var-user-doctor,
- "user-md": $fa-var-user-md,
- "circle-info": $fa-var-circle-info,
- "info-circle": $fa-var-info-circle,
- "cloud-meatball": $fa-var-cloud-meatball,
- "camera": $fa-var-camera,
- "camera-alt": $fa-var-camera-alt,
- "square-virus": $fa-var-square-virus,
- "meteor": $fa-var-meteor,
- "car-on": $fa-var-car-on,
- "sleigh": $fa-var-sleigh,
- "arrow-down-1-9": $fa-var-arrow-down-1-9,
- "sort-numeric-asc": $fa-var-sort-numeric-asc,
- "sort-numeric-down": $fa-var-sort-numeric-down,
- "hand-holding-droplet": $fa-var-hand-holding-droplet,
- "hand-holding-water": $fa-var-hand-holding-water,
- "water": $fa-var-water,
- "calendar-check": $fa-var-calendar-check,
- "braille": $fa-var-braille,
- "prescription-bottle-medical": $fa-var-prescription-bottle-medical,
- "prescription-bottle-alt": $fa-var-prescription-bottle-alt,
- "landmark": $fa-var-landmark,
- "truck": $fa-var-truck,
- "crosshairs": $fa-var-crosshairs,
- "person-cane": $fa-var-person-cane,
- "tent": $fa-var-tent,
- "vest-patches": $fa-var-vest-patches,
- "check-double": $fa-var-check-double,
- "arrow-down-a-z": $fa-var-arrow-down-a-z,
- "sort-alpha-asc": $fa-var-sort-alpha-asc,
- "sort-alpha-down": $fa-var-sort-alpha-down,
- "money-bill-wheat": $fa-var-money-bill-wheat,
- "cookie": $fa-var-cookie,
- "arrow-rotate-left": $fa-var-arrow-rotate-left,
- "arrow-left-rotate": $fa-var-arrow-left-rotate,
- "arrow-rotate-back": $fa-var-arrow-rotate-back,
- "arrow-rotate-backward": $fa-var-arrow-rotate-backward,
- "undo": $fa-var-undo,
- "hard-drive": $fa-var-hard-drive,
- "hdd": $fa-var-hdd,
- "face-grin-squint-tears": $fa-var-face-grin-squint-tears,
- "grin-squint-tears": $fa-var-grin-squint-tears,
- "dumbbell": $fa-var-dumbbell,
- "rectangle-list": $fa-var-rectangle-list,
- "list-alt": $fa-var-list-alt,
- "tarp-droplet": $fa-var-tarp-droplet,
- "house-medical-circle-check": $fa-var-house-medical-circle-check,
- "person-skiing-nordic": $fa-var-person-skiing-nordic,
- "skiing-nordic": $fa-var-skiing-nordic,
- "calendar-plus": $fa-var-calendar-plus,
- "plane-arrival": $fa-var-plane-arrival,
- "circle-left": $fa-var-circle-left,
- "arrow-alt-circle-left": $fa-var-arrow-alt-circle-left,
- "train-subway": $fa-var-train-subway,
- "subway": $fa-var-subway,
- "chart-gantt": $fa-var-chart-gantt,
- "indian-rupee-sign": $fa-var-indian-rupee-sign,
- "indian-rupee": $fa-var-indian-rupee,
- "inr": $fa-var-inr,
- "crop-simple": $fa-var-crop-simple,
- "crop-alt": $fa-var-crop-alt,
- "money-bill-1": $fa-var-money-bill-1,
- "money-bill-alt": $fa-var-money-bill-alt,
- "left-long": $fa-var-left-long,
- "long-arrow-alt-left": $fa-var-long-arrow-alt-left,
- "dna": $fa-var-dna,
- "virus-slash": $fa-var-virus-slash,
- "minus": $fa-var-minus,
- "subtract": $fa-var-subtract,
- "chess": $fa-var-chess,
- "arrow-left-long": $fa-var-arrow-left-long,
- "long-arrow-left": $fa-var-long-arrow-left,
- "plug-circle-check": $fa-var-plug-circle-check,
- "street-view": $fa-var-street-view,
- "franc-sign": $fa-var-franc-sign,
- "volume-off": $fa-var-volume-off,
- "hands-asl-interpreting": $fa-var-hands-asl-interpreting,
- "american-sign-language-interpreting": $fa-var-american-sign-language-interpreting,
- "asl-interpreting": $fa-var-asl-interpreting,
- "hands-american-sign-language-interpreting": $fa-var-hands-american-sign-language-interpreting,
- "gear": $fa-var-gear,
- "cog": $fa-var-cog,
- "droplet-slash": $fa-var-droplet-slash,
- "tint-slash": $fa-var-tint-slash,
- "mosque": $fa-var-mosque,
- "mosquito": $fa-var-mosquito,
- "star-of-david": $fa-var-star-of-david,
- "person-military-rifle": $fa-var-person-military-rifle,
- "cart-shopping": $fa-var-cart-shopping,
- "shopping-cart": $fa-var-shopping-cart,
- "vials": $fa-var-vials,
- "plug-circle-plus": $fa-var-plug-circle-plus,
- "place-of-worship": $fa-var-place-of-worship,
- "grip-vertical": $fa-var-grip-vertical,
- "arrow-turn-up": $fa-var-arrow-turn-up,
- "level-up": $fa-var-level-up,
- "u": $fa-var-u,
- "square-root-variable": $fa-var-square-root-variable,
- "square-root-alt": $fa-var-square-root-alt,
- "clock": $fa-var-clock,
- "clock-four": $fa-var-clock-four,
- "backward-step": $fa-var-backward-step,
- "step-backward": $fa-var-step-backward,
- "pallet": $fa-var-pallet,
- "faucet": $fa-var-faucet,
- "baseball-bat-ball": $fa-var-baseball-bat-ball,
- "s": $fa-var-s,
- "timeline": $fa-var-timeline,
- "keyboard": $fa-var-keyboard,
- "caret-down": $fa-var-caret-down,
- "house-chimney-medical": $fa-var-house-chimney-medical,
- "clinic-medical": $fa-var-clinic-medical,
- "temperature-three-quarters": $fa-var-temperature-three-quarters,
- "temperature-3": $fa-var-temperature-3,
- "thermometer-3": $fa-var-thermometer-3,
- "thermometer-three-quarters": $fa-var-thermometer-three-quarters,
- "mobile-screen": $fa-var-mobile-screen,
- "mobile-android-alt": $fa-var-mobile-android-alt,
- "plane-up": $fa-var-plane-up,
- "piggy-bank": $fa-var-piggy-bank,
- "battery-half": $fa-var-battery-half,
- "battery-3": $fa-var-battery-3,
- "mountain-city": $fa-var-mountain-city,
- "coins": $fa-var-coins,
- "khanda": $fa-var-khanda,
- "sliders": $fa-var-sliders,
- "sliders-h": $fa-var-sliders-h,
- "folder-tree": $fa-var-folder-tree,
- "network-wired": $fa-var-network-wired,
- "map-pin": $fa-var-map-pin,
- "hamsa": $fa-var-hamsa,
- "cent-sign": $fa-var-cent-sign,
- "flask": $fa-var-flask,
- "person-pregnant": $fa-var-person-pregnant,
- "wand-sparkles": $fa-var-wand-sparkles,
- "ellipsis-vertical": $fa-var-ellipsis-vertical,
- "ellipsis-v": $fa-var-ellipsis-v,
- "ticket": $fa-var-ticket,
- "power-off": $fa-var-power-off,
- "right-long": $fa-var-right-long,
- "long-arrow-alt-right": $fa-var-long-arrow-alt-right,
- "flag-usa": $fa-var-flag-usa,
- "laptop-file": $fa-var-laptop-file,
- "tty": $fa-var-tty,
- "teletype": $fa-var-teletype,
- "diagram-next": $fa-var-diagram-next,
- "person-rifle": $fa-var-person-rifle,
- "house-medical-circle-exclamation": $fa-var-house-medical-circle-exclamation,
- "closed-captioning": $fa-var-closed-captioning,
- "person-hiking": $fa-var-person-hiking,
- "hiking": $fa-var-hiking,
- "venus-double": $fa-var-venus-double,
- "images": $fa-var-images,
- "calculator": $fa-var-calculator,
- "people-pulling": $fa-var-people-pulling,
- "n": $fa-var-n,
- "cable-car": $fa-var-cable-car,
- "tram": $fa-var-tram,
- "cloud-rain": $fa-var-cloud-rain,
- "building-circle-xmark": $fa-var-building-circle-xmark,
- "ship": $fa-var-ship,
- "arrows-down-to-line": $fa-var-arrows-down-to-line,
- "download": $fa-var-download,
- "face-grin": $fa-var-face-grin,
- "grin": $fa-var-grin,
- "delete-left": $fa-var-delete-left,
- "backspace": $fa-var-backspace,
- "eye-dropper": $fa-var-eye-dropper,
- "eye-dropper-empty": $fa-var-eye-dropper-empty,
- "eyedropper": $fa-var-eyedropper,
- "file-circle-check": $fa-var-file-circle-check,
- "forward": $fa-var-forward,
- "mobile": $fa-var-mobile,
- "mobile-android": $fa-var-mobile-android,
- "mobile-phone": $fa-var-mobile-phone,
- "face-meh": $fa-var-face-meh,
- "meh": $fa-var-meh,
- "align-center": $fa-var-align-center,
- "book-skull": $fa-var-book-skull,
- "book-dead": $fa-var-book-dead,
- "id-card": $fa-var-id-card,
- "drivers-license": $fa-var-drivers-license,
- "outdent": $fa-var-outdent,
- "dedent": $fa-var-dedent,
- "heart-circle-exclamation": $fa-var-heart-circle-exclamation,
- "house": $fa-var-house,
- "home": $fa-var-home,
- "home-alt": $fa-var-home-alt,
- "home-lg-alt": $fa-var-home-lg-alt,
- "calendar-week": $fa-var-calendar-week,
- "laptop-medical": $fa-var-laptop-medical,
- "b": $fa-var-b,
- "file-medical": $fa-var-file-medical,
- "dice-one": $fa-var-dice-one,
- "kiwi-bird": $fa-var-kiwi-bird,
- "arrow-right-arrow-left": $fa-var-arrow-right-arrow-left,
- "exchange": $fa-var-exchange,
- "rotate-right": $fa-var-rotate-right,
- "redo-alt": $fa-var-redo-alt,
- "rotate-forward": $fa-var-rotate-forward,
- "utensils": $fa-var-utensils,
- "cutlery": $fa-var-cutlery,
- "arrow-up-wide-short": $fa-var-arrow-up-wide-short,
- "sort-amount-up": $fa-var-sort-amount-up,
- "mill-sign": $fa-var-mill-sign,
- "bowl-rice": $fa-var-bowl-rice,
- "skull": $fa-var-skull,
- "tower-broadcast": $fa-var-tower-broadcast,
- "broadcast-tower": $fa-var-broadcast-tower,
- "truck-pickup": $fa-var-truck-pickup,
- "up-long": $fa-var-up-long,
- "long-arrow-alt-up": $fa-var-long-arrow-alt-up,
- "stop": $fa-var-stop,
- "code-merge": $fa-var-code-merge,
- "upload": $fa-var-upload,
- "hurricane": $fa-var-hurricane,
- "mound": $fa-var-mound,
- "toilet-portable": $fa-var-toilet-portable,
- "compact-disc": $fa-var-compact-disc,
- "file-arrow-down": $fa-var-file-arrow-down,
- "file-download": $fa-var-file-download,
- "caravan": $fa-var-caravan,
- "shield-cat": $fa-var-shield-cat,
- "bolt": $fa-var-bolt,
- "zap": $fa-var-zap,
- "glass-water": $fa-var-glass-water,
- "oil-well": $fa-var-oil-well,
- "vault": $fa-var-vault,
- "mars": $fa-var-mars,
- "toilet": $fa-var-toilet,
- "plane-circle-xmark": $fa-var-plane-circle-xmark,
- "yen-sign": $fa-var-yen-sign,
- "cny": $fa-var-cny,
- "jpy": $fa-var-jpy,
- "rmb": $fa-var-rmb,
- "yen": $fa-var-yen,
- "ruble-sign": $fa-var-ruble-sign,
- "rouble": $fa-var-rouble,
- "rub": $fa-var-rub,
- "ruble": $fa-var-ruble,
- "sun": $fa-var-sun,
- "guitar": $fa-var-guitar,
- "face-laugh-wink": $fa-var-face-laugh-wink,
- "laugh-wink": $fa-var-laugh-wink,
- "horse-head": $fa-var-horse-head,
- "bore-hole": $fa-var-bore-hole,
- "industry": $fa-var-industry,
- "circle-down": $fa-var-circle-down,
- "arrow-alt-circle-down": $fa-var-arrow-alt-circle-down,
- "arrows-turn-to-dots": $fa-var-arrows-turn-to-dots,
- "florin-sign": $fa-var-florin-sign,
- "arrow-down-short-wide": $fa-var-arrow-down-short-wide,
- "sort-amount-desc": $fa-var-sort-amount-desc,
- "sort-amount-down-alt": $fa-var-sort-amount-down-alt,
- "less-than": $fa-var-less-than,
- "angle-down": $fa-var-angle-down,
- "car-tunnel": $fa-var-car-tunnel,
- "head-side-cough": $fa-var-head-side-cough,
- "grip-lines": $fa-var-grip-lines,
- "thumbs-down": $fa-var-thumbs-down,
- "user-lock": $fa-var-user-lock,
- "arrow-right-long": $fa-var-arrow-right-long,
- "long-arrow-right": $fa-var-long-arrow-right,
- "anchor-circle-xmark": $fa-var-anchor-circle-xmark,
- "ellipsis": $fa-var-ellipsis,
- "ellipsis-h": $fa-var-ellipsis-h,
- "chess-pawn": $fa-var-chess-pawn,
- "kit-medical": $fa-var-kit-medical,
- "first-aid": $fa-var-first-aid,
- "person-through-window": $fa-var-person-through-window,
- "toolbox": $fa-var-toolbox,
- "hands-holding-circle": $fa-var-hands-holding-circle,
- "bug": $fa-var-bug,
- "credit-card": $fa-var-credit-card,
- "credit-card-alt": $fa-var-credit-card-alt,
- "car": $fa-var-car,
- "automobile": $fa-var-automobile,
- "hand-holding-hand": $fa-var-hand-holding-hand,
- "book-open-reader": $fa-var-book-open-reader,
- "book-reader": $fa-var-book-reader,
- "mountain-sun": $fa-var-mountain-sun,
- "arrows-left-right-to-line": $fa-var-arrows-left-right-to-line,
- "dice-d20": $fa-var-dice-d20,
- "truck-droplet": $fa-var-truck-droplet,
- "file-circle-xmark": $fa-var-file-circle-xmark,
- "temperature-arrow-up": $fa-var-temperature-arrow-up,
- "temperature-up": $fa-var-temperature-up,
- "medal": $fa-var-medal,
- "bed": $fa-var-bed,
- "square-h": $fa-var-square-h,
- "h-square": $fa-var-h-square,
- "podcast": $fa-var-podcast,
- "temperature-full": $fa-var-temperature-full,
- "temperature-4": $fa-var-temperature-4,
- "thermometer-4": $fa-var-thermometer-4,
- "thermometer-full": $fa-var-thermometer-full,
- "bell": $fa-var-bell,
- "superscript": $fa-var-superscript,
- "plug-circle-xmark": $fa-var-plug-circle-xmark,
- "star-of-life": $fa-var-star-of-life,
- "phone-slash": $fa-var-phone-slash,
- "paint-roller": $fa-var-paint-roller,
- "handshake-angle": $fa-var-handshake-angle,
- "hands-helping": $fa-var-hands-helping,
- "location-dot": $fa-var-location-dot,
- "map-marker-alt": $fa-var-map-marker-alt,
- "file": $fa-var-file,
- "greater-than": $fa-var-greater-than,
- "person-swimming": $fa-var-person-swimming,
- "swimmer": $fa-var-swimmer,
- "arrow-down": $fa-var-arrow-down,
- "droplet": $fa-var-droplet,
- "tint": $fa-var-tint,
- "eraser": $fa-var-eraser,
- "earth-americas": $fa-var-earth-americas,
- "earth": $fa-var-earth,
- "earth-america": $fa-var-earth-america,
- "globe-americas": $fa-var-globe-americas,
- "person-burst": $fa-var-person-burst,
- "dove": $fa-var-dove,
- "battery-empty": $fa-var-battery-empty,
- "battery-0": $fa-var-battery-0,
- "socks": $fa-var-socks,
- "inbox": $fa-var-inbox,
- "section": $fa-var-section,
- "gauge-high": $fa-var-gauge-high,
- "tachometer-alt": $fa-var-tachometer-alt,
- "tachometer-alt-fast": $fa-var-tachometer-alt-fast,
- "envelope-open-text": $fa-var-envelope-open-text,
- "hospital": $fa-var-hospital,
- "hospital-alt": $fa-var-hospital-alt,
- "hospital-wide": $fa-var-hospital-wide,
- "wine-bottle": $fa-var-wine-bottle,
- "chess-rook": $fa-var-chess-rook,
- "bars-staggered": $fa-var-bars-staggered,
- "reorder": $fa-var-reorder,
- "stream": $fa-var-stream,
- "dharmachakra": $fa-var-dharmachakra,
- "hotdog": $fa-var-hotdog,
- "person-walking-with-cane": $fa-var-person-walking-with-cane,
- "blind": $fa-var-blind,
- "drum": $fa-var-drum,
- "ice-cream": $fa-var-ice-cream,
- "heart-circle-bolt": $fa-var-heart-circle-bolt,
- "fax": $fa-var-fax,
- "paragraph": $fa-var-paragraph,
- "check-to-slot": $fa-var-check-to-slot,
- "vote-yea": $fa-var-vote-yea,
- "star-half": $fa-var-star-half,
- "boxes-stacked": $fa-var-boxes-stacked,
- "boxes": $fa-var-boxes,
- "boxes-alt": $fa-var-boxes-alt,
- "link": $fa-var-link,
- "chain": $fa-var-chain,
- "ear-listen": $fa-var-ear-listen,
- "assistive-listening-systems": $fa-var-assistive-listening-systems,
- "tree-city": $fa-var-tree-city,
- "play": $fa-var-play,
- "font": $fa-var-font,
- "rupiah-sign": $fa-var-rupiah-sign,
- "magnifying-glass": $fa-var-magnifying-glass,
- "search": $fa-var-search,
- "table-tennis-paddle-ball": $fa-var-table-tennis-paddle-ball,
- "ping-pong-paddle-ball": $fa-var-ping-pong-paddle-ball,
- "table-tennis": $fa-var-table-tennis,
- "person-dots-from-line": $fa-var-person-dots-from-line,
- "diagnoses": $fa-var-diagnoses,
- "trash-can-arrow-up": $fa-var-trash-can-arrow-up,
- "trash-restore-alt": $fa-var-trash-restore-alt,
- "naira-sign": $fa-var-naira-sign,
- "cart-arrow-down": $fa-var-cart-arrow-down,
- "walkie-talkie": $fa-var-walkie-talkie,
- "file-pen": $fa-var-file-pen,
- "file-edit": $fa-var-file-edit,
- "receipt": $fa-var-receipt,
- "square-pen": $fa-var-square-pen,
- "pen-square": $fa-var-pen-square,
- "pencil-square": $fa-var-pencil-square,
- "suitcase-rolling": $fa-var-suitcase-rolling,
- "person-circle-exclamation": $fa-var-person-circle-exclamation,
- "chevron-down": $fa-var-chevron-down,
- "battery-full": $fa-var-battery-full,
- "battery": $fa-var-battery,
- "battery-5": $fa-var-battery-5,
- "skull-crossbones": $fa-var-skull-crossbones,
- "code-compare": $fa-var-code-compare,
- "list-ul": $fa-var-list-ul,
- "list-dots": $fa-var-list-dots,
- "school-lock": $fa-var-school-lock,
- "tower-cell": $fa-var-tower-cell,
- "down-long": $fa-var-down-long,
- "long-arrow-alt-down": $fa-var-long-arrow-alt-down,
- "ranking-star": $fa-var-ranking-star,
- "chess-king": $fa-var-chess-king,
- "person-harassing": $fa-var-person-harassing,
- "brazilian-real-sign": $fa-var-brazilian-real-sign,
- "landmark-dome": $fa-var-landmark-dome,
- "landmark-alt": $fa-var-landmark-alt,
- "arrow-up": $fa-var-arrow-up,
- "tv": $fa-var-tv,
- "television": $fa-var-television,
- "tv-alt": $fa-var-tv-alt,
- "shrimp": $fa-var-shrimp,
- "list-check": $fa-var-list-check,
- "tasks": $fa-var-tasks,
- "jug-detergent": $fa-var-jug-detergent,
- "circle-user": $fa-var-circle-user,
- "user-circle": $fa-var-user-circle,
- "user-shield": $fa-var-user-shield,
- "wind": $fa-var-wind,
- "car-burst": $fa-var-car-burst,
- "car-crash": $fa-var-car-crash,
- "y": $fa-var-y,
- "person-snowboarding": $fa-var-person-snowboarding,
- "snowboarding": $fa-var-snowboarding,
- "truck-fast": $fa-var-truck-fast,
- "shipping-fast": $fa-var-shipping-fast,
- "fish": $fa-var-fish,
- "user-graduate": $fa-var-user-graduate,
- "circle-half-stroke": $fa-var-circle-half-stroke,
- "adjust": $fa-var-adjust,
- "clapperboard": $fa-var-clapperboard,
- "circle-radiation": $fa-var-circle-radiation,
- "radiation-alt": $fa-var-radiation-alt,
- "baseball": $fa-var-baseball,
- "baseball-ball": $fa-var-baseball-ball,
- "jet-fighter-up": $fa-var-jet-fighter-up,
- "diagram-project": $fa-var-diagram-project,
- "project-diagram": $fa-var-project-diagram,
- "copy": $fa-var-copy,
- "volume-xmark": $fa-var-volume-xmark,
- "volume-mute": $fa-var-volume-mute,
- "volume-times": $fa-var-volume-times,
- "hand-sparkles": $fa-var-hand-sparkles,
- "grip": $fa-var-grip,
- "grip-horizontal": $fa-var-grip-horizontal,
- "share-from-square": $fa-var-share-from-square,
- "share-square": $fa-var-share-square,
- "child-combatant": $fa-var-child-combatant,
- "child-rifle": $fa-var-child-rifle,
- "gun": $fa-var-gun,
- "square-phone": $fa-var-square-phone,
- "phone-square": $fa-var-phone-square,
- "plus": $fa-var-plus,
- "add": $fa-var-add,
- "expand": $fa-var-expand,
- "computer": $fa-var-computer,
- "xmark": $fa-var-xmark,
- "close": $fa-var-close,
- "multiply": $fa-var-multiply,
- "remove": $fa-var-remove,
- "times": $fa-var-times,
- "arrows-up-down-left-right": $fa-var-arrows-up-down-left-right,
- "arrows": $fa-var-arrows,
- "chalkboard-user": $fa-var-chalkboard-user,
- "chalkboard-teacher": $fa-var-chalkboard-teacher,
- "peso-sign": $fa-var-peso-sign,
- "building-shield": $fa-var-building-shield,
- "baby": $fa-var-baby,
- "users-line": $fa-var-users-line,
- "quote-left": $fa-var-quote-left,
- "quote-left-alt": $fa-var-quote-left-alt,
- "tractor": $fa-var-tractor,
- "trash-arrow-up": $fa-var-trash-arrow-up,
- "trash-restore": $fa-var-trash-restore,
- "arrow-down-up-lock": $fa-var-arrow-down-up-lock,
- "lines-leaning": $fa-var-lines-leaning,
- "ruler-combined": $fa-var-ruler-combined,
- "copyright": $fa-var-copyright,
- "equals": $fa-var-equals,
- "blender": $fa-var-blender,
- "teeth": $fa-var-teeth,
- "shekel-sign": $fa-var-shekel-sign,
- "ils": $fa-var-ils,
- "shekel": $fa-var-shekel,
- "sheqel": $fa-var-sheqel,
- "sheqel-sign": $fa-var-sheqel-sign,
- "map": $fa-var-map,
- "rocket": $fa-var-rocket,
- "photo-film": $fa-var-photo-film,
- "photo-video": $fa-var-photo-video,
- "folder-minus": $fa-var-folder-minus,
- "store": $fa-var-store,
- "arrow-trend-up": $fa-var-arrow-trend-up,
- "plug-circle-minus": $fa-var-plug-circle-minus,
- "sign-hanging": $fa-var-sign-hanging,
- "sign": $fa-var-sign,
- "bezier-curve": $fa-var-bezier-curve,
- "bell-slash": $fa-var-bell-slash,
- "tablet": $fa-var-tablet,
- "tablet-android": $fa-var-tablet-android,
- "school-flag": $fa-var-school-flag,
- "fill": $fa-var-fill,
- "angle-up": $fa-var-angle-up,
- "drumstick-bite": $fa-var-drumstick-bite,
- "holly-berry": $fa-var-holly-berry,
- "chevron-left": $fa-var-chevron-left,
- "bacteria": $fa-var-bacteria,
- "hand-lizard": $fa-var-hand-lizard,
- "notdef": $fa-var-notdef,
- "disease": $fa-var-disease,
- "briefcase-medical": $fa-var-briefcase-medical,
- "genderless": $fa-var-genderless,
- "chevron-right": $fa-var-chevron-right,
- "retweet": $fa-var-retweet,
- "car-rear": $fa-var-car-rear,
- "car-alt": $fa-var-car-alt,
- "pump-soap": $fa-var-pump-soap,
- "video-slash": $fa-var-video-slash,
- "battery-quarter": $fa-var-battery-quarter,
- "battery-2": $fa-var-battery-2,
- "radio": $fa-var-radio,
- "baby-carriage": $fa-var-baby-carriage,
- "carriage-baby": $fa-var-carriage-baby,
- "traffic-light": $fa-var-traffic-light,
- "thermometer": $fa-var-thermometer,
- "vr-cardboard": $fa-var-vr-cardboard,
- "hand-middle-finger": $fa-var-hand-middle-finger,
- "percent": $fa-var-percent,
- "percentage": $fa-var-percentage,
- "truck-moving": $fa-var-truck-moving,
- "glass-water-droplet": $fa-var-glass-water-droplet,
- "display": $fa-var-display,
- "face-smile": $fa-var-face-smile,
- "smile": $fa-var-smile,
- "thumbtack": $fa-var-thumbtack,
- "thumb-tack": $fa-var-thumb-tack,
- "trophy": $fa-var-trophy,
- "person-praying": $fa-var-person-praying,
- "pray": $fa-var-pray,
- "hammer": $fa-var-hammer,
- "hand-peace": $fa-var-hand-peace,
- "rotate": $fa-var-rotate,
- "sync-alt": $fa-var-sync-alt,
- "spinner": $fa-var-spinner,
- "robot": $fa-var-robot,
- "peace": $fa-var-peace,
- "gears": $fa-var-gears,
- "cogs": $fa-var-cogs,
- "warehouse": $fa-var-warehouse,
- "arrow-up-right-dots": $fa-var-arrow-up-right-dots,
- "splotch": $fa-var-splotch,
- "face-grin-hearts": $fa-var-face-grin-hearts,
- "grin-hearts": $fa-var-grin-hearts,
- "dice-four": $fa-var-dice-four,
- "sim-card": $fa-var-sim-card,
- "transgender": $fa-var-transgender,
- "transgender-alt": $fa-var-transgender-alt,
- "mercury": $fa-var-mercury,
- "arrow-turn-down": $fa-var-arrow-turn-down,
- "level-down": $fa-var-level-down,
- "person-falling-burst": $fa-var-person-falling-burst,
- "award": $fa-var-award,
- "ticket-simple": $fa-var-ticket-simple,
- "ticket-alt": $fa-var-ticket-alt,
- "building": $fa-var-building,
- "angles-left": $fa-var-angles-left,
- "angle-double-left": $fa-var-angle-double-left,
- "qrcode": $fa-var-qrcode,
- "clock-rotate-left": $fa-var-clock-rotate-left,
- "history": $fa-var-history,
- "face-grin-beam-sweat": $fa-var-face-grin-beam-sweat,
- "grin-beam-sweat": $fa-var-grin-beam-sweat,
- "file-export": $fa-var-file-export,
- "arrow-right-from-file": $fa-var-arrow-right-from-file,
- "shield": $fa-var-shield,
- "shield-blank": $fa-var-shield-blank,
- "arrow-up-short-wide": $fa-var-arrow-up-short-wide,
- "sort-amount-up-alt": $fa-var-sort-amount-up-alt,
- "house-medical": $fa-var-house-medical,
- "golf-ball-tee": $fa-var-golf-ball-tee,
- "golf-ball": $fa-var-golf-ball,
- "circle-chevron-left": $fa-var-circle-chevron-left,
- "chevron-circle-left": $fa-var-chevron-circle-left,
- "house-chimney-window": $fa-var-house-chimney-window,
- "pen-nib": $fa-var-pen-nib,
- "tent-arrow-turn-left": $fa-var-tent-arrow-turn-left,
- "tents": $fa-var-tents,
- "wand-magic": $fa-var-wand-magic,
- "magic": $fa-var-magic,
- "dog": $fa-var-dog,
- "carrot": $fa-var-carrot,
- "moon": $fa-var-moon,
- "wine-glass-empty": $fa-var-wine-glass-empty,
- "wine-glass-alt": $fa-var-wine-glass-alt,
- "cheese": $fa-var-cheese,
- "yin-yang": $fa-var-yin-yang,
- "music": $fa-var-music,
- "code-commit": $fa-var-code-commit,
- "temperature-low": $fa-var-temperature-low,
- "person-biking": $fa-var-person-biking,
- "biking": $fa-var-biking,
- "broom": $fa-var-broom,
- "shield-heart": $fa-var-shield-heart,
- "gopuram": $fa-var-gopuram,
- "earth-oceania": $fa-var-earth-oceania,
- "globe-oceania": $fa-var-globe-oceania,
- "square-xmark": $fa-var-square-xmark,
- "times-square": $fa-var-times-square,
- "xmark-square": $fa-var-xmark-square,
- "hashtag": $fa-var-hashtag,
- "up-right-and-down-left-from-center": $fa-var-up-right-and-down-left-from-center,
- "expand-alt": $fa-var-expand-alt,
- "oil-can": $fa-var-oil-can,
- "t": $fa-var-t,
- "hippo": $fa-var-hippo,
- "chart-column": $fa-var-chart-column,
- "infinity": $fa-var-infinity,
- "vial-circle-check": $fa-var-vial-circle-check,
- "person-arrow-down-to-line": $fa-var-person-arrow-down-to-line,
- "voicemail": $fa-var-voicemail,
- "fan": $fa-var-fan,
- "person-walking-luggage": $fa-var-person-walking-luggage,
- "up-down": $fa-var-up-down,
- "arrows-alt-v": $fa-var-arrows-alt-v,
- "cloud-moon-rain": $fa-var-cloud-moon-rain,
- "calendar": $fa-var-calendar,
- "trailer": $fa-var-trailer,
- "bahai": $fa-var-bahai,
- "haykal": $fa-var-haykal,
- "sd-card": $fa-var-sd-card,
- "dragon": $fa-var-dragon,
- "shoe-prints": $fa-var-shoe-prints,
- "circle-plus": $fa-var-circle-plus,
- "plus-circle": $fa-var-plus-circle,
- "face-grin-tongue-wink": $fa-var-face-grin-tongue-wink,
- "grin-tongue-wink": $fa-var-grin-tongue-wink,
- "hand-holding": $fa-var-hand-holding,
- "plug-circle-exclamation": $fa-var-plug-circle-exclamation,
- "link-slash": $fa-var-link-slash,
- "chain-broken": $fa-var-chain-broken,
- "chain-slash": $fa-var-chain-slash,
- "unlink": $fa-var-unlink,
- "clone": $fa-var-clone,
- "person-walking-arrow-loop-left": $fa-var-person-walking-arrow-loop-left,
- "arrow-up-z-a": $fa-var-arrow-up-z-a,
- "sort-alpha-up-alt": $fa-var-sort-alpha-up-alt,
- "fire-flame-curved": $fa-var-fire-flame-curved,
- "fire-alt": $fa-var-fire-alt,
- "tornado": $fa-var-tornado,
- "file-circle-plus": $fa-var-file-circle-plus,
- "book-quran": $fa-var-book-quran,
- "quran": $fa-var-quran,
- "anchor": $fa-var-anchor,
- "border-all": $fa-var-border-all,
- "face-angry": $fa-var-face-angry,
- "angry": $fa-var-angry,
- "cookie-bite": $fa-var-cookie-bite,
- "arrow-trend-down": $fa-var-arrow-trend-down,
- "rss": $fa-var-rss,
- "feed": $fa-var-feed,
- "draw-polygon": $fa-var-draw-polygon,
- "scale-balanced": $fa-var-scale-balanced,
- "balance-scale": $fa-var-balance-scale,
- "gauge-simple-high": $fa-var-gauge-simple-high,
- "tachometer": $fa-var-tachometer,
- "tachometer-fast": $fa-var-tachometer-fast,
- "shower": $fa-var-shower,
- "desktop": $fa-var-desktop,
- "desktop-alt": $fa-var-desktop-alt,
- "m": $fa-var-m,
- "table-list": $fa-var-table-list,
- "th-list": $fa-var-th-list,
- "comment-sms": $fa-var-comment-sms,
- "sms": $fa-var-sms,
- "book": $fa-var-book,
- "user-plus": $fa-var-user-plus,
- "check": $fa-var-check,
- "battery-three-quarters": $fa-var-battery-three-quarters,
- "battery-4": $fa-var-battery-4,
- "house-circle-check": $fa-var-house-circle-check,
- "angle-left": $fa-var-angle-left,
- "diagram-successor": $fa-var-diagram-successor,
- "truck-arrow-right": $fa-var-truck-arrow-right,
- "arrows-split-up-and-left": $fa-var-arrows-split-up-and-left,
- "hand-fist": $fa-var-hand-fist,
- "fist-raised": $fa-var-fist-raised,
- "cloud-moon": $fa-var-cloud-moon,
- "briefcase": $fa-var-briefcase,
- "person-falling": $fa-var-person-falling,
- "image-portrait": $fa-var-image-portrait,
- "portrait": $fa-var-portrait,
- "user-tag": $fa-var-user-tag,
- "rug": $fa-var-rug,
- "earth-europe": $fa-var-earth-europe,
- "globe-europe": $fa-var-globe-europe,
- "cart-flatbed-suitcase": $fa-var-cart-flatbed-suitcase,
- "luggage-cart": $fa-var-luggage-cart,
- "rectangle-xmark": $fa-var-rectangle-xmark,
- "rectangle-times": $fa-var-rectangle-times,
- "times-rectangle": $fa-var-times-rectangle,
- "window-close": $fa-var-window-close,
- "baht-sign": $fa-var-baht-sign,
- "book-open": $fa-var-book-open,
- "book-journal-whills": $fa-var-book-journal-whills,
- "journal-whills": $fa-var-journal-whills,
- "handcuffs": $fa-var-handcuffs,
- "triangle-exclamation": $fa-var-triangle-exclamation,
- "exclamation-triangle": $fa-var-exclamation-triangle,
- "warning": $fa-var-warning,
- "database": $fa-var-database,
- "share": $fa-var-share,
- "arrow-turn-right": $fa-var-arrow-turn-right,
- "mail-forward": $fa-var-mail-forward,
- "bottle-droplet": $fa-var-bottle-droplet,
- "mask-face": $fa-var-mask-face,
- "hill-rockslide": $fa-var-hill-rockslide,
- "right-left": $fa-var-right-left,
- "exchange-alt": $fa-var-exchange-alt,
- "paper-plane": $fa-var-paper-plane,
- "road-circle-exclamation": $fa-var-road-circle-exclamation,
- "dungeon": $fa-var-dungeon,
- "align-right": $fa-var-align-right,
- "money-bill-1-wave": $fa-var-money-bill-1-wave,
- "money-bill-wave-alt": $fa-var-money-bill-wave-alt,
- "life-ring": $fa-var-life-ring,
- "hands": $fa-var-hands,
- "sign-language": $fa-var-sign-language,
- "signing": $fa-var-signing,
- "calendar-day": $fa-var-calendar-day,
- "water-ladder": $fa-var-water-ladder,
- "ladder-water": $fa-var-ladder-water,
- "swimming-pool": $fa-var-swimming-pool,
- "arrows-up-down": $fa-var-arrows-up-down,
- "arrows-v": $fa-var-arrows-v,
- "face-grimace": $fa-var-face-grimace,
- "grimace": $fa-var-grimace,
- "wheelchair-move": $fa-var-wheelchair-move,
- "wheelchair-alt": $fa-var-wheelchair-alt,
- "turn-down": $fa-var-turn-down,
- "level-down-alt": $fa-var-level-down-alt,
- "person-walking-arrow-right": $fa-var-person-walking-arrow-right,
- "square-envelope": $fa-var-square-envelope,
- "envelope-square": $fa-var-envelope-square,
- "dice": $fa-var-dice,
- "bowling-ball": $fa-var-bowling-ball,
- "brain": $fa-var-brain,
- "bandage": $fa-var-bandage,
- "band-aid": $fa-var-band-aid,
- "calendar-minus": $fa-var-calendar-minus,
- "circle-xmark": $fa-var-circle-xmark,
- "times-circle": $fa-var-times-circle,
- "xmark-circle": $fa-var-xmark-circle,
- "gifts": $fa-var-gifts,
- "hotel": $fa-var-hotel,
- "earth-asia": $fa-var-earth-asia,
- "globe-asia": $fa-var-globe-asia,
- "id-card-clip": $fa-var-id-card-clip,
- "id-card-alt": $fa-var-id-card-alt,
- "magnifying-glass-plus": $fa-var-magnifying-glass-plus,
- "search-plus": $fa-var-search-plus,
- "thumbs-up": $fa-var-thumbs-up,
- "user-clock": $fa-var-user-clock,
- "hand-dots": $fa-var-hand-dots,
- "allergies": $fa-var-allergies,
- "file-invoice": $fa-var-file-invoice,
- "window-minimize": $fa-var-window-minimize,
- "mug-saucer": $fa-var-mug-saucer,
- "coffee": $fa-var-coffee,
- "brush": $fa-var-brush,
- "mask": $fa-var-mask,
- "magnifying-glass-minus": $fa-var-magnifying-glass-minus,
- "search-minus": $fa-var-search-minus,
- "ruler-vertical": $fa-var-ruler-vertical,
- "user-large": $fa-var-user-large,
- "user-alt": $fa-var-user-alt,
- "train-tram": $fa-var-train-tram,
- "user-nurse": $fa-var-user-nurse,
- "syringe": $fa-var-syringe,
- "cloud-sun": $fa-var-cloud-sun,
- "stopwatch-20": $fa-var-stopwatch-20,
- "square-full": $fa-var-square-full,
- "magnet": $fa-var-magnet,
- "jar": $fa-var-jar,
- "note-sticky": $fa-var-note-sticky,
- "sticky-note": $fa-var-sticky-note,
- "bug-slash": $fa-var-bug-slash,
- "arrow-up-from-water-pump": $fa-var-arrow-up-from-water-pump,
- "bone": $fa-var-bone,
- "user-injured": $fa-var-user-injured,
- "face-sad-tear": $fa-var-face-sad-tear,
- "sad-tear": $fa-var-sad-tear,
- "plane": $fa-var-plane,
- "tent-arrows-down": $fa-var-tent-arrows-down,
- "exclamation": $fa-var-exclamation,
- "arrows-spin": $fa-var-arrows-spin,
- "print": $fa-var-print,
- "turkish-lira-sign": $fa-var-turkish-lira-sign,
- "try": $fa-var-try,
- "turkish-lira": $fa-var-turkish-lira,
- "dollar-sign": $fa-var-dollar-sign,
- "dollar": $fa-var-dollar,
- "usd": $fa-var-usd,
- "x": $fa-var-x,
- "magnifying-glass-dollar": $fa-var-magnifying-glass-dollar,
- "search-dollar": $fa-var-search-dollar,
- "users-gear": $fa-var-users-gear,
- "users-cog": $fa-var-users-cog,
- "person-military-pointing": $fa-var-person-military-pointing,
- "building-columns": $fa-var-building-columns,
- "bank": $fa-var-bank,
- "institution": $fa-var-institution,
- "museum": $fa-var-museum,
- "university": $fa-var-university,
- "umbrella": $fa-var-umbrella,
- "trowel": $fa-var-trowel,
- "d": $fa-var-d,
- "stapler": $fa-var-stapler,
- "masks-theater": $fa-var-masks-theater,
- "theater-masks": $fa-var-theater-masks,
- "kip-sign": $fa-var-kip-sign,
- "hand-point-left": $fa-var-hand-point-left,
- "handshake-simple": $fa-var-handshake-simple,
- "handshake-alt": $fa-var-handshake-alt,
- "jet-fighter": $fa-var-jet-fighter,
- "fighter-jet": $fa-var-fighter-jet,
- "square-share-nodes": $fa-var-square-share-nodes,
- "share-alt-square": $fa-var-share-alt-square,
- "barcode": $fa-var-barcode,
- "plus-minus": $fa-var-plus-minus,
- "video": $fa-var-video,
- "video-camera": $fa-var-video-camera,
- "graduation-cap": $fa-var-graduation-cap,
- "mortar-board": $fa-var-mortar-board,
- "hand-holding-medical": $fa-var-hand-holding-medical,
- "person-circle-check": $fa-var-person-circle-check,
- "turn-up": $fa-var-turn-up,
- "level-up-alt": $fa-var-level-up-alt,
-);
-
-$fa-brand-icons: (
- "monero": $fa-var-monero,
- "hooli": $fa-var-hooli,
- "yelp": $fa-var-yelp,
- "cc-visa": $fa-var-cc-visa,
- "lastfm": $fa-var-lastfm,
- "shopware": $fa-var-shopware,
- "creative-commons-nc": $fa-var-creative-commons-nc,
- "aws": $fa-var-aws,
- "redhat": $fa-var-redhat,
- "yoast": $fa-var-yoast,
- "cloudflare": $fa-var-cloudflare,
- "ups": $fa-var-ups,
- "wpexplorer": $fa-var-wpexplorer,
- "dyalog": $fa-var-dyalog,
- "bity": $fa-var-bity,
- "stackpath": $fa-var-stackpath,
- "buysellads": $fa-var-buysellads,
- "first-order": $fa-var-first-order,
- "modx": $fa-var-modx,
- "guilded": $fa-var-guilded,
- "vnv": $fa-var-vnv,
- "square-js": $fa-var-square-js,
- "js-square": $fa-var-js-square,
- "microsoft": $fa-var-microsoft,
- "qq": $fa-var-qq,
- "orcid": $fa-var-orcid,
- "java": $fa-var-java,
- "invision": $fa-var-invision,
- "creative-commons-pd-alt": $fa-var-creative-commons-pd-alt,
- "centercode": $fa-var-centercode,
- "glide-g": $fa-var-glide-g,
- "drupal": $fa-var-drupal,
- "hire-a-helper": $fa-var-hire-a-helper,
- "creative-commons-by": $fa-var-creative-commons-by,
- "unity": $fa-var-unity,
- "whmcs": $fa-var-whmcs,
- "rocketchat": $fa-var-rocketchat,
- "vk": $fa-var-vk,
- "untappd": $fa-var-untappd,
- "mailchimp": $fa-var-mailchimp,
- "css3-alt": $fa-var-css3-alt,
- "square-reddit": $fa-var-square-reddit,
- "reddit-square": $fa-var-reddit-square,
- "vimeo-v": $fa-var-vimeo-v,
- "contao": $fa-var-contao,
- "square-font-awesome": $fa-var-square-font-awesome,
- "deskpro": $fa-var-deskpro,
- "sistrix": $fa-var-sistrix,
- "square-instagram": $fa-var-square-instagram,
- "instagram-square": $fa-var-instagram-square,
- "battle-net": $fa-var-battle-net,
- "the-red-yeti": $fa-var-the-red-yeti,
- "square-hacker-news": $fa-var-square-hacker-news,
- "hacker-news-square": $fa-var-hacker-news-square,
- "edge": $fa-var-edge,
- "threads": $fa-var-threads,
- "napster": $fa-var-napster,
- "square-snapchat": $fa-var-square-snapchat,
- "snapchat-square": $fa-var-snapchat-square,
- "google-plus-g": $fa-var-google-plus-g,
- "artstation": $fa-var-artstation,
- "markdown": $fa-var-markdown,
- "sourcetree": $fa-var-sourcetree,
- "google-plus": $fa-var-google-plus,
- "diaspora": $fa-var-diaspora,
- "foursquare": $fa-var-foursquare,
- "stack-overflow": $fa-var-stack-overflow,
- "github-alt": $fa-var-github-alt,
- "phoenix-squadron": $fa-var-phoenix-squadron,
- "pagelines": $fa-var-pagelines,
- "algolia": $fa-var-algolia,
- "red-river": $fa-var-red-river,
- "creative-commons-sa": $fa-var-creative-commons-sa,
- "safari": $fa-var-safari,
- "google": $fa-var-google,
- "square-font-awesome-stroke": $fa-var-square-font-awesome-stroke,
- "font-awesome-alt": $fa-var-font-awesome-alt,
- "atlassian": $fa-var-atlassian,
- "linkedin-in": $fa-var-linkedin-in,
- "digital-ocean": $fa-var-digital-ocean,
- "nimblr": $fa-var-nimblr,
- "chromecast": $fa-var-chromecast,
- "evernote": $fa-var-evernote,
- "hacker-news": $fa-var-hacker-news,
- "creative-commons-sampling": $fa-var-creative-commons-sampling,
- "adversal": $fa-var-adversal,
- "creative-commons": $fa-var-creative-commons,
- "watchman-monitoring": $fa-var-watchman-monitoring,
- "fonticons": $fa-var-fonticons,
- "weixin": $fa-var-weixin,
- "shirtsinbulk": $fa-var-shirtsinbulk,
- "codepen": $fa-var-codepen,
- "git-alt": $fa-var-git-alt,
- "lyft": $fa-var-lyft,
- "rev": $fa-var-rev,
- "windows": $fa-var-windows,
- "wizards-of-the-coast": $fa-var-wizards-of-the-coast,
- "square-viadeo": $fa-var-square-viadeo,
- "viadeo-square": $fa-var-viadeo-square,
- "meetup": $fa-var-meetup,
- "centos": $fa-var-centos,
- "adn": $fa-var-adn,
- "cloudsmith": $fa-var-cloudsmith,
- "pied-piper-alt": $fa-var-pied-piper-alt,
- "square-dribbble": $fa-var-square-dribbble,
- "dribbble-square": $fa-var-dribbble-square,
- "codiepie": $fa-var-codiepie,
- "node": $fa-var-node,
- "mix": $fa-var-mix,
- "steam": $fa-var-steam,
- "cc-apple-pay": $fa-var-cc-apple-pay,
- "scribd": $fa-var-scribd,
- "debian": $fa-var-debian,
- "openid": $fa-var-openid,
- "instalod": $fa-var-instalod,
- "expeditedssl": $fa-var-expeditedssl,
- "sellcast": $fa-var-sellcast,
- "square-twitter": $fa-var-square-twitter,
- "twitter-square": $fa-var-twitter-square,
- "r-project": $fa-var-r-project,
- "delicious": $fa-var-delicious,
- "freebsd": $fa-var-freebsd,
- "vuejs": $fa-var-vuejs,
- "accusoft": $fa-var-accusoft,
- "ioxhost": $fa-var-ioxhost,
- "fonticons-fi": $fa-var-fonticons-fi,
- "app-store": $fa-var-app-store,
- "cc-mastercard": $fa-var-cc-mastercard,
- "itunes-note": $fa-var-itunes-note,
- "golang": $fa-var-golang,
- "kickstarter": $fa-var-kickstarter,
- "grav": $fa-var-grav,
- "weibo": $fa-var-weibo,
- "uncharted": $fa-var-uncharted,
- "firstdraft": $fa-var-firstdraft,
- "square-youtube": $fa-var-square-youtube,
- "youtube-square": $fa-var-youtube-square,
- "wikipedia-w": $fa-var-wikipedia-w,
- "wpressr": $fa-var-wpressr,
- "rendact": $fa-var-rendact,
- "angellist": $fa-var-angellist,
- "galactic-republic": $fa-var-galactic-republic,
- "nfc-directional": $fa-var-nfc-directional,
- "skype": $fa-var-skype,
- "joget": $fa-var-joget,
- "fedora": $fa-var-fedora,
- "stripe-s": $fa-var-stripe-s,
- "meta": $fa-var-meta,
- "laravel": $fa-var-laravel,
- "hotjar": $fa-var-hotjar,
- "bluetooth-b": $fa-var-bluetooth-b,
- "sticker-mule": $fa-var-sticker-mule,
- "creative-commons-zero": $fa-var-creative-commons-zero,
- "hips": $fa-var-hips,
- "behance": $fa-var-behance,
- "reddit": $fa-var-reddit,
- "discord": $fa-var-discord,
- "chrome": $fa-var-chrome,
- "app-store-ios": $fa-var-app-store-ios,
- "cc-discover": $fa-var-cc-discover,
- "wpbeginner": $fa-var-wpbeginner,
- "confluence": $fa-var-confluence,
- "mdb": $fa-var-mdb,
- "dochub": $fa-var-dochub,
- "accessible-icon": $fa-var-accessible-icon,
- "ebay": $fa-var-ebay,
- "amazon": $fa-var-amazon,
- "unsplash": $fa-var-unsplash,
- "yarn": $fa-var-yarn,
- "square-steam": $fa-var-square-steam,
- "steam-square": $fa-var-steam-square,
- "500px": $fa-var-500px,
- "square-vimeo": $fa-var-square-vimeo,
- "vimeo-square": $fa-var-vimeo-square,
- "asymmetrik": $fa-var-asymmetrik,
- "font-awesome": $fa-var-font-awesome,
- "font-awesome-flag": $fa-var-font-awesome-flag,
- "font-awesome-logo-full": $fa-var-font-awesome-logo-full,
- "gratipay": $fa-var-gratipay,
- "apple": $fa-var-apple,
- "hive": $fa-var-hive,
- "gitkraken": $fa-var-gitkraken,
- "keybase": $fa-var-keybase,
- "apple-pay": $fa-var-apple-pay,
- "padlet": $fa-var-padlet,
- "amazon-pay": $fa-var-amazon-pay,
- "square-github": $fa-var-square-github,
- "github-square": $fa-var-github-square,
- "stumbleupon": $fa-var-stumbleupon,
- "fedex": $fa-var-fedex,
- "phoenix-framework": $fa-var-phoenix-framework,
- "shopify": $fa-var-shopify,
- "neos": $fa-var-neos,
- "square-threads": $fa-var-square-threads,
- "hackerrank": $fa-var-hackerrank,
- "researchgate": $fa-var-researchgate,
- "swift": $fa-var-swift,
- "angular": $fa-var-angular,
- "speakap": $fa-var-speakap,
- "angrycreative": $fa-var-angrycreative,
- "y-combinator": $fa-var-y-combinator,
- "empire": $fa-var-empire,
- "envira": $fa-var-envira,
- "square-gitlab": $fa-var-square-gitlab,
- "gitlab-square": $fa-var-gitlab-square,
- "studiovinari": $fa-var-studiovinari,
- "pied-piper": $fa-var-pied-piper,
- "wordpress": $fa-var-wordpress,
- "product-hunt": $fa-var-product-hunt,
- "firefox": $fa-var-firefox,
- "linode": $fa-var-linode,
- "goodreads": $fa-var-goodreads,
- "square-odnoklassniki": $fa-var-square-odnoklassniki,
- "odnoklassniki-square": $fa-var-odnoklassniki-square,
- "jsfiddle": $fa-var-jsfiddle,
- "sith": $fa-var-sith,
- "themeisle": $fa-var-themeisle,
- "page4": $fa-var-page4,
- "hashnode": $fa-var-hashnode,
- "react": $fa-var-react,
- "cc-paypal": $fa-var-cc-paypal,
- "squarespace": $fa-var-squarespace,
- "cc-stripe": $fa-var-cc-stripe,
- "creative-commons-share": $fa-var-creative-commons-share,
- "bitcoin": $fa-var-bitcoin,
- "keycdn": $fa-var-keycdn,
- "opera": $fa-var-opera,
- "itch-io": $fa-var-itch-io,
- "umbraco": $fa-var-umbraco,
- "galactic-senate": $fa-var-galactic-senate,
- "ubuntu": $fa-var-ubuntu,
- "draft2digital": $fa-var-draft2digital,
- "stripe": $fa-var-stripe,
- "houzz": $fa-var-houzz,
- "gg": $fa-var-gg,
- "dhl": $fa-var-dhl,
- "square-pinterest": $fa-var-square-pinterest,
- "pinterest-square": $fa-var-pinterest-square,
- "xing": $fa-var-xing,
- "blackberry": $fa-var-blackberry,
- "creative-commons-pd": $fa-var-creative-commons-pd,
- "playstation": $fa-var-playstation,
- "quinscape": $fa-var-quinscape,
- "less": $fa-var-less,
- "blogger-b": $fa-var-blogger-b,
- "opencart": $fa-var-opencart,
- "vine": $fa-var-vine,
- "paypal": $fa-var-paypal,
- "gitlab": $fa-var-gitlab,
- "typo3": $fa-var-typo3,
- "reddit-alien": $fa-var-reddit-alien,
- "yahoo": $fa-var-yahoo,
- "dailymotion": $fa-var-dailymotion,
- "affiliatetheme": $fa-var-affiliatetheme,
- "pied-piper-pp": $fa-var-pied-piper-pp,
- "bootstrap": $fa-var-bootstrap,
- "odnoklassniki": $fa-var-odnoklassniki,
- "nfc-symbol": $fa-var-nfc-symbol,
- "ethereum": $fa-var-ethereum,
- "speaker-deck": $fa-var-speaker-deck,
- "creative-commons-nc-eu": $fa-var-creative-commons-nc-eu,
- "patreon": $fa-var-patreon,
- "avianex": $fa-var-avianex,
- "ello": $fa-var-ello,
- "gofore": $fa-var-gofore,
- "bimobject": $fa-var-bimobject,
- "facebook-f": $fa-var-facebook-f,
- "square-google-plus": $fa-var-square-google-plus,
- "google-plus-square": $fa-var-google-plus-square,
- "mandalorian": $fa-var-mandalorian,
- "first-order-alt": $fa-var-first-order-alt,
- "osi": $fa-var-osi,
- "google-wallet": $fa-var-google-wallet,
- "d-and-d-beyond": $fa-var-d-and-d-beyond,
- "periscope": $fa-var-periscope,
- "fulcrum": $fa-var-fulcrum,
- "cloudscale": $fa-var-cloudscale,
- "forumbee": $fa-var-forumbee,
- "mizuni": $fa-var-mizuni,
- "schlix": $fa-var-schlix,
- "square-xing": $fa-var-square-xing,
- "xing-square": $fa-var-xing-square,
- "bandcamp": $fa-var-bandcamp,
- "wpforms": $fa-var-wpforms,
- "cloudversify": $fa-var-cloudversify,
- "usps": $fa-var-usps,
- "megaport": $fa-var-megaport,
- "magento": $fa-var-magento,
- "spotify": $fa-var-spotify,
- "optin-monster": $fa-var-optin-monster,
- "fly": $fa-var-fly,
- "aviato": $fa-var-aviato,
- "itunes": $fa-var-itunes,
- "cuttlefish": $fa-var-cuttlefish,
- "blogger": $fa-var-blogger,
- "flickr": $fa-var-flickr,
- "viber": $fa-var-viber,
- "soundcloud": $fa-var-soundcloud,
- "digg": $fa-var-digg,
- "tencent-weibo": $fa-var-tencent-weibo,
- "symfony": $fa-var-symfony,
- "maxcdn": $fa-var-maxcdn,
- "etsy": $fa-var-etsy,
- "facebook-messenger": $fa-var-facebook-messenger,
- "audible": $fa-var-audible,
- "think-peaks": $fa-var-think-peaks,
- "bilibili": $fa-var-bilibili,
- "erlang": $fa-var-erlang,
- "x-twitter": $fa-var-x-twitter,
- "cotton-bureau": $fa-var-cotton-bureau,
- "dashcube": $fa-var-dashcube,
- "42-group": $fa-var-42-group,
- "innosoft": $fa-var-innosoft,
- "stack-exchange": $fa-var-stack-exchange,
- "elementor": $fa-var-elementor,
- "square-pied-piper": $fa-var-square-pied-piper,
- "pied-piper-square": $fa-var-pied-piper-square,
- "creative-commons-nd": $fa-var-creative-commons-nd,
- "palfed": $fa-var-palfed,
- "superpowers": $fa-var-superpowers,
- "resolving": $fa-var-resolving,
- "xbox": $fa-var-xbox,
- "searchengin": $fa-var-searchengin,
- "tiktok": $fa-var-tiktok,
- "square-facebook": $fa-var-square-facebook,
- "facebook-square": $fa-var-facebook-square,
- "renren": $fa-var-renren,
- "linux": $fa-var-linux,
- "glide": $fa-var-glide,
- "linkedin": $fa-var-linkedin,
- "hubspot": $fa-var-hubspot,
- "deploydog": $fa-var-deploydog,
- "twitch": $fa-var-twitch,
- "ravelry": $fa-var-ravelry,
- "mixer": $fa-var-mixer,
- "square-lastfm": $fa-var-square-lastfm,
- "lastfm-square": $fa-var-lastfm-square,
- "vimeo": $fa-var-vimeo,
- "mendeley": $fa-var-mendeley,
- "uniregistry": $fa-var-uniregistry,
- "figma": $fa-var-figma,
- "creative-commons-remix": $fa-var-creative-commons-remix,
- "cc-amazon-pay": $fa-var-cc-amazon-pay,
- "dropbox": $fa-var-dropbox,
- "instagram": $fa-var-instagram,
- "cmplid": $fa-var-cmplid,
- "facebook": $fa-var-facebook,
- "gripfire": $fa-var-gripfire,
- "jedi-order": $fa-var-jedi-order,
- "uikit": $fa-var-uikit,
- "fort-awesome-alt": $fa-var-fort-awesome-alt,
- "phabricator": $fa-var-phabricator,
- "ussunnah": $fa-var-ussunnah,
- "earlybirds": $fa-var-earlybirds,
- "trade-federation": $fa-var-trade-federation,
- "autoprefixer": $fa-var-autoprefixer,
- "whatsapp": $fa-var-whatsapp,
- "slideshare": $fa-var-slideshare,
- "google-play": $fa-var-google-play,
- "viadeo": $fa-var-viadeo,
- "line": $fa-var-line,
- "google-drive": $fa-var-google-drive,
- "servicestack": $fa-var-servicestack,
- "simplybuilt": $fa-var-simplybuilt,
- "bitbucket": $fa-var-bitbucket,
- "imdb": $fa-var-imdb,
- "deezer": $fa-var-deezer,
- "raspberry-pi": $fa-var-raspberry-pi,
- "jira": $fa-var-jira,
- "docker": $fa-var-docker,
- "screenpal": $fa-var-screenpal,
- "bluetooth": $fa-var-bluetooth,
- "gitter": $fa-var-gitter,
- "d-and-d": $fa-var-d-and-d,
- "microblog": $fa-var-microblog,
- "cc-diners-club": $fa-var-cc-diners-club,
- "gg-circle": $fa-var-gg-circle,
- "pied-piper-hat": $fa-var-pied-piper-hat,
- "kickstarter-k": $fa-var-kickstarter-k,
- "yandex": $fa-var-yandex,
- "readme": $fa-var-readme,
- "html5": $fa-var-html5,
- "sellsy": $fa-var-sellsy,
- "sass": $fa-var-sass,
- "wirsindhandwerk": $fa-var-wirsindhandwerk,
- "wsh": $fa-var-wsh,
- "buromobelexperte": $fa-var-buromobelexperte,
- "salesforce": $fa-var-salesforce,
- "octopus-deploy": $fa-var-octopus-deploy,
- "medapps": $fa-var-medapps,
- "ns8": $fa-var-ns8,
- "pinterest-p": $fa-var-pinterest-p,
- "apper": $fa-var-apper,
- "fort-awesome": $fa-var-fort-awesome,
- "waze": $fa-var-waze,
- "cc-jcb": $fa-var-cc-jcb,
- "snapchat": $fa-var-snapchat,
- "snapchat-ghost": $fa-var-snapchat-ghost,
- "fantasy-flight-games": $fa-var-fantasy-flight-games,
- "rust": $fa-var-rust,
- "wix": $fa-var-wix,
- "square-behance": $fa-var-square-behance,
- "behance-square": $fa-var-behance-square,
- "supple": $fa-var-supple,
- "rebel": $fa-var-rebel,
- "css3": $fa-var-css3,
- "staylinked": $fa-var-staylinked,
- "kaggle": $fa-var-kaggle,
- "space-awesome": $fa-var-space-awesome,
- "deviantart": $fa-var-deviantart,
- "cpanel": $fa-var-cpanel,
- "goodreads-g": $fa-var-goodreads-g,
- "square-git": $fa-var-square-git,
- "git-square": $fa-var-git-square,
- "square-tumblr": $fa-var-square-tumblr,
- "tumblr-square": $fa-var-tumblr-square,
- "trello": $fa-var-trello,
- "creative-commons-nc-jp": $fa-var-creative-commons-nc-jp,
- "get-pocket": $fa-var-get-pocket,
- "perbyte": $fa-var-perbyte,
- "grunt": $fa-var-grunt,
- "weebly": $fa-var-weebly,
- "connectdevelop": $fa-var-connectdevelop,
- "leanpub": $fa-var-leanpub,
- "black-tie": $fa-var-black-tie,
- "themeco": $fa-var-themeco,
- "python": $fa-var-python,
- "android": $fa-var-android,
- "bots": $fa-var-bots,
- "free-code-camp": $fa-var-free-code-camp,
- "hornbill": $fa-var-hornbill,
- "js": $fa-var-js,
- "ideal": $fa-var-ideal,
- "git": $fa-var-git,
- "dev": $fa-var-dev,
- "sketch": $fa-var-sketch,
- "yandex-international": $fa-var-yandex-international,
- "cc-amex": $fa-var-cc-amex,
- "uber": $fa-var-uber,
- "github": $fa-var-github,
- "php": $fa-var-php,
- "alipay": $fa-var-alipay,
- "youtube": $fa-var-youtube,
- "skyatlas": $fa-var-skyatlas,
- "firefox-browser": $fa-var-firefox-browser,
- "replyd": $fa-var-replyd,
- "suse": $fa-var-suse,
- "jenkins": $fa-var-jenkins,
- "twitter": $fa-var-twitter,
- "rockrms": $fa-var-rockrms,
- "pinterest": $fa-var-pinterest,
- "buffer": $fa-var-buffer,
- "npm": $fa-var-npm,
- "yammer": $fa-var-yammer,
- "btc": $fa-var-btc,
- "dribbble": $fa-var-dribbble,
- "stumbleupon-circle": $fa-var-stumbleupon-circle,
- "internet-explorer": $fa-var-internet-explorer,
- "stubber": $fa-var-stubber,
- "telegram": $fa-var-telegram,
- "telegram-plane": $fa-var-telegram-plane,
- "old-republic": $fa-var-old-republic,
- "odysee": $fa-var-odysee,
- "square-whatsapp": $fa-var-square-whatsapp,
- "whatsapp-square": $fa-var-whatsapp-square,
- "node-js": $fa-var-node-js,
- "edge-legacy": $fa-var-edge-legacy,
- "slack": $fa-var-slack,
- "slack-hash": $fa-var-slack-hash,
- "medrt": $fa-var-medrt,
- "usb": $fa-var-usb,
- "tumblr": $fa-var-tumblr,
- "vaadin": $fa-var-vaadin,
- "quora": $fa-var-quora,
- "square-x-twitter": $fa-var-square-x-twitter,
- "reacteurope": $fa-var-reacteurope,
- "medium": $fa-var-medium,
- "medium-m": $fa-var-medium-m,
- "amilia": $fa-var-amilia,
- "mixcloud": $fa-var-mixcloud,
- "flipboard": $fa-var-flipboard,
- "viacoin": $fa-var-viacoin,
- "critical-role": $fa-var-critical-role,
- "sitrox": $fa-var-sitrox,
- "discourse": $fa-var-discourse,
- "joomla": $fa-var-joomla,
- "mastodon": $fa-var-mastodon,
- "airbnb": $fa-var-airbnb,
- "wolf-pack-battalion": $fa-var-wolf-pack-battalion,
- "buy-n-large": $fa-var-buy-n-large,
- "gulp": $fa-var-gulp,
- "creative-commons-sampling-plus": $fa-var-creative-commons-sampling-plus,
- "strava": $fa-var-strava,
- "ember": $fa-var-ember,
- "canadian-maple-leaf": $fa-var-canadian-maple-leaf,
- "teamspeak": $fa-var-teamspeak,
- "pushed": $fa-var-pushed,
- "wordpress-simple": $fa-var-wordpress-simple,
- "nutritionix": $fa-var-nutritionix,
- "wodu": $fa-var-wodu,
- "google-pay": $fa-var-google-pay,
- "intercom": $fa-var-intercom,
- "zhihu": $fa-var-zhihu,
- "korvue": $fa-var-korvue,
- "pix": $fa-var-pix,
- "steam-symbol": $fa-var-steam-symbol,
-);
+// variables
+// --------------------------
+
+$fa-css-prefix: fa !default;
+$fa-style: 900 !default;
+$fa-style-family: "Font Awesome 6 Free" !default;
+
+$fa-display: inline-block !default;
+
+$fa-fw-width: fa-divide(20em, 16) !default;
+$fa-inverse: #fff !default;
+
+$fa-border-color: #eee !default;
+$fa-border-padding: 0.2em 0.25em 0.15em !default;
+$fa-border-radius: 0.1em !default;
+$fa-border-style: solid !default;
+$fa-border-width: 0.08em !default;
+
+$fa-size-scale-2xs: 10 !default;
+$fa-size-scale-xs: 12 !default;
+$fa-size-scale-sm: 14 !default;
+$fa-size-scale-base: 16 !default;
+$fa-size-scale-lg: 20 !default;
+$fa-size-scale-xl: 24 !default;
+$fa-size-scale-2xl: 32 !default;
+
+$fa-sizes: (
+ "2xs": $fa-size-scale-2xs,
+ "xs": $fa-size-scale-xs,
+ "sm": $fa-size-scale-sm,
+ "lg": $fa-size-scale-lg,
+ "xl": $fa-size-scale-xl,
+ "2xl": $fa-size-scale-2xl,
+) !default;
+
+$fa-li-width: 2em !default;
+$fa-li-margin: $fa-li-width * fa-divide(5, 4) !default;
+
+$fa-pull-margin: 0.3em !default;
+
+$fa-primary-opacity: 1 !default;
+$fa-secondary-opacity: 0.4 !default;
+
+$fa-stack-vertical-align: middle !default;
+$fa-stack-width: ($fa-fw-width * 2) !default;
+$fa-stack-z-index: auto !default;
+
+$fa-font-display: block !default;
+$fa-font-path: "../webfonts" !default;
+
+$fa-var-0: \30;
+$fa-var-1: \31;
+$fa-var-2: \32;
+$fa-var-3: \33;
+$fa-var-4: \34;
+$fa-var-5: \35;
+$fa-var-6: \36;
+$fa-var-7: \37;
+$fa-var-8: \38;
+$fa-var-9: \39;
+$fa-var-fill-drip: \f576;
+$fa-var-arrows-to-circle: \e4bd;
+$fa-var-circle-chevron-right: \f138;
+$fa-var-chevron-circle-right: \f138;
+$fa-var-at: \40;
+$fa-var-trash-can: \f2ed;
+$fa-var-trash-alt: \f2ed;
+$fa-var-text-height: \f034;
+$fa-var-user-xmark: \f235;
+$fa-var-user-times: \f235;
+$fa-var-stethoscope: \f0f1;
+$fa-var-message: \f27a;
+$fa-var-comment-alt: \f27a;
+$fa-var-info: \f129;
+$fa-var-down-left-and-up-right-to-center: \f422;
+$fa-var-compress-alt: \f422;
+$fa-var-explosion: \e4e9;
+$fa-var-file-lines: \f15c;
+$fa-var-file-alt: \f15c;
+$fa-var-file-text: \f15c;
+$fa-var-wave-square: \f83e;
+$fa-var-ring: \f70b;
+$fa-var-building-un: \e4d9;
+$fa-var-dice-three: \f527;
+$fa-var-calendar-days: \f073;
+$fa-var-calendar-alt: \f073;
+$fa-var-anchor-circle-check: \e4aa;
+$fa-var-building-circle-arrow-right: \e4d1;
+$fa-var-volleyball: \f45f;
+$fa-var-volleyball-ball: \f45f;
+$fa-var-arrows-up-to-line: \e4c2;
+$fa-var-sort-down: \f0dd;
+$fa-var-sort-desc: \f0dd;
+$fa-var-circle-minus: \f056;
+$fa-var-minus-circle: \f056;
+$fa-var-door-open: \f52b;
+$fa-var-right-from-bracket: \f2f5;
+$fa-var-sign-out-alt: \f2f5;
+$fa-var-atom: \f5d2;
+$fa-var-soap: \e06e;
+$fa-var-icons: \f86d;
+$fa-var-heart-music-camera-bolt: \f86d;
+$fa-var-microphone-lines-slash: \f539;
+$fa-var-microphone-alt-slash: \f539;
+$fa-var-bridge-circle-check: \e4c9;
+$fa-var-pump-medical: \e06a;
+$fa-var-fingerprint: \f577;
+$fa-var-hand-point-right: \f0a4;
+$fa-var-magnifying-glass-location: \f689;
+$fa-var-search-location: \f689;
+$fa-var-forward-step: \f051;
+$fa-var-step-forward: \f051;
+$fa-var-face-smile-beam: \f5b8;
+$fa-var-smile-beam: \f5b8;
+$fa-var-flag-checkered: \f11e;
+$fa-var-football: \f44e;
+$fa-var-football-ball: \f44e;
+$fa-var-school-circle-exclamation: \e56c;
+$fa-var-crop: \f125;
+$fa-var-angles-down: \f103;
+$fa-var-angle-double-down: \f103;
+$fa-var-users-rectangle: \e594;
+$fa-var-people-roof: \e537;
+$fa-var-people-line: \e534;
+$fa-var-beer-mug-empty: \f0fc;
+$fa-var-beer: \f0fc;
+$fa-var-diagram-predecessor: \e477;
+$fa-var-arrow-up-long: \f176;
+$fa-var-long-arrow-up: \f176;
+$fa-var-fire-flame-simple: \f46a;
+$fa-var-burn: \f46a;
+$fa-var-person: \f183;
+$fa-var-male: \f183;
+$fa-var-laptop: \f109;
+$fa-var-file-csv: \f6dd;
+$fa-var-menorah: \f676;
+$fa-var-truck-plane: \e58f;
+$fa-var-record-vinyl: \f8d9;
+$fa-var-face-grin-stars: \f587;
+$fa-var-grin-stars: \f587;
+$fa-var-bong: \f55c;
+$fa-var-spaghetti-monster-flying: \f67b;
+$fa-var-pastafarianism: \f67b;
+$fa-var-arrow-down-up-across-line: \e4af;
+$fa-var-spoon: \f2e5;
+$fa-var-utensil-spoon: \f2e5;
+$fa-var-jar-wheat: \e517;
+$fa-var-envelopes-bulk: \f674;
+$fa-var-mail-bulk: \f674;
+$fa-var-file-circle-exclamation: \e4eb;
+$fa-var-circle-h: \f47e;
+$fa-var-hospital-symbol: \f47e;
+$fa-var-pager: \f815;
+$fa-var-address-book: \f2b9;
+$fa-var-contact-book: \f2b9;
+$fa-var-strikethrough: \f0cc;
+$fa-var-k: \4b;
+$fa-var-landmark-flag: \e51c;
+$fa-var-pencil: \f303;
+$fa-var-pencil-alt: \f303;
+$fa-var-backward: \f04a;
+$fa-var-caret-right: \f0da;
+$fa-var-comments: \f086;
+$fa-var-paste: \f0ea;
+$fa-var-file-clipboard: \f0ea;
+$fa-var-code-pull-request: \e13c;
+$fa-var-clipboard-list: \f46d;
+$fa-var-truck-ramp-box: \f4de;
+$fa-var-truck-loading: \f4de;
+$fa-var-user-check: \f4fc;
+$fa-var-vial-virus: \e597;
+$fa-var-sheet-plastic: \e571;
+$fa-var-blog: \f781;
+$fa-var-user-ninja: \f504;
+$fa-var-person-arrow-up-from-line: \e539;
+$fa-var-scroll-torah: \f6a0;
+$fa-var-torah: \f6a0;
+$fa-var-broom-ball: \f458;
+$fa-var-quidditch: \f458;
+$fa-var-quidditch-broom-ball: \f458;
+$fa-var-toggle-off: \f204;
+$fa-var-box-archive: \f187;
+$fa-var-archive: \f187;
+$fa-var-person-drowning: \e545;
+$fa-var-arrow-down-9-1: \f886;
+$fa-var-sort-numeric-desc: \f886;
+$fa-var-sort-numeric-down-alt: \f886;
+$fa-var-face-grin-tongue-squint: \f58a;
+$fa-var-grin-tongue-squint: \f58a;
+$fa-var-spray-can: \f5bd;
+$fa-var-truck-monster: \f63b;
+$fa-var-w: \57;
+$fa-var-earth-africa: \f57c;
+$fa-var-globe-africa: \f57c;
+$fa-var-rainbow: \f75b;
+$fa-var-circle-notch: \f1ce;
+$fa-var-tablet-screen-button: \f3fa;
+$fa-var-tablet-alt: \f3fa;
+$fa-var-paw: \f1b0;
+$fa-var-cloud: \f0c2;
+$fa-var-trowel-bricks: \e58a;
+$fa-var-face-flushed: \f579;
+$fa-var-flushed: \f579;
+$fa-var-hospital-user: \f80d;
+$fa-var-tent-arrow-left-right: \e57f;
+$fa-var-gavel: \f0e3;
+$fa-var-legal: \f0e3;
+$fa-var-binoculars: \f1e5;
+$fa-var-microphone-slash: \f131;
+$fa-var-box-tissue: \e05b;
+$fa-var-motorcycle: \f21c;
+$fa-var-bell-concierge: \f562;
+$fa-var-concierge-bell: \f562;
+$fa-var-pen-ruler: \f5ae;
+$fa-var-pencil-ruler: \f5ae;
+$fa-var-people-arrows: \e068;
+$fa-var-people-arrows-left-right: \e068;
+$fa-var-mars-and-venus-burst: \e523;
+$fa-var-square-caret-right: \f152;
+$fa-var-caret-square-right: \f152;
+$fa-var-scissors: \f0c4;
+$fa-var-cut: \f0c4;
+$fa-var-sun-plant-wilt: \e57a;
+$fa-var-toilets-portable: \e584;
+$fa-var-hockey-puck: \f453;
+$fa-var-table: \f0ce;
+$fa-var-magnifying-glass-arrow-right: \e521;
+$fa-var-tachograph-digital: \f566;
+$fa-var-digital-tachograph: \f566;
+$fa-var-users-slash: \e073;
+$fa-var-clover: \e139;
+$fa-var-reply: \f3e5;
+$fa-var-mail-reply: \f3e5;
+$fa-var-star-and-crescent: \f699;
+$fa-var-house-fire: \e50c;
+$fa-var-square-minus: \f146;
+$fa-var-minus-square: \f146;
+$fa-var-helicopter: \f533;
+$fa-var-compass: \f14e;
+$fa-var-square-caret-down: \f150;
+$fa-var-caret-square-down: \f150;
+$fa-var-file-circle-question: \e4ef;
+$fa-var-laptop-code: \f5fc;
+$fa-var-swatchbook: \f5c3;
+$fa-var-prescription-bottle: \f485;
+$fa-var-bars: \f0c9;
+$fa-var-navicon: \f0c9;
+$fa-var-people-group: \e533;
+$fa-var-hourglass-end: \f253;
+$fa-var-hourglass-3: \f253;
+$fa-var-heart-crack: \f7a9;
+$fa-var-heart-broken: \f7a9;
+$fa-var-square-up-right: \f360;
+$fa-var-external-link-square-alt: \f360;
+$fa-var-face-kiss-beam: \f597;
+$fa-var-kiss-beam: \f597;
+$fa-var-film: \f008;
+$fa-var-ruler-horizontal: \f547;
+$fa-var-people-robbery: \e536;
+$fa-var-lightbulb: \f0eb;
+$fa-var-caret-left: \f0d9;
+$fa-var-circle-exclamation: \f06a;
+$fa-var-exclamation-circle: \f06a;
+$fa-var-school-circle-xmark: \e56d;
+$fa-var-arrow-right-from-bracket: \f08b;
+$fa-var-sign-out: \f08b;
+$fa-var-circle-chevron-down: \f13a;
+$fa-var-chevron-circle-down: \f13a;
+$fa-var-unlock-keyhole: \f13e;
+$fa-var-unlock-alt: \f13e;
+$fa-var-cloud-showers-heavy: \f740;
+$fa-var-headphones-simple: \f58f;
+$fa-var-headphones-alt: \f58f;
+$fa-var-sitemap: \f0e8;
+$fa-var-circle-dollar-to-slot: \f4b9;
+$fa-var-donate: \f4b9;
+$fa-var-memory: \f538;
+$fa-var-road-spikes: \e568;
+$fa-var-fire-burner: \e4f1;
+$fa-var-flag: \f024;
+$fa-var-hanukiah: \f6e6;
+$fa-var-feather: \f52d;
+$fa-var-volume-low: \f027;
+$fa-var-volume-down: \f027;
+$fa-var-comment-slash: \f4b3;
+$fa-var-cloud-sun-rain: \f743;
+$fa-var-compress: \f066;
+$fa-var-wheat-awn: \e2cd;
+$fa-var-wheat-alt: \e2cd;
+$fa-var-ankh: \f644;
+$fa-var-hands-holding-child: \e4fa;
+$fa-var-asterisk: \2a;
+$fa-var-square-check: \f14a;
+$fa-var-check-square: \f14a;
+$fa-var-peseta-sign: \e221;
+$fa-var-heading: \f1dc;
+$fa-var-header: \f1dc;
+$fa-var-ghost: \f6e2;
+$fa-var-list: \f03a;
+$fa-var-list-squares: \f03a;
+$fa-var-square-phone-flip: \f87b;
+$fa-var-phone-square-alt: \f87b;
+$fa-var-cart-plus: \f217;
+$fa-var-gamepad: \f11b;
+$fa-var-circle-dot: \f192;
+$fa-var-dot-circle: \f192;
+$fa-var-face-dizzy: \f567;
+$fa-var-dizzy: \f567;
+$fa-var-egg: \f7fb;
+$fa-var-house-medical-circle-xmark: \e513;
+$fa-var-campground: \f6bb;
+$fa-var-folder-plus: \f65e;
+$fa-var-futbol: \f1e3;
+$fa-var-futbol-ball: \f1e3;
+$fa-var-soccer-ball: \f1e3;
+$fa-var-paintbrush: \f1fc;
+$fa-var-paint-brush: \f1fc;
+$fa-var-lock: \f023;
+$fa-var-gas-pump: \f52f;
+$fa-var-hot-tub-person: \f593;
+$fa-var-hot-tub: \f593;
+$fa-var-map-location: \f59f;
+$fa-var-map-marked: \f59f;
+$fa-var-house-flood-water: \e50e;
+$fa-var-tree: \f1bb;
+$fa-var-bridge-lock: \e4cc;
+$fa-var-sack-dollar: \f81d;
+$fa-var-pen-to-square: \f044;
+$fa-var-edit: \f044;
+$fa-var-car-side: \f5e4;
+$fa-var-share-nodes: \f1e0;
+$fa-var-share-alt: \f1e0;
+$fa-var-heart-circle-minus: \e4ff;
+$fa-var-hourglass-half: \f252;
+$fa-var-hourglass-2: \f252;
+$fa-var-microscope: \f610;
+$fa-var-sink: \e06d;
+$fa-var-bag-shopping: \f290;
+$fa-var-shopping-bag: \f290;
+$fa-var-arrow-down-z-a: \f881;
+$fa-var-sort-alpha-desc: \f881;
+$fa-var-sort-alpha-down-alt: \f881;
+$fa-var-mitten: \f7b5;
+$fa-var-person-rays: \e54d;
+$fa-var-users: \f0c0;
+$fa-var-eye-slash: \f070;
+$fa-var-flask-vial: \e4f3;
+$fa-var-hand: \f256;
+$fa-var-hand-paper: \f256;
+$fa-var-om: \f679;
+$fa-var-worm: \e599;
+$fa-var-house-circle-xmark: \e50b;
+$fa-var-plug: \f1e6;
+$fa-var-chevron-up: \f077;
+$fa-var-hand-spock: \f259;
+$fa-var-stopwatch: \f2f2;
+$fa-var-face-kiss: \f596;
+$fa-var-kiss: \f596;
+$fa-var-bridge-circle-xmark: \e4cb;
+$fa-var-face-grin-tongue: \f589;
+$fa-var-grin-tongue: \f589;
+$fa-var-chess-bishop: \f43a;
+$fa-var-face-grin-wink: \f58c;
+$fa-var-grin-wink: \f58c;
+$fa-var-ear-deaf: \f2a4;
+$fa-var-deaf: \f2a4;
+$fa-var-deafness: \f2a4;
+$fa-var-hard-of-hearing: \f2a4;
+$fa-var-road-circle-check: \e564;
+$fa-var-dice-five: \f523;
+$fa-var-square-rss: \f143;
+$fa-var-rss-square: \f143;
+$fa-var-land-mine-on: \e51b;
+$fa-var-i-cursor: \f246;
+$fa-var-stamp: \f5bf;
+$fa-var-stairs: \e289;
+$fa-var-i: \49;
+$fa-var-hryvnia-sign: \f6f2;
+$fa-var-hryvnia: \f6f2;
+$fa-var-pills: \f484;
+$fa-var-face-grin-wide: \f581;
+$fa-var-grin-alt: \f581;
+$fa-var-tooth: \f5c9;
+$fa-var-v: \56;
+$fa-var-bangladeshi-taka-sign: \e2e6;
+$fa-var-bicycle: \f206;
+$fa-var-staff-snake: \e579;
+$fa-var-rod-asclepius: \e579;
+$fa-var-rod-snake: \e579;
+$fa-var-staff-aesculapius: \e579;
+$fa-var-head-side-cough-slash: \e062;
+$fa-var-truck-medical: \f0f9;
+$fa-var-ambulance: \f0f9;
+$fa-var-wheat-awn-circle-exclamation: \e598;
+$fa-var-snowman: \f7d0;
+$fa-var-mortar-pestle: \f5a7;
+$fa-var-road-barrier: \e562;
+$fa-var-school: \f549;
+$fa-var-igloo: \f7ae;
+$fa-var-joint: \f595;
+$fa-var-angle-right: \f105;
+$fa-var-horse: \f6f0;
+$fa-var-q: \51;
+$fa-var-g: \47;
+$fa-var-notes-medical: \f481;
+$fa-var-temperature-half: \f2c9;
+$fa-var-temperature-2: \f2c9;
+$fa-var-thermometer-2: \f2c9;
+$fa-var-thermometer-half: \f2c9;
+$fa-var-dong-sign: \e169;
+$fa-var-capsules: \f46b;
+$fa-var-poo-storm: \f75a;
+$fa-var-poo-bolt: \f75a;
+$fa-var-face-frown-open: \f57a;
+$fa-var-frown-open: \f57a;
+$fa-var-hand-point-up: \f0a6;
+$fa-var-money-bill: \f0d6;
+$fa-var-bookmark: \f02e;
+$fa-var-align-justify: \f039;
+$fa-var-umbrella-beach: \f5ca;
+$fa-var-helmet-un: \e503;
+$fa-var-bullseye: \f140;
+$fa-var-bacon: \f7e5;
+$fa-var-hand-point-down: \f0a7;
+$fa-var-arrow-up-from-bracket: \e09a;
+$fa-var-folder: \f07b;
+$fa-var-folder-blank: \f07b;
+$fa-var-file-waveform: \f478;
+$fa-var-file-medical-alt: \f478;
+$fa-var-radiation: \f7b9;
+$fa-var-chart-simple: \e473;
+$fa-var-mars-stroke: \f229;
+$fa-var-vial: \f492;
+$fa-var-gauge: \f624;
+$fa-var-dashboard: \f624;
+$fa-var-gauge-med: \f624;
+$fa-var-tachometer-alt-average: \f624;
+$fa-var-wand-magic-sparkles: \e2ca;
+$fa-var-magic-wand-sparkles: \e2ca;
+$fa-var-e: \45;
+$fa-var-pen-clip: \f305;
+$fa-var-pen-alt: \f305;
+$fa-var-bridge-circle-exclamation: \e4ca;
+$fa-var-user: \f007;
+$fa-var-school-circle-check: \e56b;
+$fa-var-dumpster: \f793;
+$fa-var-van-shuttle: \f5b6;
+$fa-var-shuttle-van: \f5b6;
+$fa-var-building-user: \e4da;
+$fa-var-square-caret-left: \f191;
+$fa-var-caret-square-left: \f191;
+$fa-var-highlighter: \f591;
+$fa-var-key: \f084;
+$fa-var-bullhorn: \f0a1;
+$fa-var-globe: \f0ac;
+$fa-var-synagogue: \f69b;
+$fa-var-person-half-dress: \e548;
+$fa-var-road-bridge: \e563;
+$fa-var-location-arrow: \f124;
+$fa-var-c: \43;
+$fa-var-tablet-button: \f10a;
+$fa-var-building-lock: \e4d6;
+$fa-var-pizza-slice: \f818;
+$fa-var-money-bill-wave: \f53a;
+$fa-var-chart-area: \f1fe;
+$fa-var-area-chart: \f1fe;
+$fa-var-house-flag: \e50d;
+$fa-var-person-circle-minus: \e540;
+$fa-var-ban: \f05e;
+$fa-var-cancel: \f05e;
+$fa-var-camera-rotate: \e0d8;
+$fa-var-spray-can-sparkles: \f5d0;
+$fa-var-air-freshener: \f5d0;
+$fa-var-star: \f005;
+$fa-var-repeat: \f363;
+$fa-var-cross: \f654;
+$fa-var-box: \f466;
+$fa-var-venus-mars: \f228;
+$fa-var-arrow-pointer: \f245;
+$fa-var-mouse-pointer: \f245;
+$fa-var-maximize: \f31e;
+$fa-var-expand-arrows-alt: \f31e;
+$fa-var-charging-station: \f5e7;
+$fa-var-shapes: \f61f;
+$fa-var-triangle-circle-square: \f61f;
+$fa-var-shuffle: \f074;
+$fa-var-random: \f074;
+$fa-var-person-running: \f70c;
+$fa-var-running: \f70c;
+$fa-var-mobile-retro: \e527;
+$fa-var-grip-lines-vertical: \f7a5;
+$fa-var-spider: \f717;
+$fa-var-hands-bound: \e4f9;
+$fa-var-file-invoice-dollar: \f571;
+$fa-var-plane-circle-exclamation: \e556;
+$fa-var-x-ray: \f497;
+$fa-var-spell-check: \f891;
+$fa-var-slash: \f715;
+$fa-var-computer-mouse: \f8cc;
+$fa-var-mouse: \f8cc;
+$fa-var-arrow-right-to-bracket: \f090;
+$fa-var-sign-in: \f090;
+$fa-var-shop-slash: \e070;
+$fa-var-store-alt-slash: \e070;
+$fa-var-server: \f233;
+$fa-var-virus-covid-slash: \e4a9;
+$fa-var-shop-lock: \e4a5;
+$fa-var-hourglass-start: \f251;
+$fa-var-hourglass-1: \f251;
+$fa-var-blender-phone: \f6b6;
+$fa-var-building-wheat: \e4db;
+$fa-var-person-breastfeeding: \e53a;
+$fa-var-right-to-bracket: \f2f6;
+$fa-var-sign-in-alt: \f2f6;
+$fa-var-venus: \f221;
+$fa-var-passport: \f5ab;
+$fa-var-heart-pulse: \f21e;
+$fa-var-heartbeat: \f21e;
+$fa-var-people-carry-box: \f4ce;
+$fa-var-people-carry: \f4ce;
+$fa-var-temperature-high: \f769;
+$fa-var-microchip: \f2db;
+$fa-var-crown: \f521;
+$fa-var-weight-hanging: \f5cd;
+$fa-var-xmarks-lines: \e59a;
+$fa-var-file-prescription: \f572;
+$fa-var-weight-scale: \f496;
+$fa-var-weight: \f496;
+$fa-var-user-group: \f500;
+$fa-var-user-friends: \f500;
+$fa-var-arrow-up-a-z: \f15e;
+$fa-var-sort-alpha-up: \f15e;
+$fa-var-chess-knight: \f441;
+$fa-var-face-laugh-squint: \f59b;
+$fa-var-laugh-squint: \f59b;
+$fa-var-wheelchair: \f193;
+$fa-var-circle-arrow-up: \f0aa;
+$fa-var-arrow-circle-up: \f0aa;
+$fa-var-toggle-on: \f205;
+$fa-var-person-walking: \f554;
+$fa-var-walking: \f554;
+$fa-var-l: \4c;
+$fa-var-fire: \f06d;
+$fa-var-bed-pulse: \f487;
+$fa-var-procedures: \f487;
+$fa-var-shuttle-space: \f197;
+$fa-var-space-shuttle: \f197;
+$fa-var-face-laugh: \f599;
+$fa-var-laugh: \f599;
+$fa-var-folder-open: \f07c;
+$fa-var-heart-circle-plus: \e500;
+$fa-var-code-fork: \e13b;
+$fa-var-city: \f64f;
+$fa-var-microphone-lines: \f3c9;
+$fa-var-microphone-alt: \f3c9;
+$fa-var-pepper-hot: \f816;
+$fa-var-unlock: \f09c;
+$fa-var-colon-sign: \e140;
+$fa-var-headset: \f590;
+$fa-var-store-slash: \e071;
+$fa-var-road-circle-xmark: \e566;
+$fa-var-user-minus: \f503;
+$fa-var-mars-stroke-up: \f22a;
+$fa-var-mars-stroke-v: \f22a;
+$fa-var-champagne-glasses: \f79f;
+$fa-var-glass-cheers: \f79f;
+$fa-var-clipboard: \f328;
+$fa-var-house-circle-exclamation: \e50a;
+$fa-var-file-arrow-up: \f574;
+$fa-var-file-upload: \f574;
+$fa-var-wifi: \f1eb;
+$fa-var-wifi-3: \f1eb;
+$fa-var-wifi-strong: \f1eb;
+$fa-var-bath: \f2cd;
+$fa-var-bathtub: \f2cd;
+$fa-var-underline: \f0cd;
+$fa-var-user-pen: \f4ff;
+$fa-var-user-edit: \f4ff;
+$fa-var-signature: \f5b7;
+$fa-var-stroopwafel: \f551;
+$fa-var-bold: \f032;
+$fa-var-anchor-lock: \e4ad;
+$fa-var-building-ngo: \e4d7;
+$fa-var-manat-sign: \e1d5;
+$fa-var-not-equal: \f53e;
+$fa-var-border-top-left: \f853;
+$fa-var-border-style: \f853;
+$fa-var-map-location-dot: \f5a0;
+$fa-var-map-marked-alt: \f5a0;
+$fa-var-jedi: \f669;
+$fa-var-square-poll-vertical: \f681;
+$fa-var-poll: \f681;
+$fa-var-mug-hot: \f7b6;
+$fa-var-car-battery: \f5df;
+$fa-var-battery-car: \f5df;
+$fa-var-gift: \f06b;
+$fa-var-dice-two: \f528;
+$fa-var-chess-queen: \f445;
+$fa-var-glasses: \f530;
+$fa-var-chess-board: \f43c;
+$fa-var-building-circle-check: \e4d2;
+$fa-var-person-chalkboard: \e53d;
+$fa-var-mars-stroke-right: \f22b;
+$fa-var-mars-stroke-h: \f22b;
+$fa-var-hand-back-fist: \f255;
+$fa-var-hand-rock: \f255;
+$fa-var-square-caret-up: \f151;
+$fa-var-caret-square-up: \f151;
+$fa-var-cloud-showers-water: \e4e4;
+$fa-var-chart-bar: \f080;
+$fa-var-bar-chart: \f080;
+$fa-var-hands-bubbles: \e05e;
+$fa-var-hands-wash: \e05e;
+$fa-var-less-than-equal: \f537;
+$fa-var-train: \f238;
+$fa-var-eye-low-vision: \f2a8;
+$fa-var-low-vision: \f2a8;
+$fa-var-crow: \f520;
+$fa-var-sailboat: \e445;
+$fa-var-window-restore: \f2d2;
+$fa-var-square-plus: \f0fe;
+$fa-var-plus-square: \f0fe;
+$fa-var-torii-gate: \f6a1;
+$fa-var-frog: \f52e;
+$fa-var-bucket: \e4cf;
+$fa-var-image: \f03e;
+$fa-var-microphone: \f130;
+$fa-var-cow: \f6c8;
+$fa-var-caret-up: \f0d8;
+$fa-var-screwdriver: \f54a;
+$fa-var-folder-closed: \e185;
+$fa-var-house-tsunami: \e515;
+$fa-var-square-nfi: \e576;
+$fa-var-arrow-up-from-ground-water: \e4b5;
+$fa-var-martini-glass: \f57b;
+$fa-var-glass-martini-alt: \f57b;
+$fa-var-rotate-left: \f2ea;
+$fa-var-rotate-back: \f2ea;
+$fa-var-rotate-backward: \f2ea;
+$fa-var-undo-alt: \f2ea;
+$fa-var-table-columns: \f0db;
+$fa-var-columns: \f0db;
+$fa-var-lemon: \f094;
+$fa-var-head-side-mask: \e063;
+$fa-var-handshake: \f2b5;
+$fa-var-gem: \f3a5;
+$fa-var-dolly: \f472;
+$fa-var-dolly-box: \f472;
+$fa-var-smoking: \f48d;
+$fa-var-minimize: \f78c;
+$fa-var-compress-arrows-alt: \f78c;
+$fa-var-monument: \f5a6;
+$fa-var-snowplow: \f7d2;
+$fa-var-angles-right: \f101;
+$fa-var-angle-double-right: \f101;
+$fa-var-cannabis: \f55f;
+$fa-var-circle-play: \f144;
+$fa-var-play-circle: \f144;
+$fa-var-tablets: \f490;
+$fa-var-ethernet: \f796;
+$fa-var-euro-sign: \f153;
+$fa-var-eur: \f153;
+$fa-var-euro: \f153;
+$fa-var-chair: \f6c0;
+$fa-var-circle-check: \f058;
+$fa-var-check-circle: \f058;
+$fa-var-circle-stop: \f28d;
+$fa-var-stop-circle: \f28d;
+$fa-var-compass-drafting: \f568;
+$fa-var-drafting-compass: \f568;
+$fa-var-plate-wheat: \e55a;
+$fa-var-icicles: \f7ad;
+$fa-var-person-shelter: \e54f;
+$fa-var-neuter: \f22c;
+$fa-var-id-badge: \f2c1;
+$fa-var-marker: \f5a1;
+$fa-var-face-laugh-beam: \f59a;
+$fa-var-laugh-beam: \f59a;
+$fa-var-helicopter-symbol: \e502;
+$fa-var-universal-access: \f29a;
+$fa-var-circle-chevron-up: \f139;
+$fa-var-chevron-circle-up: \f139;
+$fa-var-lari-sign: \e1c8;
+$fa-var-volcano: \f770;
+$fa-var-person-walking-dashed-line-arrow-right: \e553;
+$fa-var-sterling-sign: \f154;
+$fa-var-gbp: \f154;
+$fa-var-pound-sign: \f154;
+$fa-var-viruses: \e076;
+$fa-var-square-person-confined: \e577;
+$fa-var-user-tie: \f508;
+$fa-var-arrow-down-long: \f175;
+$fa-var-long-arrow-down: \f175;
+$fa-var-tent-arrow-down-to-line: \e57e;
+$fa-var-certificate: \f0a3;
+$fa-var-reply-all: \f122;
+$fa-var-mail-reply-all: \f122;
+$fa-var-suitcase: \f0f2;
+$fa-var-person-skating: \f7c5;
+$fa-var-skating: \f7c5;
+$fa-var-filter-circle-dollar: \f662;
+$fa-var-funnel-dollar: \f662;
+$fa-var-camera-retro: \f083;
+$fa-var-circle-arrow-down: \f0ab;
+$fa-var-arrow-circle-down: \f0ab;
+$fa-var-file-import: \f56f;
+$fa-var-arrow-right-to-file: \f56f;
+$fa-var-square-arrow-up-right: \f14c;
+$fa-var-external-link-square: \f14c;
+$fa-var-box-open: \f49e;
+$fa-var-scroll: \f70e;
+$fa-var-spa: \f5bb;
+$fa-var-location-pin-lock: \e51f;
+$fa-var-pause: \f04c;
+$fa-var-hill-avalanche: \e507;
+$fa-var-temperature-empty: \f2cb;
+$fa-var-temperature-0: \f2cb;
+$fa-var-thermometer-0: \f2cb;
+$fa-var-thermometer-empty: \f2cb;
+$fa-var-bomb: \f1e2;
+$fa-var-registered: \f25d;
+$fa-var-address-card: \f2bb;
+$fa-var-contact-card: \f2bb;
+$fa-var-vcard: \f2bb;
+$fa-var-scale-unbalanced-flip: \f516;
+$fa-var-balance-scale-right: \f516;
+$fa-var-subscript: \f12c;
+$fa-var-diamond-turn-right: \f5eb;
+$fa-var-directions: \f5eb;
+$fa-var-burst: \e4dc;
+$fa-var-house-laptop: \e066;
+$fa-var-laptop-house: \e066;
+$fa-var-face-tired: \f5c8;
+$fa-var-tired: \f5c8;
+$fa-var-money-bills: \e1f3;
+$fa-var-smog: \f75f;
+$fa-var-crutch: \f7f7;
+$fa-var-cloud-arrow-up: \f0ee;
+$fa-var-cloud-upload: \f0ee;
+$fa-var-cloud-upload-alt: \f0ee;
+$fa-var-palette: \f53f;
+$fa-var-arrows-turn-right: \e4c0;
+$fa-var-vest: \e085;
+$fa-var-ferry: \e4ea;
+$fa-var-arrows-down-to-people: \e4b9;
+$fa-var-seedling: \f4d8;
+$fa-var-sprout: \f4d8;
+$fa-var-left-right: \f337;
+$fa-var-arrows-alt-h: \f337;
+$fa-var-boxes-packing: \e4c7;
+$fa-var-circle-arrow-left: \f0a8;
+$fa-var-arrow-circle-left: \f0a8;
+$fa-var-group-arrows-rotate: \e4f6;
+$fa-var-bowl-food: \e4c6;
+$fa-var-candy-cane: \f786;
+$fa-var-arrow-down-wide-short: \f160;
+$fa-var-sort-amount-asc: \f160;
+$fa-var-sort-amount-down: \f160;
+$fa-var-cloud-bolt: \f76c;
+$fa-var-thunderstorm: \f76c;
+$fa-var-text-slash: \f87d;
+$fa-var-remove-format: \f87d;
+$fa-var-face-smile-wink: \f4da;
+$fa-var-smile-wink: \f4da;
+$fa-var-file-word: \f1c2;
+$fa-var-file-powerpoint: \f1c4;
+$fa-var-arrows-left-right: \f07e;
+$fa-var-arrows-h: \f07e;
+$fa-var-house-lock: \e510;
+$fa-var-cloud-arrow-down: \f0ed;
+$fa-var-cloud-download: \f0ed;
+$fa-var-cloud-download-alt: \f0ed;
+$fa-var-children: \e4e1;
+$fa-var-chalkboard: \f51b;
+$fa-var-blackboard: \f51b;
+$fa-var-user-large-slash: \f4fa;
+$fa-var-user-alt-slash: \f4fa;
+$fa-var-envelope-open: \f2b6;
+$fa-var-handshake-simple-slash: \e05f;
+$fa-var-handshake-alt-slash: \e05f;
+$fa-var-mattress-pillow: \e525;
+$fa-var-guarani-sign: \e19a;
+$fa-var-arrows-rotate: \f021;
+$fa-var-refresh: \f021;
+$fa-var-sync: \f021;
+$fa-var-fire-extinguisher: \f134;
+$fa-var-cruzeiro-sign: \e152;
+$fa-var-greater-than-equal: \f532;
+$fa-var-shield-halved: \f3ed;
+$fa-var-shield-alt: \f3ed;
+$fa-var-book-atlas: \f558;
+$fa-var-atlas: \f558;
+$fa-var-virus: \e074;
+$fa-var-envelope-circle-check: \e4e8;
+$fa-var-layer-group: \f5fd;
+$fa-var-arrows-to-dot: \e4be;
+$fa-var-archway: \f557;
+$fa-var-heart-circle-check: \e4fd;
+$fa-var-house-chimney-crack: \f6f1;
+$fa-var-house-damage: \f6f1;
+$fa-var-file-zipper: \f1c6;
+$fa-var-file-archive: \f1c6;
+$fa-var-square: \f0c8;
+$fa-var-martini-glass-empty: \f000;
+$fa-var-glass-martini: \f000;
+$fa-var-couch: \f4b8;
+$fa-var-cedi-sign: \e0df;
+$fa-var-italic: \f033;
+$fa-var-church: \f51d;
+$fa-var-comments-dollar: \f653;
+$fa-var-democrat: \f747;
+$fa-var-z: \5a;
+$fa-var-person-skiing: \f7c9;
+$fa-var-skiing: \f7c9;
+$fa-var-road-lock: \e567;
+$fa-var-a: \41;
+$fa-var-temperature-arrow-down: \e03f;
+$fa-var-temperature-down: \e03f;
+$fa-var-feather-pointed: \f56b;
+$fa-var-feather-alt: \f56b;
+$fa-var-p: \50;
+$fa-var-snowflake: \f2dc;
+$fa-var-newspaper: \f1ea;
+$fa-var-rectangle-ad: \f641;
+$fa-var-ad: \f641;
+$fa-var-circle-arrow-right: \f0a9;
+$fa-var-arrow-circle-right: \f0a9;
+$fa-var-filter-circle-xmark: \e17b;
+$fa-var-locust: \e520;
+$fa-var-sort: \f0dc;
+$fa-var-unsorted: \f0dc;
+$fa-var-list-ol: \f0cb;
+$fa-var-list-1-2: \f0cb;
+$fa-var-list-numeric: \f0cb;
+$fa-var-person-dress-burst: \e544;
+$fa-var-money-check-dollar: \f53d;
+$fa-var-money-check-alt: \f53d;
+$fa-var-vector-square: \f5cb;
+$fa-var-bread-slice: \f7ec;
+$fa-var-language: \f1ab;
+$fa-var-face-kiss-wink-heart: \f598;
+$fa-var-kiss-wink-heart: \f598;
+$fa-var-filter: \f0b0;
+$fa-var-question: \3f;
+$fa-var-file-signature: \f573;
+$fa-var-up-down-left-right: \f0b2;
+$fa-var-arrows-alt: \f0b2;
+$fa-var-house-chimney-user: \e065;
+$fa-var-hand-holding-heart: \f4be;
+$fa-var-puzzle-piece: \f12e;
+$fa-var-money-check: \f53c;
+$fa-var-star-half-stroke: \f5c0;
+$fa-var-star-half-alt: \f5c0;
+$fa-var-code: \f121;
+$fa-var-whiskey-glass: \f7a0;
+$fa-var-glass-whiskey: \f7a0;
+$fa-var-building-circle-exclamation: \e4d3;
+$fa-var-magnifying-glass-chart: \e522;
+$fa-var-arrow-up-right-from-square: \f08e;
+$fa-var-external-link: \f08e;
+$fa-var-cubes-stacked: \e4e6;
+$fa-var-won-sign: \f159;
+$fa-var-krw: \f159;
+$fa-var-won: \f159;
+$fa-var-virus-covid: \e4a8;
+$fa-var-austral-sign: \e0a9;
+$fa-var-f: \46;
+$fa-var-leaf: \f06c;
+$fa-var-road: \f018;
+$fa-var-taxi: \f1ba;
+$fa-var-cab: \f1ba;
+$fa-var-person-circle-plus: \e541;
+$fa-var-chart-pie: \f200;
+$fa-var-pie-chart: \f200;
+$fa-var-bolt-lightning: \e0b7;
+$fa-var-sack-xmark: \e56a;
+$fa-var-file-excel: \f1c3;
+$fa-var-file-contract: \f56c;
+$fa-var-fish-fins: \e4f2;
+$fa-var-building-flag: \e4d5;
+$fa-var-face-grin-beam: \f582;
+$fa-var-grin-beam: \f582;
+$fa-var-object-ungroup: \f248;
+$fa-var-poop: \f619;
+$fa-var-location-pin: \f041;
+$fa-var-map-marker: \f041;
+$fa-var-kaaba: \f66b;
+$fa-var-toilet-paper: \f71e;
+$fa-var-helmet-safety: \f807;
+$fa-var-hard-hat: \f807;
+$fa-var-hat-hard: \f807;
+$fa-var-eject: \f052;
+$fa-var-circle-right: \f35a;
+$fa-var-arrow-alt-circle-right: \f35a;
+$fa-var-plane-circle-check: \e555;
+$fa-var-face-rolling-eyes: \f5a5;
+$fa-var-meh-rolling-eyes: \f5a5;
+$fa-var-object-group: \f247;
+$fa-var-chart-line: \f201;
+$fa-var-line-chart: \f201;
+$fa-var-mask-ventilator: \e524;
+$fa-var-arrow-right: \f061;
+$fa-var-signs-post: \f277;
+$fa-var-map-signs: \f277;
+$fa-var-cash-register: \f788;
+$fa-var-person-circle-question: \e542;
+$fa-var-h: \48;
+$fa-var-tarp: \e57b;
+$fa-var-screwdriver-wrench: \f7d9;
+$fa-var-tools: \f7d9;
+$fa-var-arrows-to-eye: \e4bf;
+$fa-var-plug-circle-bolt: \e55b;
+$fa-var-heart: \f004;
+$fa-var-mars-and-venus: \f224;
+$fa-var-house-user: \e1b0;
+$fa-var-home-user: \e1b0;
+$fa-var-dumpster-fire: \f794;
+$fa-var-house-crack: \e3b1;
+$fa-var-martini-glass-citrus: \f561;
+$fa-var-cocktail: \f561;
+$fa-var-face-surprise: \f5c2;
+$fa-var-surprise: \f5c2;
+$fa-var-bottle-water: \e4c5;
+$fa-var-circle-pause: \f28b;
+$fa-var-pause-circle: \f28b;
+$fa-var-toilet-paper-slash: \e072;
+$fa-var-apple-whole: \f5d1;
+$fa-var-apple-alt: \f5d1;
+$fa-var-kitchen-set: \e51a;
+$fa-var-r: \52;
+$fa-var-temperature-quarter: \f2ca;
+$fa-var-temperature-1: \f2ca;
+$fa-var-thermometer-1: \f2ca;
+$fa-var-thermometer-quarter: \f2ca;
+$fa-var-cube: \f1b2;
+$fa-var-bitcoin-sign: \e0b4;
+$fa-var-shield-dog: \e573;
+$fa-var-solar-panel: \f5ba;
+$fa-var-lock-open: \f3c1;
+$fa-var-elevator: \e16d;
+$fa-var-money-bill-transfer: \e528;
+$fa-var-money-bill-trend-up: \e529;
+$fa-var-house-flood-water-circle-arrow-right: \e50f;
+$fa-var-square-poll-horizontal: \f682;
+$fa-var-poll-h: \f682;
+$fa-var-circle: \f111;
+$fa-var-backward-fast: \f049;
+$fa-var-fast-backward: \f049;
+$fa-var-recycle: \f1b8;
+$fa-var-user-astronaut: \f4fb;
+$fa-var-plane-slash: \e069;
+$fa-var-trademark: \f25c;
+$fa-var-basketball: \f434;
+$fa-var-basketball-ball: \f434;
+$fa-var-satellite-dish: \f7c0;
+$fa-var-circle-up: \f35b;
+$fa-var-arrow-alt-circle-up: \f35b;
+$fa-var-mobile-screen-button: \f3cd;
+$fa-var-mobile-alt: \f3cd;
+$fa-var-volume-high: \f028;
+$fa-var-volume-up: \f028;
+$fa-var-users-rays: \e593;
+$fa-var-wallet: \f555;
+$fa-var-clipboard-check: \f46c;
+$fa-var-file-audio: \f1c7;
+$fa-var-burger: \f805;
+$fa-var-hamburger: \f805;
+$fa-var-wrench: \f0ad;
+$fa-var-bugs: \e4d0;
+$fa-var-rupee-sign: \f156;
+$fa-var-rupee: \f156;
+$fa-var-file-image: \f1c5;
+$fa-var-circle-question: \f059;
+$fa-var-question-circle: \f059;
+$fa-var-plane-departure: \f5b0;
+$fa-var-handshake-slash: \e060;
+$fa-var-book-bookmark: \e0bb;
+$fa-var-code-branch: \f126;
+$fa-var-hat-cowboy: \f8c0;
+$fa-var-bridge: \e4c8;
+$fa-var-phone-flip: \f879;
+$fa-var-phone-alt: \f879;
+$fa-var-truck-front: \e2b7;
+$fa-var-cat: \f6be;
+$fa-var-anchor-circle-exclamation: \e4ab;
+$fa-var-truck-field: \e58d;
+$fa-var-route: \f4d7;
+$fa-var-clipboard-question: \e4e3;
+$fa-var-panorama: \e209;
+$fa-var-comment-medical: \f7f5;
+$fa-var-teeth-open: \f62f;
+$fa-var-file-circle-minus: \e4ed;
+$fa-var-tags: \f02c;
+$fa-var-wine-glass: \f4e3;
+$fa-var-forward-fast: \f050;
+$fa-var-fast-forward: \f050;
+$fa-var-face-meh-blank: \f5a4;
+$fa-var-meh-blank: \f5a4;
+$fa-var-square-parking: \f540;
+$fa-var-parking: \f540;
+$fa-var-house-signal: \e012;
+$fa-var-bars-progress: \f828;
+$fa-var-tasks-alt: \f828;
+$fa-var-faucet-drip: \e006;
+$fa-var-cart-flatbed: \f474;
+$fa-var-dolly-flatbed: \f474;
+$fa-var-ban-smoking: \f54d;
+$fa-var-smoking-ban: \f54d;
+$fa-var-terminal: \f120;
+$fa-var-mobile-button: \f10b;
+$fa-var-house-medical-flag: \e514;
+$fa-var-basket-shopping: \f291;
+$fa-var-shopping-basket: \f291;
+$fa-var-tape: \f4db;
+$fa-var-bus-simple: \f55e;
+$fa-var-bus-alt: \f55e;
+$fa-var-eye: \f06e;
+$fa-var-face-sad-cry: \f5b3;
+$fa-var-sad-cry: \f5b3;
+$fa-var-audio-description: \f29e;
+$fa-var-person-military-to-person: \e54c;
+$fa-var-file-shield: \e4f0;
+$fa-var-user-slash: \f506;
+$fa-var-pen: \f304;
+$fa-var-tower-observation: \e586;
+$fa-var-file-code: \f1c9;
+$fa-var-signal: \f012;
+$fa-var-signal-5: \f012;
+$fa-var-signal-perfect: \f012;
+$fa-var-bus: \f207;
+$fa-var-heart-circle-xmark: \e501;
+$fa-var-house-chimney: \e3af;
+$fa-var-home-lg: \e3af;
+$fa-var-window-maximize: \f2d0;
+$fa-var-face-frown: \f119;
+$fa-var-frown: \f119;
+$fa-var-prescription: \f5b1;
+$fa-var-shop: \f54f;
+$fa-var-store-alt: \f54f;
+$fa-var-floppy-disk: \f0c7;
+$fa-var-save: \f0c7;
+$fa-var-vihara: \f6a7;
+$fa-var-scale-unbalanced: \f515;
+$fa-var-balance-scale-left: \f515;
+$fa-var-sort-up: \f0de;
+$fa-var-sort-asc: \f0de;
+$fa-var-comment-dots: \f4ad;
+$fa-var-commenting: \f4ad;
+$fa-var-plant-wilt: \e5aa;
+$fa-var-diamond: \f219;
+$fa-var-face-grin-squint: \f585;
+$fa-var-grin-squint: \f585;
+$fa-var-hand-holding-dollar: \f4c0;
+$fa-var-hand-holding-usd: \f4c0;
+$fa-var-bacterium: \e05a;
+$fa-var-hand-pointer: \f25a;
+$fa-var-drum-steelpan: \f56a;
+$fa-var-hand-scissors: \f257;
+$fa-var-hands-praying: \f684;
+$fa-var-praying-hands: \f684;
+$fa-var-arrow-rotate-right: \f01e;
+$fa-var-arrow-right-rotate: \f01e;
+$fa-var-arrow-rotate-forward: \f01e;
+$fa-var-redo: \f01e;
+$fa-var-biohazard: \f780;
+$fa-var-location-crosshairs: \f601;
+$fa-var-location: \f601;
+$fa-var-mars-double: \f227;
+$fa-var-child-dress: \e59c;
+$fa-var-users-between-lines: \e591;
+$fa-var-lungs-virus: \e067;
+$fa-var-face-grin-tears: \f588;
+$fa-var-grin-tears: \f588;
+$fa-var-phone: \f095;
+$fa-var-calendar-xmark: \f273;
+$fa-var-calendar-times: \f273;
+$fa-var-child-reaching: \e59d;
+$fa-var-head-side-virus: \e064;
+$fa-var-user-gear: \f4fe;
+$fa-var-user-cog: \f4fe;
+$fa-var-arrow-up-1-9: \f163;
+$fa-var-sort-numeric-up: \f163;
+$fa-var-door-closed: \f52a;
+$fa-var-shield-virus: \e06c;
+$fa-var-dice-six: \f526;
+$fa-var-mosquito-net: \e52c;
+$fa-var-bridge-water: \e4ce;
+$fa-var-person-booth: \f756;
+$fa-var-text-width: \f035;
+$fa-var-hat-wizard: \f6e8;
+$fa-var-pen-fancy: \f5ac;
+$fa-var-person-digging: \f85e;
+$fa-var-digging: \f85e;
+$fa-var-trash: \f1f8;
+$fa-var-gauge-simple: \f629;
+$fa-var-gauge-simple-med: \f629;
+$fa-var-tachometer-average: \f629;
+$fa-var-book-medical: \f7e6;
+$fa-var-poo: \f2fe;
+$fa-var-quote-right: \f10e;
+$fa-var-quote-right-alt: \f10e;
+$fa-var-shirt: \f553;
+$fa-var-t-shirt: \f553;
+$fa-var-tshirt: \f553;
+$fa-var-cubes: \f1b3;
+$fa-var-divide: \f529;
+$fa-var-tenge-sign: \f7d7;
+$fa-var-tenge: \f7d7;
+$fa-var-headphones: \f025;
+$fa-var-hands-holding: \f4c2;
+$fa-var-hands-clapping: \e1a8;
+$fa-var-republican: \f75e;
+$fa-var-arrow-left: \f060;
+$fa-var-person-circle-xmark: \e543;
+$fa-var-ruler: \f545;
+$fa-var-align-left: \f036;
+$fa-var-dice-d6: \f6d1;
+$fa-var-restroom: \f7bd;
+$fa-var-j: \4a;
+$fa-var-users-viewfinder: \e595;
+$fa-var-file-video: \f1c8;
+$fa-var-up-right-from-square: \f35d;
+$fa-var-external-link-alt: \f35d;
+$fa-var-table-cells: \f00a;
+$fa-var-th: \f00a;
+$fa-var-file-pdf: \f1c1;
+$fa-var-book-bible: \f647;
+$fa-var-bible: \f647;
+$fa-var-o: \4f;
+$fa-var-suitcase-medical: \f0fa;
+$fa-var-medkit: \f0fa;
+$fa-var-user-secret: \f21b;
+$fa-var-otter: \f700;
+$fa-var-person-dress: \f182;
+$fa-var-female: \f182;
+$fa-var-comment-dollar: \f651;
+$fa-var-business-time: \f64a;
+$fa-var-briefcase-clock: \f64a;
+$fa-var-table-cells-large: \f009;
+$fa-var-th-large: \f009;
+$fa-var-book-tanakh: \f827;
+$fa-var-tanakh: \f827;
+$fa-var-phone-volume: \f2a0;
+$fa-var-volume-control-phone: \f2a0;
+$fa-var-hat-cowboy-side: \f8c1;
+$fa-var-clipboard-user: \f7f3;
+$fa-var-child: \f1ae;
+$fa-var-lira-sign: \f195;
+$fa-var-satellite: \f7bf;
+$fa-var-plane-lock: \e558;
+$fa-var-tag: \f02b;
+$fa-var-comment: \f075;
+$fa-var-cake-candles: \f1fd;
+$fa-var-birthday-cake: \f1fd;
+$fa-var-cake: \f1fd;
+$fa-var-envelope: \f0e0;
+$fa-var-angles-up: \f102;
+$fa-var-angle-double-up: \f102;
+$fa-var-paperclip: \f0c6;
+$fa-var-arrow-right-to-city: \e4b3;
+$fa-var-ribbon: \f4d6;
+$fa-var-lungs: \f604;
+$fa-var-arrow-up-9-1: \f887;
+$fa-var-sort-numeric-up-alt: \f887;
+$fa-var-litecoin-sign: \e1d3;
+$fa-var-border-none: \f850;
+$fa-var-circle-nodes: \e4e2;
+$fa-var-parachute-box: \f4cd;
+$fa-var-indent: \f03c;
+$fa-var-truck-field-un: \e58e;
+$fa-var-hourglass: \f254;
+$fa-var-hourglass-empty: \f254;
+$fa-var-mountain: \f6fc;
+$fa-var-user-doctor: \f0f0;
+$fa-var-user-md: \f0f0;
+$fa-var-circle-info: \f05a;
+$fa-var-info-circle: \f05a;
+$fa-var-cloud-meatball: \f73b;
+$fa-var-camera: \f030;
+$fa-var-camera-alt: \f030;
+$fa-var-square-virus: \e578;
+$fa-var-meteor: \f753;
+$fa-var-car-on: \e4dd;
+$fa-var-sleigh: \f7cc;
+$fa-var-arrow-down-1-9: \f162;
+$fa-var-sort-numeric-asc: \f162;
+$fa-var-sort-numeric-down: \f162;
+$fa-var-hand-holding-droplet: \f4c1;
+$fa-var-hand-holding-water: \f4c1;
+$fa-var-water: \f773;
+$fa-var-calendar-check: \f274;
+$fa-var-braille: \f2a1;
+$fa-var-prescription-bottle-medical: \f486;
+$fa-var-prescription-bottle-alt: \f486;
+$fa-var-landmark: \f66f;
+$fa-var-truck: \f0d1;
+$fa-var-crosshairs: \f05b;
+$fa-var-person-cane: \e53c;
+$fa-var-tent: \e57d;
+$fa-var-vest-patches: \e086;
+$fa-var-check-double: \f560;
+$fa-var-arrow-down-a-z: \f15d;
+$fa-var-sort-alpha-asc: \f15d;
+$fa-var-sort-alpha-down: \f15d;
+$fa-var-money-bill-wheat: \e52a;
+$fa-var-cookie: \f563;
+$fa-var-arrow-rotate-left: \f0e2;
+$fa-var-arrow-left-rotate: \f0e2;
+$fa-var-arrow-rotate-back: \f0e2;
+$fa-var-arrow-rotate-backward: \f0e2;
+$fa-var-undo: \f0e2;
+$fa-var-hard-drive: \f0a0;
+$fa-var-hdd: \f0a0;
+$fa-var-face-grin-squint-tears: \f586;
+$fa-var-grin-squint-tears: \f586;
+$fa-var-dumbbell: \f44b;
+$fa-var-rectangle-list: \f022;
+$fa-var-list-alt: \f022;
+$fa-var-tarp-droplet: \e57c;
+$fa-var-house-medical-circle-check: \e511;
+$fa-var-person-skiing-nordic: \f7ca;
+$fa-var-skiing-nordic: \f7ca;
+$fa-var-calendar-plus: \f271;
+$fa-var-plane-arrival: \f5af;
+$fa-var-circle-left: \f359;
+$fa-var-arrow-alt-circle-left: \f359;
+$fa-var-train-subway: \f239;
+$fa-var-subway: \f239;
+$fa-var-chart-gantt: \e0e4;
+$fa-var-indian-rupee-sign: \e1bc;
+$fa-var-indian-rupee: \e1bc;
+$fa-var-inr: \e1bc;
+$fa-var-crop-simple: \f565;
+$fa-var-crop-alt: \f565;
+$fa-var-money-bill-1: \f3d1;
+$fa-var-money-bill-alt: \f3d1;
+$fa-var-left-long: \f30a;
+$fa-var-long-arrow-alt-left: \f30a;
+$fa-var-dna: \f471;
+$fa-var-virus-slash: \e075;
+$fa-var-minus: \f068;
+$fa-var-subtract: \f068;
+$fa-var-chess: \f439;
+$fa-var-arrow-left-long: \f177;
+$fa-var-long-arrow-left: \f177;
+$fa-var-plug-circle-check: \e55c;
+$fa-var-street-view: \f21d;
+$fa-var-franc-sign: \e18f;
+$fa-var-volume-off: \f026;
+$fa-var-hands-asl-interpreting: \f2a3;
+$fa-var-american-sign-language-interpreting: \f2a3;
+$fa-var-asl-interpreting: \f2a3;
+$fa-var-hands-american-sign-language-interpreting: \f2a3;
+$fa-var-gear: \f013;
+$fa-var-cog: \f013;
+$fa-var-droplet-slash: \f5c7;
+$fa-var-tint-slash: \f5c7;
+$fa-var-mosque: \f678;
+$fa-var-mosquito: \e52b;
+$fa-var-star-of-david: \f69a;
+$fa-var-person-military-rifle: \e54b;
+$fa-var-cart-shopping: \f07a;
+$fa-var-shopping-cart: \f07a;
+$fa-var-vials: \f493;
+$fa-var-plug-circle-plus: \e55f;
+$fa-var-place-of-worship: \f67f;
+$fa-var-grip-vertical: \f58e;
+$fa-var-arrow-turn-up: \f148;
+$fa-var-level-up: \f148;
+$fa-var-u: \55;
+$fa-var-square-root-variable: \f698;
+$fa-var-square-root-alt: \f698;
+$fa-var-clock: \f017;
+$fa-var-clock-four: \f017;
+$fa-var-backward-step: \f048;
+$fa-var-step-backward: \f048;
+$fa-var-pallet: \f482;
+$fa-var-faucet: \e005;
+$fa-var-baseball-bat-ball: \f432;
+$fa-var-s: \53;
+$fa-var-timeline: \e29c;
+$fa-var-keyboard: \f11c;
+$fa-var-caret-down: \f0d7;
+$fa-var-house-chimney-medical: \f7f2;
+$fa-var-clinic-medical: \f7f2;
+$fa-var-temperature-three-quarters: \f2c8;
+$fa-var-temperature-3: \f2c8;
+$fa-var-thermometer-3: \f2c8;
+$fa-var-thermometer-three-quarters: \f2c8;
+$fa-var-mobile-screen: \f3cf;
+$fa-var-mobile-android-alt: \f3cf;
+$fa-var-plane-up: \e22d;
+$fa-var-piggy-bank: \f4d3;
+$fa-var-battery-half: \f242;
+$fa-var-battery-3: \f242;
+$fa-var-mountain-city: \e52e;
+$fa-var-coins: \f51e;
+$fa-var-khanda: \f66d;
+$fa-var-sliders: \f1de;
+$fa-var-sliders-h: \f1de;
+$fa-var-folder-tree: \f802;
+$fa-var-network-wired: \f6ff;
+$fa-var-map-pin: \f276;
+$fa-var-hamsa: \f665;
+$fa-var-cent-sign: \e3f5;
+$fa-var-flask: \f0c3;
+$fa-var-person-pregnant: \e31e;
+$fa-var-wand-sparkles: \f72b;
+$fa-var-ellipsis-vertical: \f142;
+$fa-var-ellipsis-v: \f142;
+$fa-var-ticket: \f145;
+$fa-var-power-off: \f011;
+$fa-var-right-long: \f30b;
+$fa-var-long-arrow-alt-right: \f30b;
+$fa-var-flag-usa: \f74d;
+$fa-var-laptop-file: \e51d;
+$fa-var-tty: \f1e4;
+$fa-var-teletype: \f1e4;
+$fa-var-diagram-next: \e476;
+$fa-var-person-rifle: \e54e;
+$fa-var-house-medical-circle-exclamation: \e512;
+$fa-var-closed-captioning: \f20a;
+$fa-var-person-hiking: \f6ec;
+$fa-var-hiking: \f6ec;
+$fa-var-venus-double: \f226;
+$fa-var-images: \f302;
+$fa-var-calculator: \f1ec;
+$fa-var-people-pulling: \e535;
+$fa-var-n: \4e;
+$fa-var-cable-car: \f7da;
+$fa-var-tram: \f7da;
+$fa-var-cloud-rain: \f73d;
+$fa-var-building-circle-xmark: \e4d4;
+$fa-var-ship: \f21a;
+$fa-var-arrows-down-to-line: \e4b8;
+$fa-var-download: \f019;
+$fa-var-face-grin: \f580;
+$fa-var-grin: \f580;
+$fa-var-delete-left: \f55a;
+$fa-var-backspace: \f55a;
+$fa-var-eye-dropper: \f1fb;
+$fa-var-eye-dropper-empty: \f1fb;
+$fa-var-eyedropper: \f1fb;
+$fa-var-file-circle-check: \e5a0;
+$fa-var-forward: \f04e;
+$fa-var-mobile: \f3ce;
+$fa-var-mobile-android: \f3ce;
+$fa-var-mobile-phone: \f3ce;
+$fa-var-face-meh: \f11a;
+$fa-var-meh: \f11a;
+$fa-var-align-center: \f037;
+$fa-var-book-skull: \f6b7;
+$fa-var-book-dead: \f6b7;
+$fa-var-id-card: \f2c2;
+$fa-var-drivers-license: \f2c2;
+$fa-var-outdent: \f03b;
+$fa-var-dedent: \f03b;
+$fa-var-heart-circle-exclamation: \e4fe;
+$fa-var-house: \f015;
+$fa-var-home: \f015;
+$fa-var-home-alt: \f015;
+$fa-var-home-lg-alt: \f015;
+$fa-var-calendar-week: \f784;
+$fa-var-laptop-medical: \f812;
+$fa-var-b: \42;
+$fa-var-file-medical: \f477;
+$fa-var-dice-one: \f525;
+$fa-var-kiwi-bird: \f535;
+$fa-var-arrow-right-arrow-left: \f0ec;
+$fa-var-exchange: \f0ec;
+$fa-var-rotate-right: \f2f9;
+$fa-var-redo-alt: \f2f9;
+$fa-var-rotate-forward: \f2f9;
+$fa-var-utensils: \f2e7;
+$fa-var-cutlery: \f2e7;
+$fa-var-arrow-up-wide-short: \f161;
+$fa-var-sort-amount-up: \f161;
+$fa-var-mill-sign: \e1ed;
+$fa-var-bowl-rice: \e2eb;
+$fa-var-skull: \f54c;
+$fa-var-tower-broadcast: \f519;
+$fa-var-broadcast-tower: \f519;
+$fa-var-truck-pickup: \f63c;
+$fa-var-up-long: \f30c;
+$fa-var-long-arrow-alt-up: \f30c;
+$fa-var-stop: \f04d;
+$fa-var-code-merge: \f387;
+$fa-var-upload: \f093;
+$fa-var-hurricane: \f751;
+$fa-var-mound: \e52d;
+$fa-var-toilet-portable: \e583;
+$fa-var-compact-disc: \f51f;
+$fa-var-file-arrow-down: \f56d;
+$fa-var-file-download: \f56d;
+$fa-var-caravan: \f8ff;
+$fa-var-shield-cat: \e572;
+$fa-var-bolt: \f0e7;
+$fa-var-zap: \f0e7;
+$fa-var-glass-water: \e4f4;
+$fa-var-oil-well: \e532;
+$fa-var-vault: \e2c5;
+$fa-var-mars: \f222;
+$fa-var-toilet: \f7d8;
+$fa-var-plane-circle-xmark: \e557;
+$fa-var-yen-sign: \f157;
+$fa-var-cny: \f157;
+$fa-var-jpy: \f157;
+$fa-var-rmb: \f157;
+$fa-var-yen: \f157;
+$fa-var-ruble-sign: \f158;
+$fa-var-rouble: \f158;
+$fa-var-rub: \f158;
+$fa-var-ruble: \f158;
+$fa-var-sun: \f185;
+$fa-var-guitar: \f7a6;
+$fa-var-face-laugh-wink: \f59c;
+$fa-var-laugh-wink: \f59c;
+$fa-var-horse-head: \f7ab;
+$fa-var-bore-hole: \e4c3;
+$fa-var-industry: \f275;
+$fa-var-circle-down: \f358;
+$fa-var-arrow-alt-circle-down: \f358;
+$fa-var-arrows-turn-to-dots: \e4c1;
+$fa-var-florin-sign: \e184;
+$fa-var-arrow-down-short-wide: \f884;
+$fa-var-sort-amount-desc: \f884;
+$fa-var-sort-amount-down-alt: \f884;
+$fa-var-less-than: \3c;
+$fa-var-angle-down: \f107;
+$fa-var-car-tunnel: \e4de;
+$fa-var-head-side-cough: \e061;
+$fa-var-grip-lines: \f7a4;
+$fa-var-thumbs-down: \f165;
+$fa-var-user-lock: \f502;
+$fa-var-arrow-right-long: \f178;
+$fa-var-long-arrow-right: \f178;
+$fa-var-anchor-circle-xmark: \e4ac;
+$fa-var-ellipsis: \f141;
+$fa-var-ellipsis-h: \f141;
+$fa-var-chess-pawn: \f443;
+$fa-var-kit-medical: \f479;
+$fa-var-first-aid: \f479;
+$fa-var-person-through-window: \e5a9;
+$fa-var-toolbox: \f552;
+$fa-var-hands-holding-circle: \e4fb;
+$fa-var-bug: \f188;
+$fa-var-credit-card: \f09d;
+$fa-var-credit-card-alt: \f09d;
+$fa-var-car: \f1b9;
+$fa-var-automobile: \f1b9;
+$fa-var-hand-holding-hand: \e4f7;
+$fa-var-book-open-reader: \f5da;
+$fa-var-book-reader: \f5da;
+$fa-var-mountain-sun: \e52f;
+$fa-var-arrows-left-right-to-line: \e4ba;
+$fa-var-dice-d20: \f6cf;
+$fa-var-truck-droplet: \e58c;
+$fa-var-file-circle-xmark: \e5a1;
+$fa-var-temperature-arrow-up: \e040;
+$fa-var-temperature-up: \e040;
+$fa-var-medal: \f5a2;
+$fa-var-bed: \f236;
+$fa-var-square-h: \f0fd;
+$fa-var-h-square: \f0fd;
+$fa-var-podcast: \f2ce;
+$fa-var-temperature-full: \f2c7;
+$fa-var-temperature-4: \f2c7;
+$fa-var-thermometer-4: \f2c7;
+$fa-var-thermometer-full: \f2c7;
+$fa-var-bell: \f0f3;
+$fa-var-superscript: \f12b;
+$fa-var-plug-circle-xmark: \e560;
+$fa-var-star-of-life: \f621;
+$fa-var-phone-slash: \f3dd;
+$fa-var-paint-roller: \f5aa;
+$fa-var-handshake-angle: \f4c4;
+$fa-var-hands-helping: \f4c4;
+$fa-var-location-dot: \f3c5;
+$fa-var-map-marker-alt: \f3c5;
+$fa-var-file: \f15b;
+$fa-var-greater-than: \3e;
+$fa-var-person-swimming: \f5c4;
+$fa-var-swimmer: \f5c4;
+$fa-var-arrow-down: \f063;
+$fa-var-droplet: \f043;
+$fa-var-tint: \f043;
+$fa-var-eraser: \f12d;
+$fa-var-earth-americas: \f57d;
+$fa-var-earth: \f57d;
+$fa-var-earth-america: \f57d;
+$fa-var-globe-americas: \f57d;
+$fa-var-person-burst: \e53b;
+$fa-var-dove: \f4ba;
+$fa-var-battery-empty: \f244;
+$fa-var-battery-0: \f244;
+$fa-var-socks: \f696;
+$fa-var-inbox: \f01c;
+$fa-var-section: \e447;
+$fa-var-gauge-high: \f625;
+$fa-var-tachometer-alt: \f625;
+$fa-var-tachometer-alt-fast: \f625;
+$fa-var-envelope-open-text: \f658;
+$fa-var-hospital: \f0f8;
+$fa-var-hospital-alt: \f0f8;
+$fa-var-hospital-wide: \f0f8;
+$fa-var-wine-bottle: \f72f;
+$fa-var-chess-rook: \f447;
+$fa-var-bars-staggered: \f550;
+$fa-var-reorder: \f550;
+$fa-var-stream: \f550;
+$fa-var-dharmachakra: \f655;
+$fa-var-hotdog: \f80f;
+$fa-var-person-walking-with-cane: \f29d;
+$fa-var-blind: \f29d;
+$fa-var-drum: \f569;
+$fa-var-ice-cream: \f810;
+$fa-var-heart-circle-bolt: \e4fc;
+$fa-var-fax: \f1ac;
+$fa-var-paragraph: \f1dd;
+$fa-var-check-to-slot: \f772;
+$fa-var-vote-yea: \f772;
+$fa-var-star-half: \f089;
+$fa-var-boxes-stacked: \f468;
+$fa-var-boxes: \f468;
+$fa-var-boxes-alt: \f468;
+$fa-var-link: \f0c1;
+$fa-var-chain: \f0c1;
+$fa-var-ear-listen: \f2a2;
+$fa-var-assistive-listening-systems: \f2a2;
+$fa-var-tree-city: \e587;
+$fa-var-play: \f04b;
+$fa-var-font: \f031;
+$fa-var-rupiah-sign: \e23d;
+$fa-var-magnifying-glass: \f002;
+$fa-var-search: \f002;
+$fa-var-table-tennis-paddle-ball: \f45d;
+$fa-var-ping-pong-paddle-ball: \f45d;
+$fa-var-table-tennis: \f45d;
+$fa-var-person-dots-from-line: \f470;
+$fa-var-diagnoses: \f470;
+$fa-var-trash-can-arrow-up: \f82a;
+$fa-var-trash-restore-alt: \f82a;
+$fa-var-naira-sign: \e1f6;
+$fa-var-cart-arrow-down: \f218;
+$fa-var-walkie-talkie: \f8ef;
+$fa-var-file-pen: \f31c;
+$fa-var-file-edit: \f31c;
+$fa-var-receipt: \f543;
+$fa-var-square-pen: \f14b;
+$fa-var-pen-square: \f14b;
+$fa-var-pencil-square: \f14b;
+$fa-var-suitcase-rolling: \f5c1;
+$fa-var-person-circle-exclamation: \e53f;
+$fa-var-chevron-down: \f078;
+$fa-var-battery-full: \f240;
+$fa-var-battery: \f240;
+$fa-var-battery-5: \f240;
+$fa-var-skull-crossbones: \f714;
+$fa-var-code-compare: \e13a;
+$fa-var-list-ul: \f0ca;
+$fa-var-list-dots: \f0ca;
+$fa-var-school-lock: \e56f;
+$fa-var-tower-cell: \e585;
+$fa-var-down-long: \f309;
+$fa-var-long-arrow-alt-down: \f309;
+$fa-var-ranking-star: \e561;
+$fa-var-chess-king: \f43f;
+$fa-var-person-harassing: \e549;
+$fa-var-brazilian-real-sign: \e46c;
+$fa-var-landmark-dome: \f752;
+$fa-var-landmark-alt: \f752;
+$fa-var-arrow-up: \f062;
+$fa-var-tv: \f26c;
+$fa-var-television: \f26c;
+$fa-var-tv-alt: \f26c;
+$fa-var-shrimp: \e448;
+$fa-var-list-check: \f0ae;
+$fa-var-tasks: \f0ae;
+$fa-var-jug-detergent: \e519;
+$fa-var-circle-user: \f2bd;
+$fa-var-user-circle: \f2bd;
+$fa-var-user-shield: \f505;
+$fa-var-wind: \f72e;
+$fa-var-car-burst: \f5e1;
+$fa-var-car-crash: \f5e1;
+$fa-var-y: \59;
+$fa-var-person-snowboarding: \f7ce;
+$fa-var-snowboarding: \f7ce;
+$fa-var-truck-fast: \f48b;
+$fa-var-shipping-fast: \f48b;
+$fa-var-fish: \f578;
+$fa-var-user-graduate: \f501;
+$fa-var-circle-half-stroke: \f042;
+$fa-var-adjust: \f042;
+$fa-var-clapperboard: \e131;
+$fa-var-circle-radiation: \f7ba;
+$fa-var-radiation-alt: \f7ba;
+$fa-var-baseball: \f433;
+$fa-var-baseball-ball: \f433;
+$fa-var-jet-fighter-up: \e518;
+$fa-var-diagram-project: \f542;
+$fa-var-project-diagram: \f542;
+$fa-var-copy: \f0c5;
+$fa-var-volume-xmark: \f6a9;
+$fa-var-volume-mute: \f6a9;
+$fa-var-volume-times: \f6a9;
+$fa-var-hand-sparkles: \e05d;
+$fa-var-grip: \f58d;
+$fa-var-grip-horizontal: \f58d;
+$fa-var-share-from-square: \f14d;
+$fa-var-share-square: \f14d;
+$fa-var-child-combatant: \e4e0;
+$fa-var-child-rifle: \e4e0;
+$fa-var-gun: \e19b;
+$fa-var-square-phone: \f098;
+$fa-var-phone-square: \f098;
+$fa-var-plus: \2b;
+$fa-var-add: \2b;
+$fa-var-expand: \f065;
+$fa-var-computer: \e4e5;
+$fa-var-xmark: \f00d;
+$fa-var-close: \f00d;
+$fa-var-multiply: \f00d;
+$fa-var-remove: \f00d;
+$fa-var-times: \f00d;
+$fa-var-arrows-up-down-left-right: \f047;
+$fa-var-arrows: \f047;
+$fa-var-chalkboard-user: \f51c;
+$fa-var-chalkboard-teacher: \f51c;
+$fa-var-peso-sign: \e222;
+$fa-var-building-shield: \e4d8;
+$fa-var-baby: \f77c;
+$fa-var-users-line: \e592;
+$fa-var-quote-left: \f10d;
+$fa-var-quote-left-alt: \f10d;
+$fa-var-tractor: \f722;
+$fa-var-trash-arrow-up: \f829;
+$fa-var-trash-restore: \f829;
+$fa-var-arrow-down-up-lock: \e4b0;
+$fa-var-lines-leaning: \e51e;
+$fa-var-ruler-combined: \f546;
+$fa-var-copyright: \f1f9;
+$fa-var-equals: \3d;
+$fa-var-blender: \f517;
+$fa-var-teeth: \f62e;
+$fa-var-shekel-sign: \f20b;
+$fa-var-ils: \f20b;
+$fa-var-shekel: \f20b;
+$fa-var-sheqel: \f20b;
+$fa-var-sheqel-sign: \f20b;
+$fa-var-map: \f279;
+$fa-var-rocket: \f135;
+$fa-var-photo-film: \f87c;
+$fa-var-photo-video: \f87c;
+$fa-var-folder-minus: \f65d;
+$fa-var-store: \f54e;
+$fa-var-arrow-trend-up: \e098;
+$fa-var-plug-circle-minus: \e55e;
+$fa-var-sign-hanging: \f4d9;
+$fa-var-sign: \f4d9;
+$fa-var-bezier-curve: \f55b;
+$fa-var-bell-slash: \f1f6;
+$fa-var-tablet: \f3fb;
+$fa-var-tablet-android: \f3fb;
+$fa-var-school-flag: \e56e;
+$fa-var-fill: \f575;
+$fa-var-angle-up: \f106;
+$fa-var-drumstick-bite: \f6d7;
+$fa-var-holly-berry: \f7aa;
+$fa-var-chevron-left: \f053;
+$fa-var-bacteria: \e059;
+$fa-var-hand-lizard: \f258;
+$fa-var-notdef: \e1fe;
+$fa-var-disease: \f7fa;
+$fa-var-briefcase-medical: \f469;
+$fa-var-genderless: \f22d;
+$fa-var-chevron-right: \f054;
+$fa-var-retweet: \f079;
+$fa-var-car-rear: \f5de;
+$fa-var-car-alt: \f5de;
+$fa-var-pump-soap: \e06b;
+$fa-var-video-slash: \f4e2;
+$fa-var-battery-quarter: \f243;
+$fa-var-battery-2: \f243;
+$fa-var-radio: \f8d7;
+$fa-var-baby-carriage: \f77d;
+$fa-var-carriage-baby: \f77d;
+$fa-var-traffic-light: \f637;
+$fa-var-thermometer: \f491;
+$fa-var-vr-cardboard: \f729;
+$fa-var-hand-middle-finger: \f806;
+$fa-var-percent: \25;
+$fa-var-percentage: \25;
+$fa-var-truck-moving: \f4df;
+$fa-var-glass-water-droplet: \e4f5;
+$fa-var-display: \e163;
+$fa-var-face-smile: \f118;
+$fa-var-smile: \f118;
+$fa-var-thumbtack: \f08d;
+$fa-var-thumb-tack: \f08d;
+$fa-var-trophy: \f091;
+$fa-var-person-praying: \f683;
+$fa-var-pray: \f683;
+$fa-var-hammer: \f6e3;
+$fa-var-hand-peace: \f25b;
+$fa-var-rotate: \f2f1;
+$fa-var-sync-alt: \f2f1;
+$fa-var-spinner: \f110;
+$fa-var-robot: \f544;
+$fa-var-peace: \f67c;
+$fa-var-gears: \f085;
+$fa-var-cogs: \f085;
+$fa-var-warehouse: \f494;
+$fa-var-arrow-up-right-dots: \e4b7;
+$fa-var-splotch: \f5bc;
+$fa-var-face-grin-hearts: \f584;
+$fa-var-grin-hearts: \f584;
+$fa-var-dice-four: \f524;
+$fa-var-sim-card: \f7c4;
+$fa-var-transgender: \f225;
+$fa-var-transgender-alt: \f225;
+$fa-var-mercury: \f223;
+$fa-var-arrow-turn-down: \f149;
+$fa-var-level-down: \f149;
+$fa-var-person-falling-burst: \e547;
+$fa-var-award: \f559;
+$fa-var-ticket-simple: \f3ff;
+$fa-var-ticket-alt: \f3ff;
+$fa-var-building: \f1ad;
+$fa-var-angles-left: \f100;
+$fa-var-angle-double-left: \f100;
+$fa-var-qrcode: \f029;
+$fa-var-clock-rotate-left: \f1da;
+$fa-var-history: \f1da;
+$fa-var-face-grin-beam-sweat: \f583;
+$fa-var-grin-beam-sweat: \f583;
+$fa-var-file-export: \f56e;
+$fa-var-arrow-right-from-file: \f56e;
+$fa-var-shield: \f132;
+$fa-var-shield-blank: \f132;
+$fa-var-arrow-up-short-wide: \f885;
+$fa-var-sort-amount-up-alt: \f885;
+$fa-var-house-medical: \e3b2;
+$fa-var-golf-ball-tee: \f450;
+$fa-var-golf-ball: \f450;
+$fa-var-circle-chevron-left: \f137;
+$fa-var-chevron-circle-left: \f137;
+$fa-var-house-chimney-window: \e00d;
+$fa-var-pen-nib: \f5ad;
+$fa-var-tent-arrow-turn-left: \e580;
+$fa-var-tents: \e582;
+$fa-var-wand-magic: \f0d0;
+$fa-var-magic: \f0d0;
+$fa-var-dog: \f6d3;
+$fa-var-carrot: \f787;
+$fa-var-moon: \f186;
+$fa-var-wine-glass-empty: \f5ce;
+$fa-var-wine-glass-alt: \f5ce;
+$fa-var-cheese: \f7ef;
+$fa-var-yin-yang: \f6ad;
+$fa-var-music: \f001;
+$fa-var-code-commit: \f386;
+$fa-var-temperature-low: \f76b;
+$fa-var-person-biking: \f84a;
+$fa-var-biking: \f84a;
+$fa-var-broom: \f51a;
+$fa-var-shield-heart: \e574;
+$fa-var-gopuram: \f664;
+$fa-var-earth-oceania: \e47b;
+$fa-var-globe-oceania: \e47b;
+$fa-var-square-xmark: \f2d3;
+$fa-var-times-square: \f2d3;
+$fa-var-xmark-square: \f2d3;
+$fa-var-hashtag: \23;
+$fa-var-up-right-and-down-left-from-center: \f424;
+$fa-var-expand-alt: \f424;
+$fa-var-oil-can: \f613;
+$fa-var-t: \54;
+$fa-var-hippo: \f6ed;
+$fa-var-chart-column: \e0e3;
+$fa-var-infinity: \f534;
+$fa-var-vial-circle-check: \e596;
+$fa-var-person-arrow-down-to-line: \e538;
+$fa-var-voicemail: \f897;
+$fa-var-fan: \f863;
+$fa-var-person-walking-luggage: \e554;
+$fa-var-up-down: \f338;
+$fa-var-arrows-alt-v: \f338;
+$fa-var-cloud-moon-rain: \f73c;
+$fa-var-calendar: \f133;
+$fa-var-trailer: \e041;
+$fa-var-bahai: \f666;
+$fa-var-haykal: \f666;
+$fa-var-sd-card: \f7c2;
+$fa-var-dragon: \f6d5;
+$fa-var-shoe-prints: \f54b;
+$fa-var-circle-plus: \f055;
+$fa-var-plus-circle: \f055;
+$fa-var-face-grin-tongue-wink: \f58b;
+$fa-var-grin-tongue-wink: \f58b;
+$fa-var-hand-holding: \f4bd;
+$fa-var-plug-circle-exclamation: \e55d;
+$fa-var-link-slash: \f127;
+$fa-var-chain-broken: \f127;
+$fa-var-chain-slash: \f127;
+$fa-var-unlink: \f127;
+$fa-var-clone: \f24d;
+$fa-var-person-walking-arrow-loop-left: \e551;
+$fa-var-arrow-up-z-a: \f882;
+$fa-var-sort-alpha-up-alt: \f882;
+$fa-var-fire-flame-curved: \f7e4;
+$fa-var-fire-alt: \f7e4;
+$fa-var-tornado: \f76f;
+$fa-var-file-circle-plus: \e494;
+$fa-var-book-quran: \f687;
+$fa-var-quran: \f687;
+$fa-var-anchor: \f13d;
+$fa-var-border-all: \f84c;
+$fa-var-face-angry: \f556;
+$fa-var-angry: \f556;
+$fa-var-cookie-bite: \f564;
+$fa-var-arrow-trend-down: \e097;
+$fa-var-rss: \f09e;
+$fa-var-feed: \f09e;
+$fa-var-draw-polygon: \f5ee;
+$fa-var-scale-balanced: \f24e;
+$fa-var-balance-scale: \f24e;
+$fa-var-gauge-simple-high: \f62a;
+$fa-var-tachometer: \f62a;
+$fa-var-tachometer-fast: \f62a;
+$fa-var-shower: \f2cc;
+$fa-var-desktop: \f390;
+$fa-var-desktop-alt: \f390;
+$fa-var-m: \4d;
+$fa-var-table-list: \f00b;
+$fa-var-th-list: \f00b;
+$fa-var-comment-sms: \f7cd;
+$fa-var-sms: \f7cd;
+$fa-var-book: \f02d;
+$fa-var-user-plus: \f234;
+$fa-var-check: \f00c;
+$fa-var-battery-three-quarters: \f241;
+$fa-var-battery-4: \f241;
+$fa-var-house-circle-check: \e509;
+$fa-var-angle-left: \f104;
+$fa-var-diagram-successor: \e47a;
+$fa-var-truck-arrow-right: \e58b;
+$fa-var-arrows-split-up-and-left: \e4bc;
+$fa-var-hand-fist: \f6de;
+$fa-var-fist-raised: \f6de;
+$fa-var-cloud-moon: \f6c3;
+$fa-var-briefcase: \f0b1;
+$fa-var-person-falling: \e546;
+$fa-var-image-portrait: \f3e0;
+$fa-var-portrait: \f3e0;
+$fa-var-user-tag: \f507;
+$fa-var-rug: \e569;
+$fa-var-earth-europe: \f7a2;
+$fa-var-globe-europe: \f7a2;
+$fa-var-cart-flatbed-suitcase: \f59d;
+$fa-var-luggage-cart: \f59d;
+$fa-var-rectangle-xmark: \f410;
+$fa-var-rectangle-times: \f410;
+$fa-var-times-rectangle: \f410;
+$fa-var-window-close: \f410;
+$fa-var-baht-sign: \e0ac;
+$fa-var-book-open: \f518;
+$fa-var-book-journal-whills: \f66a;
+$fa-var-journal-whills: \f66a;
+$fa-var-handcuffs: \e4f8;
+$fa-var-triangle-exclamation: \f071;
+$fa-var-exclamation-triangle: \f071;
+$fa-var-warning: \f071;
+$fa-var-database: \f1c0;
+$fa-var-share: \f064;
+$fa-var-arrow-turn-right: \f064;
+$fa-var-mail-forward: \f064;
+$fa-var-bottle-droplet: \e4c4;
+$fa-var-mask-face: \e1d7;
+$fa-var-hill-rockslide: \e508;
+$fa-var-right-left: \f362;
+$fa-var-exchange-alt: \f362;
+$fa-var-paper-plane: \f1d8;
+$fa-var-road-circle-exclamation: \e565;
+$fa-var-dungeon: \f6d9;
+$fa-var-align-right: \f038;
+$fa-var-money-bill-1-wave: \f53b;
+$fa-var-money-bill-wave-alt: \f53b;
+$fa-var-life-ring: \f1cd;
+$fa-var-hands: \f2a7;
+$fa-var-sign-language: \f2a7;
+$fa-var-signing: \f2a7;
+$fa-var-calendar-day: \f783;
+$fa-var-water-ladder: \f5c5;
+$fa-var-ladder-water: \f5c5;
+$fa-var-swimming-pool: \f5c5;
+$fa-var-arrows-up-down: \f07d;
+$fa-var-arrows-v: \f07d;
+$fa-var-face-grimace: \f57f;
+$fa-var-grimace: \f57f;
+$fa-var-wheelchair-move: \e2ce;
+$fa-var-wheelchair-alt: \e2ce;
+$fa-var-turn-down: \f3be;
+$fa-var-level-down-alt: \f3be;
+$fa-var-person-walking-arrow-right: \e552;
+$fa-var-square-envelope: \f199;
+$fa-var-envelope-square: \f199;
+$fa-var-dice: \f522;
+$fa-var-bowling-ball: \f436;
+$fa-var-brain: \f5dc;
+$fa-var-bandage: \f462;
+$fa-var-band-aid: \f462;
+$fa-var-calendar-minus: \f272;
+$fa-var-circle-xmark: \f057;
+$fa-var-times-circle: \f057;
+$fa-var-xmark-circle: \f057;
+$fa-var-gifts: \f79c;
+$fa-var-hotel: \f594;
+$fa-var-earth-asia: \f57e;
+$fa-var-globe-asia: \f57e;
+$fa-var-id-card-clip: \f47f;
+$fa-var-id-card-alt: \f47f;
+$fa-var-magnifying-glass-plus: \f00e;
+$fa-var-search-plus: \f00e;
+$fa-var-thumbs-up: \f164;
+$fa-var-user-clock: \f4fd;
+$fa-var-hand-dots: \f461;
+$fa-var-allergies: \f461;
+$fa-var-file-invoice: \f570;
+$fa-var-window-minimize: \f2d1;
+$fa-var-mug-saucer: \f0f4;
+$fa-var-coffee: \f0f4;
+$fa-var-brush: \f55d;
+$fa-var-mask: \f6fa;
+$fa-var-magnifying-glass-minus: \f010;
+$fa-var-search-minus: \f010;
+$fa-var-ruler-vertical: \f548;
+$fa-var-user-large: \f406;
+$fa-var-user-alt: \f406;
+$fa-var-train-tram: \e5b4;
+$fa-var-user-nurse: \f82f;
+$fa-var-syringe: \f48e;
+$fa-var-cloud-sun: \f6c4;
+$fa-var-stopwatch-20: \e06f;
+$fa-var-square-full: \f45c;
+$fa-var-magnet: \f076;
+$fa-var-jar: \e516;
+$fa-var-note-sticky: \f249;
+$fa-var-sticky-note: \f249;
+$fa-var-bug-slash: \e490;
+$fa-var-arrow-up-from-water-pump: \e4b6;
+$fa-var-bone: \f5d7;
+$fa-var-user-injured: \f728;
+$fa-var-face-sad-tear: \f5b4;
+$fa-var-sad-tear: \f5b4;
+$fa-var-plane: \f072;
+$fa-var-tent-arrows-down: \e581;
+$fa-var-exclamation: \21;
+$fa-var-arrows-spin: \e4bb;
+$fa-var-print: \f02f;
+$fa-var-turkish-lira-sign: \e2bb;
+$fa-var-try: \e2bb;
+$fa-var-turkish-lira: \e2bb;
+$fa-var-dollar-sign: \24;
+$fa-var-dollar: \24;
+$fa-var-usd: \24;
+$fa-var-x: \58;
+$fa-var-magnifying-glass-dollar: \f688;
+$fa-var-search-dollar: \f688;
+$fa-var-users-gear: \f509;
+$fa-var-users-cog: \f509;
+$fa-var-person-military-pointing: \e54a;
+$fa-var-building-columns: \f19c;
+$fa-var-bank: \f19c;
+$fa-var-institution: \f19c;
+$fa-var-museum: \f19c;
+$fa-var-university: \f19c;
+$fa-var-umbrella: \f0e9;
+$fa-var-trowel: \e589;
+$fa-var-d: \44;
+$fa-var-stapler: \e5af;
+$fa-var-masks-theater: \f630;
+$fa-var-theater-masks: \f630;
+$fa-var-kip-sign: \e1c4;
+$fa-var-hand-point-left: \f0a5;
+$fa-var-handshake-simple: \f4c6;
+$fa-var-handshake-alt: \f4c6;
+$fa-var-jet-fighter: \f0fb;
+$fa-var-fighter-jet: \f0fb;
+$fa-var-square-share-nodes: \f1e1;
+$fa-var-share-alt-square: \f1e1;
+$fa-var-barcode: \f02a;
+$fa-var-plus-minus: \e43c;
+$fa-var-video: \f03d;
+$fa-var-video-camera: \f03d;
+$fa-var-graduation-cap: \f19d;
+$fa-var-mortar-board: \f19d;
+$fa-var-hand-holding-medical: \e05c;
+$fa-var-person-circle-check: \e53e;
+$fa-var-turn-up: \f3bf;
+$fa-var-level-up-alt: \f3bf;
+
+$fa-var-monero: \f3d0;
+$fa-var-hooli: \f427;
+$fa-var-yelp: \f1e9;
+$fa-var-cc-visa: \f1f0;
+$fa-var-lastfm: \f202;
+$fa-var-shopware: \f5b5;
+$fa-var-creative-commons-nc: \f4e8;
+$fa-var-aws: \f375;
+$fa-var-redhat: \f7bc;
+$fa-var-yoast: \f2b1;
+$fa-var-cloudflare: \e07d;
+$fa-var-ups: \f7e0;
+$fa-var-wpexplorer: \f2de;
+$fa-var-dyalog: \f399;
+$fa-var-bity: \f37a;
+$fa-var-stackpath: \f842;
+$fa-var-buysellads: \f20d;
+$fa-var-first-order: \f2b0;
+$fa-var-modx: \f285;
+$fa-var-guilded: \e07e;
+$fa-var-vnv: \f40b;
+$fa-var-square-js: \f3b9;
+$fa-var-js-square: \f3b9;
+$fa-var-microsoft: \f3ca;
+$fa-var-qq: \f1d6;
+$fa-var-orcid: \f8d2;
+$fa-var-java: \f4e4;
+$fa-var-invision: \f7b0;
+$fa-var-creative-commons-pd-alt: \f4ed;
+$fa-var-centercode: \f380;
+$fa-var-glide-g: \f2a6;
+$fa-var-drupal: \f1a9;
+$fa-var-hire-a-helper: \f3b0;
+$fa-var-creative-commons-by: \f4e7;
+$fa-var-unity: \e049;
+$fa-var-whmcs: \f40d;
+$fa-var-rocketchat: \f3e8;
+$fa-var-vk: \f189;
+$fa-var-untappd: \f405;
+$fa-var-mailchimp: \f59e;
+$fa-var-css3-alt: \f38b;
+$fa-var-square-reddit: \f1a2;
+$fa-var-reddit-square: \f1a2;
+$fa-var-vimeo-v: \f27d;
+$fa-var-contao: \f26d;
+$fa-var-square-font-awesome: \e5ad;
+$fa-var-deskpro: \f38f;
+$fa-var-sistrix: \f3ee;
+$fa-var-square-instagram: \e055;
+$fa-var-instagram-square: \e055;
+$fa-var-battle-net: \f835;
+$fa-var-the-red-yeti: \f69d;
+$fa-var-square-hacker-news: \f3af;
+$fa-var-hacker-news-square: \f3af;
+$fa-var-edge: \f282;
+$fa-var-threads: \e618;
+$fa-var-napster: \f3d2;
+$fa-var-square-snapchat: \f2ad;
+$fa-var-snapchat-square: \f2ad;
+$fa-var-google-plus-g: \f0d5;
+$fa-var-artstation: \f77a;
+$fa-var-markdown: \f60f;
+$fa-var-sourcetree: \f7d3;
+$fa-var-google-plus: \f2b3;
+$fa-var-diaspora: \f791;
+$fa-var-foursquare: \f180;
+$fa-var-stack-overflow: \f16c;
+$fa-var-github-alt: \f113;
+$fa-var-phoenix-squadron: \f511;
+$fa-var-pagelines: \f18c;
+$fa-var-algolia: \f36c;
+$fa-var-red-river: \f3e3;
+$fa-var-creative-commons-sa: \f4ef;
+$fa-var-safari: \f267;
+$fa-var-google: \f1a0;
+$fa-var-square-font-awesome-stroke: \f35c;
+$fa-var-font-awesome-alt: \f35c;
+$fa-var-atlassian: \f77b;
+$fa-var-linkedin-in: \f0e1;
+$fa-var-digital-ocean: \f391;
+$fa-var-nimblr: \f5a8;
+$fa-var-chromecast: \f838;
+$fa-var-evernote: \f839;
+$fa-var-hacker-news: \f1d4;
+$fa-var-creative-commons-sampling: \f4f0;
+$fa-var-adversal: \f36a;
+$fa-var-creative-commons: \f25e;
+$fa-var-watchman-monitoring: \e087;
+$fa-var-fonticons: \f280;
+$fa-var-weixin: \f1d7;
+$fa-var-shirtsinbulk: \f214;
+$fa-var-codepen: \f1cb;
+$fa-var-git-alt: \f841;
+$fa-var-lyft: \f3c3;
+$fa-var-rev: \f5b2;
+$fa-var-windows: \f17a;
+$fa-var-wizards-of-the-coast: \f730;
+$fa-var-square-viadeo: \f2aa;
+$fa-var-viadeo-square: \f2aa;
+$fa-var-meetup: \f2e0;
+$fa-var-centos: \f789;
+$fa-var-adn: \f170;
+$fa-var-cloudsmith: \f384;
+$fa-var-pied-piper-alt: \f1a8;
+$fa-var-square-dribbble: \f397;
+$fa-var-dribbble-square: \f397;
+$fa-var-codiepie: \f284;
+$fa-var-node: \f419;
+$fa-var-mix: \f3cb;
+$fa-var-steam: \f1b6;
+$fa-var-cc-apple-pay: \f416;
+$fa-var-scribd: \f28a;
+$fa-var-debian: \e60b;
+$fa-var-openid: \f19b;
+$fa-var-instalod: \e081;
+$fa-var-expeditedssl: \f23e;
+$fa-var-sellcast: \f2da;
+$fa-var-square-twitter: \f081;
+$fa-var-twitter-square: \f081;
+$fa-var-r-project: \f4f7;
+$fa-var-delicious: \f1a5;
+$fa-var-freebsd: \f3a4;
+$fa-var-vuejs: \f41f;
+$fa-var-accusoft: \f369;
+$fa-var-ioxhost: \f208;
+$fa-var-fonticons-fi: \f3a2;
+$fa-var-app-store: \f36f;
+$fa-var-cc-mastercard: \f1f1;
+$fa-var-itunes-note: \f3b5;
+$fa-var-golang: \e40f;
+$fa-var-kickstarter: \f3bb;
+$fa-var-grav: \f2d6;
+$fa-var-weibo: \f18a;
+$fa-var-uncharted: \e084;
+$fa-var-firstdraft: \f3a1;
+$fa-var-square-youtube: \f431;
+$fa-var-youtube-square: \f431;
+$fa-var-wikipedia-w: \f266;
+$fa-var-wpressr: \f3e4;
+$fa-var-rendact: \f3e4;
+$fa-var-angellist: \f209;
+$fa-var-galactic-republic: \f50c;
+$fa-var-nfc-directional: \e530;
+$fa-var-skype: \f17e;
+$fa-var-joget: \f3b7;
+$fa-var-fedora: \f798;
+$fa-var-stripe-s: \f42a;
+$fa-var-meta: \e49b;
+$fa-var-laravel: \f3bd;
+$fa-var-hotjar: \f3b1;
+$fa-var-bluetooth-b: \f294;
+$fa-var-sticker-mule: \f3f7;
+$fa-var-creative-commons-zero: \f4f3;
+$fa-var-hips: \f452;
+$fa-var-behance: \f1b4;
+$fa-var-reddit: \f1a1;
+$fa-var-discord: \f392;
+$fa-var-chrome: \f268;
+$fa-var-app-store-ios: \f370;
+$fa-var-cc-discover: \f1f2;
+$fa-var-wpbeginner: \f297;
+$fa-var-confluence: \f78d;
+$fa-var-mdb: \f8ca;
+$fa-var-dochub: \f394;
+$fa-var-accessible-icon: \f368;
+$fa-var-ebay: \f4f4;
+$fa-var-amazon: \f270;
+$fa-var-unsplash: \e07c;
+$fa-var-yarn: \f7e3;
+$fa-var-square-steam: \f1b7;
+$fa-var-steam-square: \f1b7;
+$fa-var-500px: \f26e;
+$fa-var-square-vimeo: \f194;
+$fa-var-vimeo-square: \f194;
+$fa-var-asymmetrik: \f372;
+$fa-var-font-awesome: \f2b4;
+$fa-var-font-awesome-flag: \f2b4;
+$fa-var-font-awesome-logo-full: \f2b4;
+$fa-var-gratipay: \f184;
+$fa-var-apple: \f179;
+$fa-var-hive: \e07f;
+$fa-var-gitkraken: \f3a6;
+$fa-var-keybase: \f4f5;
+$fa-var-apple-pay: \f415;
+$fa-var-padlet: \e4a0;
+$fa-var-amazon-pay: \f42c;
+$fa-var-square-github: \f092;
+$fa-var-github-square: \f092;
+$fa-var-stumbleupon: \f1a4;
+$fa-var-fedex: \f797;
+$fa-var-phoenix-framework: \f3dc;
+$fa-var-shopify: \e057;
+$fa-var-neos: \f612;
+$fa-var-square-threads: \e619;
+$fa-var-hackerrank: \f5f7;
+$fa-var-researchgate: \f4f8;
+$fa-var-swift: \f8e1;
+$fa-var-angular: \f420;
+$fa-var-speakap: \f3f3;
+$fa-var-angrycreative: \f36e;
+$fa-var-y-combinator: \f23b;
+$fa-var-empire: \f1d1;
+$fa-var-envira: \f299;
+$fa-var-square-gitlab: \e5ae;
+$fa-var-gitlab-square: \e5ae;
+$fa-var-studiovinari: \f3f8;
+$fa-var-pied-piper: \f2ae;
+$fa-var-wordpress: \f19a;
+$fa-var-product-hunt: \f288;
+$fa-var-firefox: \f269;
+$fa-var-linode: \f2b8;
+$fa-var-goodreads: \f3a8;
+$fa-var-square-odnoklassniki: \f264;
+$fa-var-odnoklassniki-square: \f264;
+$fa-var-jsfiddle: \f1cc;
+$fa-var-sith: \f512;
+$fa-var-themeisle: \f2b2;
+$fa-var-page4: \f3d7;
+$fa-var-hashnode: \e499;
+$fa-var-react: \f41b;
+$fa-var-cc-paypal: \f1f4;
+$fa-var-squarespace: \f5be;
+$fa-var-cc-stripe: \f1f5;
+$fa-var-creative-commons-share: \f4f2;
+$fa-var-bitcoin: \f379;
+$fa-var-keycdn: \f3ba;
+$fa-var-opera: \f26a;
+$fa-var-itch-io: \f83a;
+$fa-var-umbraco: \f8e8;
+$fa-var-galactic-senate: \f50d;
+$fa-var-ubuntu: \f7df;
+$fa-var-draft2digital: \f396;
+$fa-var-stripe: \f429;
+$fa-var-houzz: \f27c;
+$fa-var-gg: \f260;
+$fa-var-dhl: \f790;
+$fa-var-square-pinterest: \f0d3;
+$fa-var-pinterest-square: \f0d3;
+$fa-var-xing: \f168;
+$fa-var-blackberry: \f37b;
+$fa-var-creative-commons-pd: \f4ec;
+$fa-var-playstation: \f3df;
+$fa-var-quinscape: \f459;
+$fa-var-less: \f41d;
+$fa-var-blogger-b: \f37d;
+$fa-var-opencart: \f23d;
+$fa-var-vine: \f1ca;
+$fa-var-paypal: \f1ed;
+$fa-var-gitlab: \f296;
+$fa-var-typo3: \f42b;
+$fa-var-reddit-alien: \f281;
+$fa-var-yahoo: \f19e;
+$fa-var-dailymotion: \e052;
+$fa-var-affiliatetheme: \f36b;
+$fa-var-pied-piper-pp: \f1a7;
+$fa-var-bootstrap: \f836;
+$fa-var-odnoklassniki: \f263;
+$fa-var-nfc-symbol: \e531;
+$fa-var-ethereum: \f42e;
+$fa-var-speaker-deck: \f83c;
+$fa-var-creative-commons-nc-eu: \f4e9;
+$fa-var-patreon: \f3d9;
+$fa-var-avianex: \f374;
+$fa-var-ello: \f5f1;
+$fa-var-gofore: \f3a7;
+$fa-var-bimobject: \f378;
+$fa-var-facebook-f: \f39e;
+$fa-var-square-google-plus: \f0d4;
+$fa-var-google-plus-square: \f0d4;
+$fa-var-mandalorian: \f50f;
+$fa-var-first-order-alt: \f50a;
+$fa-var-osi: \f41a;
+$fa-var-google-wallet: \f1ee;
+$fa-var-d-and-d-beyond: \f6ca;
+$fa-var-periscope: \f3da;
+$fa-var-fulcrum: \f50b;
+$fa-var-cloudscale: \f383;
+$fa-var-forumbee: \f211;
+$fa-var-mizuni: \f3cc;
+$fa-var-schlix: \f3ea;
+$fa-var-square-xing: \f169;
+$fa-var-xing-square: \f169;
+$fa-var-bandcamp: \f2d5;
+$fa-var-wpforms: \f298;
+$fa-var-cloudversify: \f385;
+$fa-var-usps: \f7e1;
+$fa-var-megaport: \f5a3;
+$fa-var-magento: \f3c4;
+$fa-var-spotify: \f1bc;
+$fa-var-optin-monster: \f23c;
+$fa-var-fly: \f417;
+$fa-var-aviato: \f421;
+$fa-var-itunes: \f3b4;
+$fa-var-cuttlefish: \f38c;
+$fa-var-blogger: \f37c;
+$fa-var-flickr: \f16e;
+$fa-var-viber: \f409;
+$fa-var-soundcloud: \f1be;
+$fa-var-digg: \f1a6;
+$fa-var-tencent-weibo: \f1d5;
+$fa-var-symfony: \f83d;
+$fa-var-maxcdn: \f136;
+$fa-var-etsy: \f2d7;
+$fa-var-facebook-messenger: \f39f;
+$fa-var-audible: \f373;
+$fa-var-think-peaks: \f731;
+$fa-var-bilibili: \e3d9;
+$fa-var-erlang: \f39d;
+$fa-var-x-twitter: \e61b;
+$fa-var-cotton-bureau: \f89e;
+$fa-var-dashcube: \f210;
+$fa-var-42-group: \e080;
+$fa-var-innosoft: \e080;
+$fa-var-stack-exchange: \f18d;
+$fa-var-elementor: \f430;
+$fa-var-square-pied-piper: \e01e;
+$fa-var-pied-piper-square: \e01e;
+$fa-var-creative-commons-nd: \f4eb;
+$fa-var-palfed: \f3d8;
+$fa-var-superpowers: \f2dd;
+$fa-var-resolving: \f3e7;
+$fa-var-xbox: \f412;
+$fa-var-searchengin: \f3eb;
+$fa-var-tiktok: \e07b;
+$fa-var-square-facebook: \f082;
+$fa-var-facebook-square: \f082;
+$fa-var-renren: \f18b;
+$fa-var-linux: \f17c;
+$fa-var-glide: \f2a5;
+$fa-var-linkedin: \f08c;
+$fa-var-hubspot: \f3b2;
+$fa-var-deploydog: \f38e;
+$fa-var-twitch: \f1e8;
+$fa-var-ravelry: \f2d9;
+$fa-var-mixer: \e056;
+$fa-var-square-lastfm: \f203;
+$fa-var-lastfm-square: \f203;
+$fa-var-vimeo: \f40a;
+$fa-var-mendeley: \f7b3;
+$fa-var-uniregistry: \f404;
+$fa-var-figma: \f799;
+$fa-var-creative-commons-remix: \f4ee;
+$fa-var-cc-amazon-pay: \f42d;
+$fa-var-dropbox: \f16b;
+$fa-var-instagram: \f16d;
+$fa-var-cmplid: \e360;
+$fa-var-facebook: \f09a;
+$fa-var-gripfire: \f3ac;
+$fa-var-jedi-order: \f50e;
+$fa-var-uikit: \f403;
+$fa-var-fort-awesome-alt: \f3a3;
+$fa-var-phabricator: \f3db;
+$fa-var-ussunnah: \f407;
+$fa-var-earlybirds: \f39a;
+$fa-var-trade-federation: \f513;
+$fa-var-autoprefixer: \f41c;
+$fa-var-whatsapp: \f232;
+$fa-var-slideshare: \f1e7;
+$fa-var-google-play: \f3ab;
+$fa-var-viadeo: \f2a9;
+$fa-var-line: \f3c0;
+$fa-var-google-drive: \f3aa;
+$fa-var-servicestack: \f3ec;
+$fa-var-simplybuilt: \f215;
+$fa-var-bitbucket: \f171;
+$fa-var-imdb: \f2d8;
+$fa-var-deezer: \e077;
+$fa-var-raspberry-pi: \f7bb;
+$fa-var-jira: \f7b1;
+$fa-var-docker: \f395;
+$fa-var-screenpal: \e570;
+$fa-var-bluetooth: \f293;
+$fa-var-gitter: \f426;
+$fa-var-d-and-d: \f38d;
+$fa-var-microblog: \e01a;
+$fa-var-cc-diners-club: \f24c;
+$fa-var-gg-circle: \f261;
+$fa-var-pied-piper-hat: \f4e5;
+$fa-var-kickstarter-k: \f3bc;
+$fa-var-yandex: \f413;
+$fa-var-readme: \f4d5;
+$fa-var-html5: \f13b;
+$fa-var-sellsy: \f213;
+$fa-var-sass: \f41e;
+$fa-var-wirsindhandwerk: \e2d0;
+$fa-var-wsh: \e2d0;
+$fa-var-buromobelexperte: \f37f;
+$fa-var-salesforce: \f83b;
+$fa-var-octopus-deploy: \e082;
+$fa-var-medapps: \f3c6;
+$fa-var-ns8: \f3d5;
+$fa-var-pinterest-p: \f231;
+$fa-var-apper: \f371;
+$fa-var-fort-awesome: \f286;
+$fa-var-waze: \f83f;
+$fa-var-cc-jcb: \f24b;
+$fa-var-snapchat: \f2ab;
+$fa-var-snapchat-ghost: \f2ab;
+$fa-var-fantasy-flight-games: \f6dc;
+$fa-var-rust: \e07a;
+$fa-var-wix: \f5cf;
+$fa-var-square-behance: \f1b5;
+$fa-var-behance-square: \f1b5;
+$fa-var-supple: \f3f9;
+$fa-var-rebel: \f1d0;
+$fa-var-css3: \f13c;
+$fa-var-staylinked: \f3f5;
+$fa-var-kaggle: \f5fa;
+$fa-var-space-awesome: \e5ac;
+$fa-var-deviantart: \f1bd;
+$fa-var-cpanel: \f388;
+$fa-var-goodreads-g: \f3a9;
+$fa-var-square-git: \f1d2;
+$fa-var-git-square: \f1d2;
+$fa-var-square-tumblr: \f174;
+$fa-var-tumblr-square: \f174;
+$fa-var-trello: \f181;
+$fa-var-creative-commons-nc-jp: \f4ea;
+$fa-var-get-pocket: \f265;
+$fa-var-perbyte: \e083;
+$fa-var-grunt: \f3ad;
+$fa-var-weebly: \f5cc;
+$fa-var-connectdevelop: \f20e;
+$fa-var-leanpub: \f212;
+$fa-var-black-tie: \f27e;
+$fa-var-themeco: \f5c6;
+$fa-var-python: \f3e2;
+$fa-var-android: \f17b;
+$fa-var-bots: \e340;
+$fa-var-free-code-camp: \f2c5;
+$fa-var-hornbill: \f592;
+$fa-var-js: \f3b8;
+$fa-var-ideal: \e013;
+$fa-var-git: \f1d3;
+$fa-var-dev: \f6cc;
+$fa-var-sketch: \f7c6;
+$fa-var-yandex-international: \f414;
+$fa-var-cc-amex: \f1f3;
+$fa-var-uber: \f402;
+$fa-var-github: \f09b;
+$fa-var-php: \f457;
+$fa-var-alipay: \f642;
+$fa-var-youtube: \f167;
+$fa-var-skyatlas: \f216;
+$fa-var-firefox-browser: \e007;
+$fa-var-replyd: \f3e6;
+$fa-var-suse: \f7d6;
+$fa-var-jenkins: \f3b6;
+$fa-var-twitter: \f099;
+$fa-var-rockrms: \f3e9;
+$fa-var-pinterest: \f0d2;
+$fa-var-buffer: \f837;
+$fa-var-npm: \f3d4;
+$fa-var-yammer: \f840;
+$fa-var-btc: \f15a;
+$fa-var-dribbble: \f17d;
+$fa-var-stumbleupon-circle: \f1a3;
+$fa-var-internet-explorer: \f26b;
+$fa-var-stubber: \e5c7;
+$fa-var-telegram: \f2c6;
+$fa-var-telegram-plane: \f2c6;
+$fa-var-old-republic: \f510;
+$fa-var-odysee: \e5c6;
+$fa-var-square-whatsapp: \f40c;
+$fa-var-whatsapp-square: \f40c;
+$fa-var-node-js: \f3d3;
+$fa-var-edge-legacy: \e078;
+$fa-var-slack: \f198;
+$fa-var-slack-hash: \f198;
+$fa-var-medrt: \f3c8;
+$fa-var-usb: \f287;
+$fa-var-tumblr: \f173;
+$fa-var-vaadin: \f408;
+$fa-var-quora: \f2c4;
+$fa-var-square-x-twitter: \e61a;
+$fa-var-reacteurope: \f75d;
+$fa-var-medium: \f23a;
+$fa-var-medium-m: \f23a;
+$fa-var-amilia: \f36d;
+$fa-var-mixcloud: \f289;
+$fa-var-flipboard: \f44d;
+$fa-var-viacoin: \f237;
+$fa-var-critical-role: \f6c9;
+$fa-var-sitrox: \e44a;
+$fa-var-discourse: \f393;
+$fa-var-joomla: \f1aa;
+$fa-var-mastodon: \f4f6;
+$fa-var-airbnb: \f834;
+$fa-var-wolf-pack-battalion: \f514;
+$fa-var-buy-n-large: \f8a6;
+$fa-var-gulp: \f3ae;
+$fa-var-creative-commons-sampling-plus: \f4f1;
+$fa-var-strava: \f428;
+$fa-var-ember: \f423;
+$fa-var-canadian-maple-leaf: \f785;
+$fa-var-teamspeak: \f4f9;
+$fa-var-pushed: \f3e1;
+$fa-var-wordpress-simple: \f411;
+$fa-var-nutritionix: \f3d6;
+$fa-var-wodu: \e088;
+$fa-var-google-pay: \e079;
+$fa-var-intercom: \f7af;
+$fa-var-zhihu: \f63f;
+$fa-var-korvue: \f42f;
+$fa-var-pix: \e43a;
+$fa-var-steam-symbol: \f3f6;
+
+$fa-icons: (
+ "0": $fa-var-0,
+ "1": $fa-var-1,
+ "2": $fa-var-2,
+ "3": $fa-var-3,
+ "4": $fa-var-4,
+ "5": $fa-var-5,
+ "6": $fa-var-6,
+ "7": $fa-var-7,
+ "8": $fa-var-8,
+ "9": $fa-var-9,
+ "fill-drip": $fa-var-fill-drip,
+ "arrows-to-circle": $fa-var-arrows-to-circle,
+ "circle-chevron-right": $fa-var-circle-chevron-right,
+ "chevron-circle-right": $fa-var-chevron-circle-right,
+ "at": $fa-var-at,
+ "trash-can": $fa-var-trash-can,
+ "trash-alt": $fa-var-trash-alt,
+ "text-height": $fa-var-text-height,
+ "user-xmark": $fa-var-user-xmark,
+ "user-times": $fa-var-user-times,
+ "stethoscope": $fa-var-stethoscope,
+ "message": $fa-var-message,
+ "comment-alt": $fa-var-comment-alt,
+ "info": $fa-var-info,
+ "down-left-and-up-right-to-center": $fa-var-down-left-and-up-right-to-center,
+ "compress-alt": $fa-var-compress-alt,
+ "explosion": $fa-var-explosion,
+ "file-lines": $fa-var-file-lines,
+ "file-alt": $fa-var-file-alt,
+ "file-text": $fa-var-file-text,
+ "wave-square": $fa-var-wave-square,
+ "ring": $fa-var-ring,
+ "building-un": $fa-var-building-un,
+ "dice-three": $fa-var-dice-three,
+ "calendar-days": $fa-var-calendar-days,
+ "calendar-alt": $fa-var-calendar-alt,
+ "anchor-circle-check": $fa-var-anchor-circle-check,
+ "building-circle-arrow-right": $fa-var-building-circle-arrow-right,
+ "volleyball": $fa-var-volleyball,
+ "volleyball-ball": $fa-var-volleyball-ball,
+ "arrows-up-to-line": $fa-var-arrows-up-to-line,
+ "sort-down": $fa-var-sort-down,
+ "sort-desc": $fa-var-sort-desc,
+ "circle-minus": $fa-var-circle-minus,
+ "minus-circle": $fa-var-minus-circle,
+ "door-open": $fa-var-door-open,
+ "right-from-bracket": $fa-var-right-from-bracket,
+ "sign-out-alt": $fa-var-sign-out-alt,
+ "atom": $fa-var-atom,
+ "soap": $fa-var-soap,
+ "icons": $fa-var-icons,
+ "heart-music-camera-bolt": $fa-var-heart-music-camera-bolt,
+ "microphone-lines-slash": $fa-var-microphone-lines-slash,
+ "microphone-alt-slash": $fa-var-microphone-alt-slash,
+ "bridge-circle-check": $fa-var-bridge-circle-check,
+ "pump-medical": $fa-var-pump-medical,
+ "fingerprint": $fa-var-fingerprint,
+ "hand-point-right": $fa-var-hand-point-right,
+ "magnifying-glass-location": $fa-var-magnifying-glass-location,
+ "search-location": $fa-var-search-location,
+ "forward-step": $fa-var-forward-step,
+ "step-forward": $fa-var-step-forward,
+ "face-smile-beam": $fa-var-face-smile-beam,
+ "smile-beam": $fa-var-smile-beam,
+ "flag-checkered": $fa-var-flag-checkered,
+ "football": $fa-var-football,
+ "football-ball": $fa-var-football-ball,
+ "school-circle-exclamation": $fa-var-school-circle-exclamation,
+ "crop": $fa-var-crop,
+ "angles-down": $fa-var-angles-down,
+ "angle-double-down": $fa-var-angle-double-down,
+ "users-rectangle": $fa-var-users-rectangle,
+ "people-roof": $fa-var-people-roof,
+ "people-line": $fa-var-people-line,
+ "beer-mug-empty": $fa-var-beer-mug-empty,
+ "beer": $fa-var-beer,
+ "diagram-predecessor": $fa-var-diagram-predecessor,
+ "arrow-up-long": $fa-var-arrow-up-long,
+ "long-arrow-up": $fa-var-long-arrow-up,
+ "fire-flame-simple": $fa-var-fire-flame-simple,
+ "burn": $fa-var-burn,
+ "person": $fa-var-person,
+ "male": $fa-var-male,
+ "laptop": $fa-var-laptop,
+ "file-csv": $fa-var-file-csv,
+ "menorah": $fa-var-menorah,
+ "truck-plane": $fa-var-truck-plane,
+ "record-vinyl": $fa-var-record-vinyl,
+ "face-grin-stars": $fa-var-face-grin-stars,
+ "grin-stars": $fa-var-grin-stars,
+ "bong": $fa-var-bong,
+ "spaghetti-monster-flying": $fa-var-spaghetti-monster-flying,
+ "pastafarianism": $fa-var-pastafarianism,
+ "arrow-down-up-across-line": $fa-var-arrow-down-up-across-line,
+ "spoon": $fa-var-spoon,
+ "utensil-spoon": $fa-var-utensil-spoon,
+ "jar-wheat": $fa-var-jar-wheat,
+ "envelopes-bulk": $fa-var-envelopes-bulk,
+ "mail-bulk": $fa-var-mail-bulk,
+ "file-circle-exclamation": $fa-var-file-circle-exclamation,
+ "circle-h": $fa-var-circle-h,
+ "hospital-symbol": $fa-var-hospital-symbol,
+ "pager": $fa-var-pager,
+ "address-book": $fa-var-address-book,
+ "contact-book": $fa-var-contact-book,
+ "strikethrough": $fa-var-strikethrough,
+ "k": $fa-var-k,
+ "landmark-flag": $fa-var-landmark-flag,
+ "pencil": $fa-var-pencil,
+ "pencil-alt": $fa-var-pencil-alt,
+ "backward": $fa-var-backward,
+ "caret-right": $fa-var-caret-right,
+ "comments": $fa-var-comments,
+ "paste": $fa-var-paste,
+ "file-clipboard": $fa-var-file-clipboard,
+ "code-pull-request": $fa-var-code-pull-request,
+ "clipboard-list": $fa-var-clipboard-list,
+ "truck-ramp-box": $fa-var-truck-ramp-box,
+ "truck-loading": $fa-var-truck-loading,
+ "user-check": $fa-var-user-check,
+ "vial-virus": $fa-var-vial-virus,
+ "sheet-plastic": $fa-var-sheet-plastic,
+ "blog": $fa-var-blog,
+ "user-ninja": $fa-var-user-ninja,
+ "person-arrow-up-from-line": $fa-var-person-arrow-up-from-line,
+ "scroll-torah": $fa-var-scroll-torah,
+ "torah": $fa-var-torah,
+ "broom-ball": $fa-var-broom-ball,
+ "quidditch": $fa-var-quidditch,
+ "quidditch-broom-ball": $fa-var-quidditch-broom-ball,
+ "toggle-off": $fa-var-toggle-off,
+ "box-archive": $fa-var-box-archive,
+ "archive": $fa-var-archive,
+ "person-drowning": $fa-var-person-drowning,
+ "arrow-down-9-1": $fa-var-arrow-down-9-1,
+ "sort-numeric-desc": $fa-var-sort-numeric-desc,
+ "sort-numeric-down-alt": $fa-var-sort-numeric-down-alt,
+ "face-grin-tongue-squint": $fa-var-face-grin-tongue-squint,
+ "grin-tongue-squint": $fa-var-grin-tongue-squint,
+ "spray-can": $fa-var-spray-can,
+ "truck-monster": $fa-var-truck-monster,
+ "w": $fa-var-w,
+ "earth-africa": $fa-var-earth-africa,
+ "globe-africa": $fa-var-globe-africa,
+ "rainbow": $fa-var-rainbow,
+ "circle-notch": $fa-var-circle-notch,
+ "tablet-screen-button": $fa-var-tablet-screen-button,
+ "tablet-alt": $fa-var-tablet-alt,
+ "paw": $fa-var-paw,
+ "cloud": $fa-var-cloud,
+ "trowel-bricks": $fa-var-trowel-bricks,
+ "face-flushed": $fa-var-face-flushed,
+ "flushed": $fa-var-flushed,
+ "hospital-user": $fa-var-hospital-user,
+ "tent-arrow-left-right": $fa-var-tent-arrow-left-right,
+ "gavel": $fa-var-gavel,
+ "legal": $fa-var-legal,
+ "binoculars": $fa-var-binoculars,
+ "microphone-slash": $fa-var-microphone-slash,
+ "box-tissue": $fa-var-box-tissue,
+ "motorcycle": $fa-var-motorcycle,
+ "bell-concierge": $fa-var-bell-concierge,
+ "concierge-bell": $fa-var-concierge-bell,
+ "pen-ruler": $fa-var-pen-ruler,
+ "pencil-ruler": $fa-var-pencil-ruler,
+ "people-arrows": $fa-var-people-arrows,
+ "people-arrows-left-right": $fa-var-people-arrows-left-right,
+ "mars-and-venus-burst": $fa-var-mars-and-venus-burst,
+ "square-caret-right": $fa-var-square-caret-right,
+ "caret-square-right": $fa-var-caret-square-right,
+ "scissors": $fa-var-scissors,
+ "cut": $fa-var-cut,
+ "sun-plant-wilt": $fa-var-sun-plant-wilt,
+ "toilets-portable": $fa-var-toilets-portable,
+ "hockey-puck": $fa-var-hockey-puck,
+ "table": $fa-var-table,
+ "magnifying-glass-arrow-right": $fa-var-magnifying-glass-arrow-right,
+ "tachograph-digital": $fa-var-tachograph-digital,
+ "digital-tachograph": $fa-var-digital-tachograph,
+ "users-slash": $fa-var-users-slash,
+ "clover": $fa-var-clover,
+ "reply": $fa-var-reply,
+ "mail-reply": $fa-var-mail-reply,
+ "star-and-crescent": $fa-var-star-and-crescent,
+ "house-fire": $fa-var-house-fire,
+ "square-minus": $fa-var-square-minus,
+ "minus-square": $fa-var-minus-square,
+ "helicopter": $fa-var-helicopter,
+ "compass": $fa-var-compass,
+ "square-caret-down": $fa-var-square-caret-down,
+ "caret-square-down": $fa-var-caret-square-down,
+ "file-circle-question": $fa-var-file-circle-question,
+ "laptop-code": $fa-var-laptop-code,
+ "swatchbook": $fa-var-swatchbook,
+ "prescription-bottle": $fa-var-prescription-bottle,
+ "bars": $fa-var-bars,
+ "navicon": $fa-var-navicon,
+ "people-group": $fa-var-people-group,
+ "hourglass-end": $fa-var-hourglass-end,
+ "hourglass-3": $fa-var-hourglass-3,
+ "heart-crack": $fa-var-heart-crack,
+ "heart-broken": $fa-var-heart-broken,
+ "square-up-right": $fa-var-square-up-right,
+ "external-link-square-alt": $fa-var-external-link-square-alt,
+ "face-kiss-beam": $fa-var-face-kiss-beam,
+ "kiss-beam": $fa-var-kiss-beam,
+ "film": $fa-var-film,
+ "ruler-horizontal": $fa-var-ruler-horizontal,
+ "people-robbery": $fa-var-people-robbery,
+ "lightbulb": $fa-var-lightbulb,
+ "caret-left": $fa-var-caret-left,
+ "circle-exclamation": $fa-var-circle-exclamation,
+ "exclamation-circle": $fa-var-exclamation-circle,
+ "school-circle-xmark": $fa-var-school-circle-xmark,
+ "arrow-right-from-bracket": $fa-var-arrow-right-from-bracket,
+ "sign-out": $fa-var-sign-out,
+ "circle-chevron-down": $fa-var-circle-chevron-down,
+ "chevron-circle-down": $fa-var-chevron-circle-down,
+ "unlock-keyhole": $fa-var-unlock-keyhole,
+ "unlock-alt": $fa-var-unlock-alt,
+ "cloud-showers-heavy": $fa-var-cloud-showers-heavy,
+ "headphones-simple": $fa-var-headphones-simple,
+ "headphones-alt": $fa-var-headphones-alt,
+ "sitemap": $fa-var-sitemap,
+ "circle-dollar-to-slot": $fa-var-circle-dollar-to-slot,
+ "donate": $fa-var-donate,
+ "memory": $fa-var-memory,
+ "road-spikes": $fa-var-road-spikes,
+ "fire-burner": $fa-var-fire-burner,
+ "flag": $fa-var-flag,
+ "hanukiah": $fa-var-hanukiah,
+ "feather": $fa-var-feather,
+ "volume-low": $fa-var-volume-low,
+ "volume-down": $fa-var-volume-down,
+ "comment-slash": $fa-var-comment-slash,
+ "cloud-sun-rain": $fa-var-cloud-sun-rain,
+ "compress": $fa-var-compress,
+ "wheat-awn": $fa-var-wheat-awn,
+ "wheat-alt": $fa-var-wheat-alt,
+ "ankh": $fa-var-ankh,
+ "hands-holding-child": $fa-var-hands-holding-child,
+ "asterisk": $fa-var-asterisk,
+ "square-check": $fa-var-square-check,
+ "check-square": $fa-var-check-square,
+ "peseta-sign": $fa-var-peseta-sign,
+ "heading": $fa-var-heading,
+ "header": $fa-var-header,
+ "ghost": $fa-var-ghost,
+ "list": $fa-var-list,
+ "list-squares": $fa-var-list-squares,
+ "square-phone-flip": $fa-var-square-phone-flip,
+ "phone-square-alt": $fa-var-phone-square-alt,
+ "cart-plus": $fa-var-cart-plus,
+ "gamepad": $fa-var-gamepad,
+ "circle-dot": $fa-var-circle-dot,
+ "dot-circle": $fa-var-dot-circle,
+ "face-dizzy": $fa-var-face-dizzy,
+ "dizzy": $fa-var-dizzy,
+ "egg": $fa-var-egg,
+ "house-medical-circle-xmark": $fa-var-house-medical-circle-xmark,
+ "campground": $fa-var-campground,
+ "folder-plus": $fa-var-folder-plus,
+ "futbol": $fa-var-futbol,
+ "futbol-ball": $fa-var-futbol-ball,
+ "soccer-ball": $fa-var-soccer-ball,
+ "paintbrush": $fa-var-paintbrush,
+ "paint-brush": $fa-var-paint-brush,
+ "lock": $fa-var-lock,
+ "gas-pump": $fa-var-gas-pump,
+ "hot-tub-person": $fa-var-hot-tub-person,
+ "hot-tub": $fa-var-hot-tub,
+ "map-location": $fa-var-map-location,
+ "map-marked": $fa-var-map-marked,
+ "house-flood-water": $fa-var-house-flood-water,
+ "tree": $fa-var-tree,
+ "bridge-lock": $fa-var-bridge-lock,
+ "sack-dollar": $fa-var-sack-dollar,
+ "pen-to-square": $fa-var-pen-to-square,
+ "edit": $fa-var-edit,
+ "car-side": $fa-var-car-side,
+ "share-nodes": $fa-var-share-nodes,
+ "share-alt": $fa-var-share-alt,
+ "heart-circle-minus": $fa-var-heart-circle-minus,
+ "hourglass-half": $fa-var-hourglass-half,
+ "hourglass-2": $fa-var-hourglass-2,
+ "microscope": $fa-var-microscope,
+ "sink": $fa-var-sink,
+ "bag-shopping": $fa-var-bag-shopping,
+ "shopping-bag": $fa-var-shopping-bag,
+ "arrow-down-z-a": $fa-var-arrow-down-z-a,
+ "sort-alpha-desc": $fa-var-sort-alpha-desc,
+ "sort-alpha-down-alt": $fa-var-sort-alpha-down-alt,
+ "mitten": $fa-var-mitten,
+ "person-rays": $fa-var-person-rays,
+ "users": $fa-var-users,
+ "eye-slash": $fa-var-eye-slash,
+ "flask-vial": $fa-var-flask-vial,
+ "hand": $fa-var-hand,
+ "hand-paper": $fa-var-hand-paper,
+ "om": $fa-var-om,
+ "worm": $fa-var-worm,
+ "house-circle-xmark": $fa-var-house-circle-xmark,
+ "plug": $fa-var-plug,
+ "chevron-up": $fa-var-chevron-up,
+ "hand-spock": $fa-var-hand-spock,
+ "stopwatch": $fa-var-stopwatch,
+ "face-kiss": $fa-var-face-kiss,
+ "kiss": $fa-var-kiss,
+ "bridge-circle-xmark": $fa-var-bridge-circle-xmark,
+ "face-grin-tongue": $fa-var-face-grin-tongue,
+ "grin-tongue": $fa-var-grin-tongue,
+ "chess-bishop": $fa-var-chess-bishop,
+ "face-grin-wink": $fa-var-face-grin-wink,
+ "grin-wink": $fa-var-grin-wink,
+ "ear-deaf": $fa-var-ear-deaf,
+ "deaf": $fa-var-deaf,
+ "deafness": $fa-var-deafness,
+ "hard-of-hearing": $fa-var-hard-of-hearing,
+ "road-circle-check": $fa-var-road-circle-check,
+ "dice-five": $fa-var-dice-five,
+ "square-rss": $fa-var-square-rss,
+ "rss-square": $fa-var-rss-square,
+ "land-mine-on": $fa-var-land-mine-on,
+ "i-cursor": $fa-var-i-cursor,
+ "stamp": $fa-var-stamp,
+ "stairs": $fa-var-stairs,
+ "i": $fa-var-i,
+ "hryvnia-sign": $fa-var-hryvnia-sign,
+ "hryvnia": $fa-var-hryvnia,
+ "pills": $fa-var-pills,
+ "face-grin-wide": $fa-var-face-grin-wide,
+ "grin-alt": $fa-var-grin-alt,
+ "tooth": $fa-var-tooth,
+ "v": $fa-var-v,
+ "bangladeshi-taka-sign": $fa-var-bangladeshi-taka-sign,
+ "bicycle": $fa-var-bicycle,
+ "staff-snake": $fa-var-staff-snake,
+ "rod-asclepius": $fa-var-rod-asclepius,
+ "rod-snake": $fa-var-rod-snake,
+ "staff-aesculapius": $fa-var-staff-aesculapius,
+ "head-side-cough-slash": $fa-var-head-side-cough-slash,
+ "truck-medical": $fa-var-truck-medical,
+ "ambulance": $fa-var-ambulance,
+ "wheat-awn-circle-exclamation": $fa-var-wheat-awn-circle-exclamation,
+ "snowman": $fa-var-snowman,
+ "mortar-pestle": $fa-var-mortar-pestle,
+ "road-barrier": $fa-var-road-barrier,
+ "school": $fa-var-school,
+ "igloo": $fa-var-igloo,
+ "joint": $fa-var-joint,
+ "angle-right": $fa-var-angle-right,
+ "horse": $fa-var-horse,
+ "q": $fa-var-q,
+ "g": $fa-var-g,
+ "notes-medical": $fa-var-notes-medical,
+ "temperature-half": $fa-var-temperature-half,
+ "temperature-2": $fa-var-temperature-2,
+ "thermometer-2": $fa-var-thermometer-2,
+ "thermometer-half": $fa-var-thermometer-half,
+ "dong-sign": $fa-var-dong-sign,
+ "capsules": $fa-var-capsules,
+ "poo-storm": $fa-var-poo-storm,
+ "poo-bolt": $fa-var-poo-bolt,
+ "face-frown-open": $fa-var-face-frown-open,
+ "frown-open": $fa-var-frown-open,
+ "hand-point-up": $fa-var-hand-point-up,
+ "money-bill": $fa-var-money-bill,
+ "bookmark": $fa-var-bookmark,
+ "align-justify": $fa-var-align-justify,
+ "umbrella-beach": $fa-var-umbrella-beach,
+ "helmet-un": $fa-var-helmet-un,
+ "bullseye": $fa-var-bullseye,
+ "bacon": $fa-var-bacon,
+ "hand-point-down": $fa-var-hand-point-down,
+ "arrow-up-from-bracket": $fa-var-arrow-up-from-bracket,
+ "folder": $fa-var-folder,
+ "folder-blank": $fa-var-folder-blank,
+ "file-waveform": $fa-var-file-waveform,
+ "file-medical-alt": $fa-var-file-medical-alt,
+ "radiation": $fa-var-radiation,
+ "chart-simple": $fa-var-chart-simple,
+ "mars-stroke": $fa-var-mars-stroke,
+ "vial": $fa-var-vial,
+ "gauge": $fa-var-gauge,
+ "dashboard": $fa-var-dashboard,
+ "gauge-med": $fa-var-gauge-med,
+ "tachometer-alt-average": $fa-var-tachometer-alt-average,
+ "wand-magic-sparkles": $fa-var-wand-magic-sparkles,
+ "magic-wand-sparkles": $fa-var-magic-wand-sparkles,
+ "e": $fa-var-e,
+ "pen-clip": $fa-var-pen-clip,
+ "pen-alt": $fa-var-pen-alt,
+ "bridge-circle-exclamation": $fa-var-bridge-circle-exclamation,
+ "user": $fa-var-user,
+ "school-circle-check": $fa-var-school-circle-check,
+ "dumpster": $fa-var-dumpster,
+ "van-shuttle": $fa-var-van-shuttle,
+ "shuttle-van": $fa-var-shuttle-van,
+ "building-user": $fa-var-building-user,
+ "square-caret-left": $fa-var-square-caret-left,
+ "caret-square-left": $fa-var-caret-square-left,
+ "highlighter": $fa-var-highlighter,
+ "key": $fa-var-key,
+ "bullhorn": $fa-var-bullhorn,
+ "globe": $fa-var-globe,
+ "synagogue": $fa-var-synagogue,
+ "person-half-dress": $fa-var-person-half-dress,
+ "road-bridge": $fa-var-road-bridge,
+ "location-arrow": $fa-var-location-arrow,
+ "c": $fa-var-c,
+ "tablet-button": $fa-var-tablet-button,
+ "building-lock": $fa-var-building-lock,
+ "pizza-slice": $fa-var-pizza-slice,
+ "money-bill-wave": $fa-var-money-bill-wave,
+ "chart-area": $fa-var-chart-area,
+ "area-chart": $fa-var-area-chart,
+ "house-flag": $fa-var-house-flag,
+ "person-circle-minus": $fa-var-person-circle-minus,
+ "ban": $fa-var-ban,
+ "cancel": $fa-var-cancel,
+ "camera-rotate": $fa-var-camera-rotate,
+ "spray-can-sparkles": $fa-var-spray-can-sparkles,
+ "air-freshener": $fa-var-air-freshener,
+ "star": $fa-var-star,
+ "repeat": $fa-var-repeat,
+ "cross": $fa-var-cross,
+ "box": $fa-var-box,
+ "venus-mars": $fa-var-venus-mars,
+ "arrow-pointer": $fa-var-arrow-pointer,
+ "mouse-pointer": $fa-var-mouse-pointer,
+ "maximize": $fa-var-maximize,
+ "expand-arrows-alt": $fa-var-expand-arrows-alt,
+ "charging-station": $fa-var-charging-station,
+ "shapes": $fa-var-shapes,
+ "triangle-circle-square": $fa-var-triangle-circle-square,
+ "shuffle": $fa-var-shuffle,
+ "random": $fa-var-random,
+ "person-running": $fa-var-person-running,
+ "running": $fa-var-running,
+ "mobile-retro": $fa-var-mobile-retro,
+ "grip-lines-vertical": $fa-var-grip-lines-vertical,
+ "spider": $fa-var-spider,
+ "hands-bound": $fa-var-hands-bound,
+ "file-invoice-dollar": $fa-var-file-invoice-dollar,
+ "plane-circle-exclamation": $fa-var-plane-circle-exclamation,
+ "x-ray": $fa-var-x-ray,
+ "spell-check": $fa-var-spell-check,
+ "slash": $fa-var-slash,
+ "computer-mouse": $fa-var-computer-mouse,
+ "mouse": $fa-var-mouse,
+ "arrow-right-to-bracket": $fa-var-arrow-right-to-bracket,
+ "sign-in": $fa-var-sign-in,
+ "shop-slash": $fa-var-shop-slash,
+ "store-alt-slash": $fa-var-store-alt-slash,
+ "server": $fa-var-server,
+ "virus-covid-slash": $fa-var-virus-covid-slash,
+ "shop-lock": $fa-var-shop-lock,
+ "hourglass-start": $fa-var-hourglass-start,
+ "hourglass-1": $fa-var-hourglass-1,
+ "blender-phone": $fa-var-blender-phone,
+ "building-wheat": $fa-var-building-wheat,
+ "person-breastfeeding": $fa-var-person-breastfeeding,
+ "right-to-bracket": $fa-var-right-to-bracket,
+ "sign-in-alt": $fa-var-sign-in-alt,
+ "venus": $fa-var-venus,
+ "passport": $fa-var-passport,
+ "heart-pulse": $fa-var-heart-pulse,
+ "heartbeat": $fa-var-heartbeat,
+ "people-carry-box": $fa-var-people-carry-box,
+ "people-carry": $fa-var-people-carry,
+ "temperature-high": $fa-var-temperature-high,
+ "microchip": $fa-var-microchip,
+ "crown": $fa-var-crown,
+ "weight-hanging": $fa-var-weight-hanging,
+ "xmarks-lines": $fa-var-xmarks-lines,
+ "file-prescription": $fa-var-file-prescription,
+ "weight-scale": $fa-var-weight-scale,
+ "weight": $fa-var-weight,
+ "user-group": $fa-var-user-group,
+ "user-friends": $fa-var-user-friends,
+ "arrow-up-a-z": $fa-var-arrow-up-a-z,
+ "sort-alpha-up": $fa-var-sort-alpha-up,
+ "chess-knight": $fa-var-chess-knight,
+ "face-laugh-squint": $fa-var-face-laugh-squint,
+ "laugh-squint": $fa-var-laugh-squint,
+ "wheelchair": $fa-var-wheelchair,
+ "circle-arrow-up": $fa-var-circle-arrow-up,
+ "arrow-circle-up": $fa-var-arrow-circle-up,
+ "toggle-on": $fa-var-toggle-on,
+ "person-walking": $fa-var-person-walking,
+ "walking": $fa-var-walking,
+ "l": $fa-var-l,
+ "fire": $fa-var-fire,
+ "bed-pulse": $fa-var-bed-pulse,
+ "procedures": $fa-var-procedures,
+ "shuttle-space": $fa-var-shuttle-space,
+ "space-shuttle": $fa-var-space-shuttle,
+ "face-laugh": $fa-var-face-laugh,
+ "laugh": $fa-var-laugh,
+ "folder-open": $fa-var-folder-open,
+ "heart-circle-plus": $fa-var-heart-circle-plus,
+ "code-fork": $fa-var-code-fork,
+ "city": $fa-var-city,
+ "microphone-lines": $fa-var-microphone-lines,
+ "microphone-alt": $fa-var-microphone-alt,
+ "pepper-hot": $fa-var-pepper-hot,
+ "unlock": $fa-var-unlock,
+ "colon-sign": $fa-var-colon-sign,
+ "headset": $fa-var-headset,
+ "store-slash": $fa-var-store-slash,
+ "road-circle-xmark": $fa-var-road-circle-xmark,
+ "user-minus": $fa-var-user-minus,
+ "mars-stroke-up": $fa-var-mars-stroke-up,
+ "mars-stroke-v": $fa-var-mars-stroke-v,
+ "champagne-glasses": $fa-var-champagne-glasses,
+ "glass-cheers": $fa-var-glass-cheers,
+ "clipboard": $fa-var-clipboard,
+ "house-circle-exclamation": $fa-var-house-circle-exclamation,
+ "file-arrow-up": $fa-var-file-arrow-up,
+ "file-upload": $fa-var-file-upload,
+ "wifi": $fa-var-wifi,
+ "wifi-3": $fa-var-wifi-3,
+ "wifi-strong": $fa-var-wifi-strong,
+ "bath": $fa-var-bath,
+ "bathtub": $fa-var-bathtub,
+ "underline": $fa-var-underline,
+ "user-pen": $fa-var-user-pen,
+ "user-edit": $fa-var-user-edit,
+ "signature": $fa-var-signature,
+ "stroopwafel": $fa-var-stroopwafel,
+ "bold": $fa-var-bold,
+ "anchor-lock": $fa-var-anchor-lock,
+ "building-ngo": $fa-var-building-ngo,
+ "manat-sign": $fa-var-manat-sign,
+ "not-equal": $fa-var-not-equal,
+ "border-top-left": $fa-var-border-top-left,
+ "border-style": $fa-var-border-style,
+ "map-location-dot": $fa-var-map-location-dot,
+ "map-marked-alt": $fa-var-map-marked-alt,
+ "jedi": $fa-var-jedi,
+ "square-poll-vertical": $fa-var-square-poll-vertical,
+ "poll": $fa-var-poll,
+ "mug-hot": $fa-var-mug-hot,
+ "car-battery": $fa-var-car-battery,
+ "battery-car": $fa-var-battery-car,
+ "gift": $fa-var-gift,
+ "dice-two": $fa-var-dice-two,
+ "chess-queen": $fa-var-chess-queen,
+ "glasses": $fa-var-glasses,
+ "chess-board": $fa-var-chess-board,
+ "building-circle-check": $fa-var-building-circle-check,
+ "person-chalkboard": $fa-var-person-chalkboard,
+ "mars-stroke-right": $fa-var-mars-stroke-right,
+ "mars-stroke-h": $fa-var-mars-stroke-h,
+ "hand-back-fist": $fa-var-hand-back-fist,
+ "hand-rock": $fa-var-hand-rock,
+ "square-caret-up": $fa-var-square-caret-up,
+ "caret-square-up": $fa-var-caret-square-up,
+ "cloud-showers-water": $fa-var-cloud-showers-water,
+ "chart-bar": $fa-var-chart-bar,
+ "bar-chart": $fa-var-bar-chart,
+ "hands-bubbles": $fa-var-hands-bubbles,
+ "hands-wash": $fa-var-hands-wash,
+ "less-than-equal": $fa-var-less-than-equal,
+ "train": $fa-var-train,
+ "eye-low-vision": $fa-var-eye-low-vision,
+ "low-vision": $fa-var-low-vision,
+ "crow": $fa-var-crow,
+ "sailboat": $fa-var-sailboat,
+ "window-restore": $fa-var-window-restore,
+ "square-plus": $fa-var-square-plus,
+ "plus-square": $fa-var-plus-square,
+ "torii-gate": $fa-var-torii-gate,
+ "frog": $fa-var-frog,
+ "bucket": $fa-var-bucket,
+ "image": $fa-var-image,
+ "microphone": $fa-var-microphone,
+ "cow": $fa-var-cow,
+ "caret-up": $fa-var-caret-up,
+ "screwdriver": $fa-var-screwdriver,
+ "folder-closed": $fa-var-folder-closed,
+ "house-tsunami": $fa-var-house-tsunami,
+ "square-nfi": $fa-var-square-nfi,
+ "arrow-up-from-ground-water": $fa-var-arrow-up-from-ground-water,
+ "martini-glass": $fa-var-martini-glass,
+ "glass-martini-alt": $fa-var-glass-martini-alt,
+ "rotate-left": $fa-var-rotate-left,
+ "rotate-back": $fa-var-rotate-back,
+ "rotate-backward": $fa-var-rotate-backward,
+ "undo-alt": $fa-var-undo-alt,
+ "table-columns": $fa-var-table-columns,
+ "columns": $fa-var-columns,
+ "lemon": $fa-var-lemon,
+ "head-side-mask": $fa-var-head-side-mask,
+ "handshake": $fa-var-handshake,
+ "gem": $fa-var-gem,
+ "dolly": $fa-var-dolly,
+ "dolly-box": $fa-var-dolly-box,
+ "smoking": $fa-var-smoking,
+ "minimize": $fa-var-minimize,
+ "compress-arrows-alt": $fa-var-compress-arrows-alt,
+ "monument": $fa-var-monument,
+ "snowplow": $fa-var-snowplow,
+ "angles-right": $fa-var-angles-right,
+ "angle-double-right": $fa-var-angle-double-right,
+ "cannabis": $fa-var-cannabis,
+ "circle-play": $fa-var-circle-play,
+ "play-circle": $fa-var-play-circle,
+ "tablets": $fa-var-tablets,
+ "ethernet": $fa-var-ethernet,
+ "euro-sign": $fa-var-euro-sign,
+ "eur": $fa-var-eur,
+ "euro": $fa-var-euro,
+ "chair": $fa-var-chair,
+ "circle-check": $fa-var-circle-check,
+ "check-circle": $fa-var-check-circle,
+ "circle-stop": $fa-var-circle-stop,
+ "stop-circle": $fa-var-stop-circle,
+ "compass-drafting": $fa-var-compass-drafting,
+ "drafting-compass": $fa-var-drafting-compass,
+ "plate-wheat": $fa-var-plate-wheat,
+ "icicles": $fa-var-icicles,
+ "person-shelter": $fa-var-person-shelter,
+ "neuter": $fa-var-neuter,
+ "id-badge": $fa-var-id-badge,
+ "marker": $fa-var-marker,
+ "face-laugh-beam": $fa-var-face-laugh-beam,
+ "laugh-beam": $fa-var-laugh-beam,
+ "helicopter-symbol": $fa-var-helicopter-symbol,
+ "universal-access": $fa-var-universal-access,
+ "circle-chevron-up": $fa-var-circle-chevron-up,
+ "chevron-circle-up": $fa-var-chevron-circle-up,
+ "lari-sign": $fa-var-lari-sign,
+ "volcano": $fa-var-volcano,
+ "person-walking-dashed-line-arrow-right": $fa-var-person-walking-dashed-line-arrow-right,
+ "sterling-sign": $fa-var-sterling-sign,
+ "gbp": $fa-var-gbp,
+ "pound-sign": $fa-var-pound-sign,
+ "viruses": $fa-var-viruses,
+ "square-person-confined": $fa-var-square-person-confined,
+ "user-tie": $fa-var-user-tie,
+ "arrow-down-long": $fa-var-arrow-down-long,
+ "long-arrow-down": $fa-var-long-arrow-down,
+ "tent-arrow-down-to-line": $fa-var-tent-arrow-down-to-line,
+ "certificate": $fa-var-certificate,
+ "reply-all": $fa-var-reply-all,
+ "mail-reply-all": $fa-var-mail-reply-all,
+ "suitcase": $fa-var-suitcase,
+ "person-skating": $fa-var-person-skating,
+ "skating": $fa-var-skating,
+ "filter-circle-dollar": $fa-var-filter-circle-dollar,
+ "funnel-dollar": $fa-var-funnel-dollar,
+ "camera-retro": $fa-var-camera-retro,
+ "circle-arrow-down": $fa-var-circle-arrow-down,
+ "arrow-circle-down": $fa-var-arrow-circle-down,
+ "file-import": $fa-var-file-import,
+ "arrow-right-to-file": $fa-var-arrow-right-to-file,
+ "square-arrow-up-right": $fa-var-square-arrow-up-right,
+ "external-link-square": $fa-var-external-link-square,
+ "box-open": $fa-var-box-open,
+ "scroll": $fa-var-scroll,
+ "spa": $fa-var-spa,
+ "location-pin-lock": $fa-var-location-pin-lock,
+ "pause": $fa-var-pause,
+ "hill-avalanche": $fa-var-hill-avalanche,
+ "temperature-empty": $fa-var-temperature-empty,
+ "temperature-0": $fa-var-temperature-0,
+ "thermometer-0": $fa-var-thermometer-0,
+ "thermometer-empty": $fa-var-thermometer-empty,
+ "bomb": $fa-var-bomb,
+ "registered": $fa-var-registered,
+ "address-card": $fa-var-address-card,
+ "contact-card": $fa-var-contact-card,
+ "vcard": $fa-var-vcard,
+ "scale-unbalanced-flip": $fa-var-scale-unbalanced-flip,
+ "balance-scale-right": $fa-var-balance-scale-right,
+ "subscript": $fa-var-subscript,
+ "diamond-turn-right": $fa-var-diamond-turn-right,
+ "directions": $fa-var-directions,
+ "burst": $fa-var-burst,
+ "house-laptop": $fa-var-house-laptop,
+ "laptop-house": $fa-var-laptop-house,
+ "face-tired": $fa-var-face-tired,
+ "tired": $fa-var-tired,
+ "money-bills": $fa-var-money-bills,
+ "smog": $fa-var-smog,
+ "crutch": $fa-var-crutch,
+ "cloud-arrow-up": $fa-var-cloud-arrow-up,
+ "cloud-upload": $fa-var-cloud-upload,
+ "cloud-upload-alt": $fa-var-cloud-upload-alt,
+ "palette": $fa-var-palette,
+ "arrows-turn-right": $fa-var-arrows-turn-right,
+ "vest": $fa-var-vest,
+ "ferry": $fa-var-ferry,
+ "arrows-down-to-people": $fa-var-arrows-down-to-people,
+ "seedling": $fa-var-seedling,
+ "sprout": $fa-var-sprout,
+ "left-right": $fa-var-left-right,
+ "arrows-alt-h": $fa-var-arrows-alt-h,
+ "boxes-packing": $fa-var-boxes-packing,
+ "circle-arrow-left": $fa-var-circle-arrow-left,
+ "arrow-circle-left": $fa-var-arrow-circle-left,
+ "group-arrows-rotate": $fa-var-group-arrows-rotate,
+ "bowl-food": $fa-var-bowl-food,
+ "candy-cane": $fa-var-candy-cane,
+ "arrow-down-wide-short": $fa-var-arrow-down-wide-short,
+ "sort-amount-asc": $fa-var-sort-amount-asc,
+ "sort-amount-down": $fa-var-sort-amount-down,
+ "cloud-bolt": $fa-var-cloud-bolt,
+ "thunderstorm": $fa-var-thunderstorm,
+ "text-slash": $fa-var-text-slash,
+ "remove-format": $fa-var-remove-format,
+ "face-smile-wink": $fa-var-face-smile-wink,
+ "smile-wink": $fa-var-smile-wink,
+ "file-word": $fa-var-file-word,
+ "file-powerpoint": $fa-var-file-powerpoint,
+ "arrows-left-right": $fa-var-arrows-left-right,
+ "arrows-h": $fa-var-arrows-h,
+ "house-lock": $fa-var-house-lock,
+ "cloud-arrow-down": $fa-var-cloud-arrow-down,
+ "cloud-download": $fa-var-cloud-download,
+ "cloud-download-alt": $fa-var-cloud-download-alt,
+ "children": $fa-var-children,
+ "chalkboard": $fa-var-chalkboard,
+ "blackboard": $fa-var-blackboard,
+ "user-large-slash": $fa-var-user-large-slash,
+ "user-alt-slash": $fa-var-user-alt-slash,
+ "envelope-open": $fa-var-envelope-open,
+ "handshake-simple-slash": $fa-var-handshake-simple-slash,
+ "handshake-alt-slash": $fa-var-handshake-alt-slash,
+ "mattress-pillow": $fa-var-mattress-pillow,
+ "guarani-sign": $fa-var-guarani-sign,
+ "arrows-rotate": $fa-var-arrows-rotate,
+ "refresh": $fa-var-refresh,
+ "sync": $fa-var-sync,
+ "fire-extinguisher": $fa-var-fire-extinguisher,
+ "cruzeiro-sign": $fa-var-cruzeiro-sign,
+ "greater-than-equal": $fa-var-greater-than-equal,
+ "shield-halved": $fa-var-shield-halved,
+ "shield-alt": $fa-var-shield-alt,
+ "book-atlas": $fa-var-book-atlas,
+ "atlas": $fa-var-atlas,
+ "virus": $fa-var-virus,
+ "envelope-circle-check": $fa-var-envelope-circle-check,
+ "layer-group": $fa-var-layer-group,
+ "arrows-to-dot": $fa-var-arrows-to-dot,
+ "archway": $fa-var-archway,
+ "heart-circle-check": $fa-var-heart-circle-check,
+ "house-chimney-crack": $fa-var-house-chimney-crack,
+ "house-damage": $fa-var-house-damage,
+ "file-zipper": $fa-var-file-zipper,
+ "file-archive": $fa-var-file-archive,
+ "square": $fa-var-square,
+ "martini-glass-empty": $fa-var-martini-glass-empty,
+ "glass-martini": $fa-var-glass-martini,
+ "couch": $fa-var-couch,
+ "cedi-sign": $fa-var-cedi-sign,
+ "italic": $fa-var-italic,
+ "church": $fa-var-church,
+ "comments-dollar": $fa-var-comments-dollar,
+ "democrat": $fa-var-democrat,
+ "z": $fa-var-z,
+ "person-skiing": $fa-var-person-skiing,
+ "skiing": $fa-var-skiing,
+ "road-lock": $fa-var-road-lock,
+ "a": $fa-var-a,
+ "temperature-arrow-down": $fa-var-temperature-arrow-down,
+ "temperature-down": $fa-var-temperature-down,
+ "feather-pointed": $fa-var-feather-pointed,
+ "feather-alt": $fa-var-feather-alt,
+ "p": $fa-var-p,
+ "snowflake": $fa-var-snowflake,
+ "newspaper": $fa-var-newspaper,
+ "rectangle-ad": $fa-var-rectangle-ad,
+ "ad": $fa-var-ad,
+ "circle-arrow-right": $fa-var-circle-arrow-right,
+ "arrow-circle-right": $fa-var-arrow-circle-right,
+ "filter-circle-xmark": $fa-var-filter-circle-xmark,
+ "locust": $fa-var-locust,
+ "sort": $fa-var-sort,
+ "unsorted": $fa-var-unsorted,
+ "list-ol": $fa-var-list-ol,
+ "list-1-2": $fa-var-list-1-2,
+ "list-numeric": $fa-var-list-numeric,
+ "person-dress-burst": $fa-var-person-dress-burst,
+ "money-check-dollar": $fa-var-money-check-dollar,
+ "money-check-alt": $fa-var-money-check-alt,
+ "vector-square": $fa-var-vector-square,
+ "bread-slice": $fa-var-bread-slice,
+ "language": $fa-var-language,
+ "face-kiss-wink-heart": $fa-var-face-kiss-wink-heart,
+ "kiss-wink-heart": $fa-var-kiss-wink-heart,
+ "filter": $fa-var-filter,
+ "question": $fa-var-question,
+ "file-signature": $fa-var-file-signature,
+ "up-down-left-right": $fa-var-up-down-left-right,
+ "arrows-alt": $fa-var-arrows-alt,
+ "house-chimney-user": $fa-var-house-chimney-user,
+ "hand-holding-heart": $fa-var-hand-holding-heart,
+ "puzzle-piece": $fa-var-puzzle-piece,
+ "money-check": $fa-var-money-check,
+ "star-half-stroke": $fa-var-star-half-stroke,
+ "star-half-alt": $fa-var-star-half-alt,
+ "code": $fa-var-code,
+ "whiskey-glass": $fa-var-whiskey-glass,
+ "glass-whiskey": $fa-var-glass-whiskey,
+ "building-circle-exclamation": $fa-var-building-circle-exclamation,
+ "magnifying-glass-chart": $fa-var-magnifying-glass-chart,
+ "arrow-up-right-from-square": $fa-var-arrow-up-right-from-square,
+ "external-link": $fa-var-external-link,
+ "cubes-stacked": $fa-var-cubes-stacked,
+ "won-sign": $fa-var-won-sign,
+ "krw": $fa-var-krw,
+ "won": $fa-var-won,
+ "virus-covid": $fa-var-virus-covid,
+ "austral-sign": $fa-var-austral-sign,
+ "f": $fa-var-f,
+ "leaf": $fa-var-leaf,
+ "road": $fa-var-road,
+ "taxi": $fa-var-taxi,
+ "cab": $fa-var-cab,
+ "person-circle-plus": $fa-var-person-circle-plus,
+ "chart-pie": $fa-var-chart-pie,
+ "pie-chart": $fa-var-pie-chart,
+ "bolt-lightning": $fa-var-bolt-lightning,
+ "sack-xmark": $fa-var-sack-xmark,
+ "file-excel": $fa-var-file-excel,
+ "file-contract": $fa-var-file-contract,
+ "fish-fins": $fa-var-fish-fins,
+ "building-flag": $fa-var-building-flag,
+ "face-grin-beam": $fa-var-face-grin-beam,
+ "grin-beam": $fa-var-grin-beam,
+ "object-ungroup": $fa-var-object-ungroup,
+ "poop": $fa-var-poop,
+ "location-pin": $fa-var-location-pin,
+ "map-marker": $fa-var-map-marker,
+ "kaaba": $fa-var-kaaba,
+ "toilet-paper": $fa-var-toilet-paper,
+ "helmet-safety": $fa-var-helmet-safety,
+ "hard-hat": $fa-var-hard-hat,
+ "hat-hard": $fa-var-hat-hard,
+ "eject": $fa-var-eject,
+ "circle-right": $fa-var-circle-right,
+ "arrow-alt-circle-right": $fa-var-arrow-alt-circle-right,
+ "plane-circle-check": $fa-var-plane-circle-check,
+ "face-rolling-eyes": $fa-var-face-rolling-eyes,
+ "meh-rolling-eyes": $fa-var-meh-rolling-eyes,
+ "object-group": $fa-var-object-group,
+ "chart-line": $fa-var-chart-line,
+ "line-chart": $fa-var-line-chart,
+ "mask-ventilator": $fa-var-mask-ventilator,
+ "arrow-right": $fa-var-arrow-right,
+ "signs-post": $fa-var-signs-post,
+ "map-signs": $fa-var-map-signs,
+ "cash-register": $fa-var-cash-register,
+ "person-circle-question": $fa-var-person-circle-question,
+ "h": $fa-var-h,
+ "tarp": $fa-var-tarp,
+ "screwdriver-wrench": $fa-var-screwdriver-wrench,
+ "tools": $fa-var-tools,
+ "arrows-to-eye": $fa-var-arrows-to-eye,
+ "plug-circle-bolt": $fa-var-plug-circle-bolt,
+ "heart": $fa-var-heart,
+ "mars-and-venus": $fa-var-mars-and-venus,
+ "house-user": $fa-var-house-user,
+ "home-user": $fa-var-home-user,
+ "dumpster-fire": $fa-var-dumpster-fire,
+ "house-crack": $fa-var-house-crack,
+ "martini-glass-citrus": $fa-var-martini-glass-citrus,
+ "cocktail": $fa-var-cocktail,
+ "face-surprise": $fa-var-face-surprise,
+ "surprise": $fa-var-surprise,
+ "bottle-water": $fa-var-bottle-water,
+ "circle-pause": $fa-var-circle-pause,
+ "pause-circle": $fa-var-pause-circle,
+ "toilet-paper-slash": $fa-var-toilet-paper-slash,
+ "apple-whole": $fa-var-apple-whole,
+ "apple-alt": $fa-var-apple-alt,
+ "kitchen-set": $fa-var-kitchen-set,
+ "r": $fa-var-r,
+ "temperature-quarter": $fa-var-temperature-quarter,
+ "temperature-1": $fa-var-temperature-1,
+ "thermometer-1": $fa-var-thermometer-1,
+ "thermometer-quarter": $fa-var-thermometer-quarter,
+ "cube": $fa-var-cube,
+ "bitcoin-sign": $fa-var-bitcoin-sign,
+ "shield-dog": $fa-var-shield-dog,
+ "solar-panel": $fa-var-solar-panel,
+ "lock-open": $fa-var-lock-open,
+ "elevator": $fa-var-elevator,
+ "money-bill-transfer": $fa-var-money-bill-transfer,
+ "money-bill-trend-up": $fa-var-money-bill-trend-up,
+ "house-flood-water-circle-arrow-right": $fa-var-house-flood-water-circle-arrow-right,
+ "square-poll-horizontal": $fa-var-square-poll-horizontal,
+ "poll-h": $fa-var-poll-h,
+ "circle": $fa-var-circle,
+ "backward-fast": $fa-var-backward-fast,
+ "fast-backward": $fa-var-fast-backward,
+ "recycle": $fa-var-recycle,
+ "user-astronaut": $fa-var-user-astronaut,
+ "plane-slash": $fa-var-plane-slash,
+ "trademark": $fa-var-trademark,
+ "basketball": $fa-var-basketball,
+ "basketball-ball": $fa-var-basketball-ball,
+ "satellite-dish": $fa-var-satellite-dish,
+ "circle-up": $fa-var-circle-up,
+ "arrow-alt-circle-up": $fa-var-arrow-alt-circle-up,
+ "mobile-screen-button": $fa-var-mobile-screen-button,
+ "mobile-alt": $fa-var-mobile-alt,
+ "volume-high": $fa-var-volume-high,
+ "volume-up": $fa-var-volume-up,
+ "users-rays": $fa-var-users-rays,
+ "wallet": $fa-var-wallet,
+ "clipboard-check": $fa-var-clipboard-check,
+ "file-audio": $fa-var-file-audio,
+ "burger": $fa-var-burger,
+ "hamburger": $fa-var-hamburger,
+ "wrench": $fa-var-wrench,
+ "bugs": $fa-var-bugs,
+ "rupee-sign": $fa-var-rupee-sign,
+ "rupee": $fa-var-rupee,
+ "file-image": $fa-var-file-image,
+ "circle-question": $fa-var-circle-question,
+ "question-circle": $fa-var-question-circle,
+ "plane-departure": $fa-var-plane-departure,
+ "handshake-slash": $fa-var-handshake-slash,
+ "book-bookmark": $fa-var-book-bookmark,
+ "code-branch": $fa-var-code-branch,
+ "hat-cowboy": $fa-var-hat-cowboy,
+ "bridge": $fa-var-bridge,
+ "phone-flip": $fa-var-phone-flip,
+ "phone-alt": $fa-var-phone-alt,
+ "truck-front": $fa-var-truck-front,
+ "cat": $fa-var-cat,
+ "anchor-circle-exclamation": $fa-var-anchor-circle-exclamation,
+ "truck-field": $fa-var-truck-field,
+ "route": $fa-var-route,
+ "clipboard-question": $fa-var-clipboard-question,
+ "panorama": $fa-var-panorama,
+ "comment-medical": $fa-var-comment-medical,
+ "teeth-open": $fa-var-teeth-open,
+ "file-circle-minus": $fa-var-file-circle-minus,
+ "tags": $fa-var-tags,
+ "wine-glass": $fa-var-wine-glass,
+ "forward-fast": $fa-var-forward-fast,
+ "fast-forward": $fa-var-fast-forward,
+ "face-meh-blank": $fa-var-face-meh-blank,
+ "meh-blank": $fa-var-meh-blank,
+ "square-parking": $fa-var-square-parking,
+ "parking": $fa-var-parking,
+ "house-signal": $fa-var-house-signal,
+ "bars-progress": $fa-var-bars-progress,
+ "tasks-alt": $fa-var-tasks-alt,
+ "faucet-drip": $fa-var-faucet-drip,
+ "cart-flatbed": $fa-var-cart-flatbed,
+ "dolly-flatbed": $fa-var-dolly-flatbed,
+ "ban-smoking": $fa-var-ban-smoking,
+ "smoking-ban": $fa-var-smoking-ban,
+ "terminal": $fa-var-terminal,
+ "mobile-button": $fa-var-mobile-button,
+ "house-medical-flag": $fa-var-house-medical-flag,
+ "basket-shopping": $fa-var-basket-shopping,
+ "shopping-basket": $fa-var-shopping-basket,
+ "tape": $fa-var-tape,
+ "bus-simple": $fa-var-bus-simple,
+ "bus-alt": $fa-var-bus-alt,
+ "eye": $fa-var-eye,
+ "face-sad-cry": $fa-var-face-sad-cry,
+ "sad-cry": $fa-var-sad-cry,
+ "audio-description": $fa-var-audio-description,
+ "person-military-to-person": $fa-var-person-military-to-person,
+ "file-shield": $fa-var-file-shield,
+ "user-slash": $fa-var-user-slash,
+ "pen": $fa-var-pen,
+ "tower-observation": $fa-var-tower-observation,
+ "file-code": $fa-var-file-code,
+ "signal": $fa-var-signal,
+ "signal-5": $fa-var-signal-5,
+ "signal-perfect": $fa-var-signal-perfect,
+ "bus": $fa-var-bus,
+ "heart-circle-xmark": $fa-var-heart-circle-xmark,
+ "house-chimney": $fa-var-house-chimney,
+ "home-lg": $fa-var-home-lg,
+ "window-maximize": $fa-var-window-maximize,
+ "face-frown": $fa-var-face-frown,
+ "frown": $fa-var-frown,
+ "prescription": $fa-var-prescription,
+ "shop": $fa-var-shop,
+ "store-alt": $fa-var-store-alt,
+ "floppy-disk": $fa-var-floppy-disk,
+ "save": $fa-var-save,
+ "vihara": $fa-var-vihara,
+ "scale-unbalanced": $fa-var-scale-unbalanced,
+ "balance-scale-left": $fa-var-balance-scale-left,
+ "sort-up": $fa-var-sort-up,
+ "sort-asc": $fa-var-sort-asc,
+ "comment-dots": $fa-var-comment-dots,
+ "commenting": $fa-var-commenting,
+ "plant-wilt": $fa-var-plant-wilt,
+ "diamond": $fa-var-diamond,
+ "face-grin-squint": $fa-var-face-grin-squint,
+ "grin-squint": $fa-var-grin-squint,
+ "hand-holding-dollar": $fa-var-hand-holding-dollar,
+ "hand-holding-usd": $fa-var-hand-holding-usd,
+ "bacterium": $fa-var-bacterium,
+ "hand-pointer": $fa-var-hand-pointer,
+ "drum-steelpan": $fa-var-drum-steelpan,
+ "hand-scissors": $fa-var-hand-scissors,
+ "hands-praying": $fa-var-hands-praying,
+ "praying-hands": $fa-var-praying-hands,
+ "arrow-rotate-right": $fa-var-arrow-rotate-right,
+ "arrow-right-rotate": $fa-var-arrow-right-rotate,
+ "arrow-rotate-forward": $fa-var-arrow-rotate-forward,
+ "redo": $fa-var-redo,
+ "biohazard": $fa-var-biohazard,
+ "location-crosshairs": $fa-var-location-crosshairs,
+ "location": $fa-var-location,
+ "mars-double": $fa-var-mars-double,
+ "child-dress": $fa-var-child-dress,
+ "users-between-lines": $fa-var-users-between-lines,
+ "lungs-virus": $fa-var-lungs-virus,
+ "face-grin-tears": $fa-var-face-grin-tears,
+ "grin-tears": $fa-var-grin-tears,
+ "phone": $fa-var-phone,
+ "calendar-xmark": $fa-var-calendar-xmark,
+ "calendar-times": $fa-var-calendar-times,
+ "child-reaching": $fa-var-child-reaching,
+ "head-side-virus": $fa-var-head-side-virus,
+ "user-gear": $fa-var-user-gear,
+ "user-cog": $fa-var-user-cog,
+ "arrow-up-1-9": $fa-var-arrow-up-1-9,
+ "sort-numeric-up": $fa-var-sort-numeric-up,
+ "door-closed": $fa-var-door-closed,
+ "shield-virus": $fa-var-shield-virus,
+ "dice-six": $fa-var-dice-six,
+ "mosquito-net": $fa-var-mosquito-net,
+ "bridge-water": $fa-var-bridge-water,
+ "person-booth": $fa-var-person-booth,
+ "text-width": $fa-var-text-width,
+ "hat-wizard": $fa-var-hat-wizard,
+ "pen-fancy": $fa-var-pen-fancy,
+ "person-digging": $fa-var-person-digging,
+ "digging": $fa-var-digging,
+ "trash": $fa-var-trash,
+ "gauge-simple": $fa-var-gauge-simple,
+ "gauge-simple-med": $fa-var-gauge-simple-med,
+ "tachometer-average": $fa-var-tachometer-average,
+ "book-medical": $fa-var-book-medical,
+ "poo": $fa-var-poo,
+ "quote-right": $fa-var-quote-right,
+ "quote-right-alt": $fa-var-quote-right-alt,
+ "shirt": $fa-var-shirt,
+ "t-shirt": $fa-var-t-shirt,
+ "tshirt": $fa-var-tshirt,
+ "cubes": $fa-var-cubes,
+ "divide": $fa-var-divide,
+ "tenge-sign": $fa-var-tenge-sign,
+ "tenge": $fa-var-tenge,
+ "headphones": $fa-var-headphones,
+ "hands-holding": $fa-var-hands-holding,
+ "hands-clapping": $fa-var-hands-clapping,
+ "republican": $fa-var-republican,
+ "arrow-left": $fa-var-arrow-left,
+ "person-circle-xmark": $fa-var-person-circle-xmark,
+ "ruler": $fa-var-ruler,
+ "align-left": $fa-var-align-left,
+ "dice-d6": $fa-var-dice-d6,
+ "restroom": $fa-var-restroom,
+ "j": $fa-var-j,
+ "users-viewfinder": $fa-var-users-viewfinder,
+ "file-video": $fa-var-file-video,
+ "up-right-from-square": $fa-var-up-right-from-square,
+ "external-link-alt": $fa-var-external-link-alt,
+ "table-cells": $fa-var-table-cells,
+ "th": $fa-var-th,
+ "file-pdf": $fa-var-file-pdf,
+ "book-bible": $fa-var-book-bible,
+ "bible": $fa-var-bible,
+ "o": $fa-var-o,
+ "suitcase-medical": $fa-var-suitcase-medical,
+ "medkit": $fa-var-medkit,
+ "user-secret": $fa-var-user-secret,
+ "otter": $fa-var-otter,
+ "person-dress": $fa-var-person-dress,
+ "female": $fa-var-female,
+ "comment-dollar": $fa-var-comment-dollar,
+ "business-time": $fa-var-business-time,
+ "briefcase-clock": $fa-var-briefcase-clock,
+ "table-cells-large": $fa-var-table-cells-large,
+ "th-large": $fa-var-th-large,
+ "book-tanakh": $fa-var-book-tanakh,
+ "tanakh": $fa-var-tanakh,
+ "phone-volume": $fa-var-phone-volume,
+ "volume-control-phone": $fa-var-volume-control-phone,
+ "hat-cowboy-side": $fa-var-hat-cowboy-side,
+ "clipboard-user": $fa-var-clipboard-user,
+ "child": $fa-var-child,
+ "lira-sign": $fa-var-lira-sign,
+ "satellite": $fa-var-satellite,
+ "plane-lock": $fa-var-plane-lock,
+ "tag": $fa-var-tag,
+ "comment": $fa-var-comment,
+ "cake-candles": $fa-var-cake-candles,
+ "birthday-cake": $fa-var-birthday-cake,
+ "cake": $fa-var-cake,
+ "envelope": $fa-var-envelope,
+ "angles-up": $fa-var-angles-up,
+ "angle-double-up": $fa-var-angle-double-up,
+ "paperclip": $fa-var-paperclip,
+ "arrow-right-to-city": $fa-var-arrow-right-to-city,
+ "ribbon": $fa-var-ribbon,
+ "lungs": $fa-var-lungs,
+ "arrow-up-9-1": $fa-var-arrow-up-9-1,
+ "sort-numeric-up-alt": $fa-var-sort-numeric-up-alt,
+ "litecoin-sign": $fa-var-litecoin-sign,
+ "border-none": $fa-var-border-none,
+ "circle-nodes": $fa-var-circle-nodes,
+ "parachute-box": $fa-var-parachute-box,
+ "indent": $fa-var-indent,
+ "truck-field-un": $fa-var-truck-field-un,
+ "hourglass": $fa-var-hourglass,
+ "hourglass-empty": $fa-var-hourglass-empty,
+ "mountain": $fa-var-mountain,
+ "user-doctor": $fa-var-user-doctor,
+ "user-md": $fa-var-user-md,
+ "circle-info": $fa-var-circle-info,
+ "info-circle": $fa-var-info-circle,
+ "cloud-meatball": $fa-var-cloud-meatball,
+ "camera": $fa-var-camera,
+ "camera-alt": $fa-var-camera-alt,
+ "square-virus": $fa-var-square-virus,
+ "meteor": $fa-var-meteor,
+ "car-on": $fa-var-car-on,
+ "sleigh": $fa-var-sleigh,
+ "arrow-down-1-9": $fa-var-arrow-down-1-9,
+ "sort-numeric-asc": $fa-var-sort-numeric-asc,
+ "sort-numeric-down": $fa-var-sort-numeric-down,
+ "hand-holding-droplet": $fa-var-hand-holding-droplet,
+ "hand-holding-water": $fa-var-hand-holding-water,
+ "water": $fa-var-water,
+ "calendar-check": $fa-var-calendar-check,
+ "braille": $fa-var-braille,
+ "prescription-bottle-medical": $fa-var-prescription-bottle-medical,
+ "prescription-bottle-alt": $fa-var-prescription-bottle-alt,
+ "landmark": $fa-var-landmark,
+ "truck": $fa-var-truck,
+ "crosshairs": $fa-var-crosshairs,
+ "person-cane": $fa-var-person-cane,
+ "tent": $fa-var-tent,
+ "vest-patches": $fa-var-vest-patches,
+ "check-double": $fa-var-check-double,
+ "arrow-down-a-z": $fa-var-arrow-down-a-z,
+ "sort-alpha-asc": $fa-var-sort-alpha-asc,
+ "sort-alpha-down": $fa-var-sort-alpha-down,
+ "money-bill-wheat": $fa-var-money-bill-wheat,
+ "cookie": $fa-var-cookie,
+ "arrow-rotate-left": $fa-var-arrow-rotate-left,
+ "arrow-left-rotate": $fa-var-arrow-left-rotate,
+ "arrow-rotate-back": $fa-var-arrow-rotate-back,
+ "arrow-rotate-backward": $fa-var-arrow-rotate-backward,
+ "undo": $fa-var-undo,
+ "hard-drive": $fa-var-hard-drive,
+ "hdd": $fa-var-hdd,
+ "face-grin-squint-tears": $fa-var-face-grin-squint-tears,
+ "grin-squint-tears": $fa-var-grin-squint-tears,
+ "dumbbell": $fa-var-dumbbell,
+ "rectangle-list": $fa-var-rectangle-list,
+ "list-alt": $fa-var-list-alt,
+ "tarp-droplet": $fa-var-tarp-droplet,
+ "house-medical-circle-check": $fa-var-house-medical-circle-check,
+ "person-skiing-nordic": $fa-var-person-skiing-nordic,
+ "skiing-nordic": $fa-var-skiing-nordic,
+ "calendar-plus": $fa-var-calendar-plus,
+ "plane-arrival": $fa-var-plane-arrival,
+ "circle-left": $fa-var-circle-left,
+ "arrow-alt-circle-left": $fa-var-arrow-alt-circle-left,
+ "train-subway": $fa-var-train-subway,
+ "subway": $fa-var-subway,
+ "chart-gantt": $fa-var-chart-gantt,
+ "indian-rupee-sign": $fa-var-indian-rupee-sign,
+ "indian-rupee": $fa-var-indian-rupee,
+ "inr": $fa-var-inr,
+ "crop-simple": $fa-var-crop-simple,
+ "crop-alt": $fa-var-crop-alt,
+ "money-bill-1": $fa-var-money-bill-1,
+ "money-bill-alt": $fa-var-money-bill-alt,
+ "left-long": $fa-var-left-long,
+ "long-arrow-alt-left": $fa-var-long-arrow-alt-left,
+ "dna": $fa-var-dna,
+ "virus-slash": $fa-var-virus-slash,
+ "minus": $fa-var-minus,
+ "subtract": $fa-var-subtract,
+ "chess": $fa-var-chess,
+ "arrow-left-long": $fa-var-arrow-left-long,
+ "long-arrow-left": $fa-var-long-arrow-left,
+ "plug-circle-check": $fa-var-plug-circle-check,
+ "street-view": $fa-var-street-view,
+ "franc-sign": $fa-var-franc-sign,
+ "volume-off": $fa-var-volume-off,
+ "hands-asl-interpreting": $fa-var-hands-asl-interpreting,
+ "american-sign-language-interpreting": $fa-var-american-sign-language-interpreting,
+ "asl-interpreting": $fa-var-asl-interpreting,
+ "hands-american-sign-language-interpreting": $fa-var-hands-american-sign-language-interpreting,
+ "gear": $fa-var-gear,
+ "cog": $fa-var-cog,
+ "droplet-slash": $fa-var-droplet-slash,
+ "tint-slash": $fa-var-tint-slash,
+ "mosque": $fa-var-mosque,
+ "mosquito": $fa-var-mosquito,
+ "star-of-david": $fa-var-star-of-david,
+ "person-military-rifle": $fa-var-person-military-rifle,
+ "cart-shopping": $fa-var-cart-shopping,
+ "shopping-cart": $fa-var-shopping-cart,
+ "vials": $fa-var-vials,
+ "plug-circle-plus": $fa-var-plug-circle-plus,
+ "place-of-worship": $fa-var-place-of-worship,
+ "grip-vertical": $fa-var-grip-vertical,
+ "arrow-turn-up": $fa-var-arrow-turn-up,
+ "level-up": $fa-var-level-up,
+ "u": $fa-var-u,
+ "square-root-variable": $fa-var-square-root-variable,
+ "square-root-alt": $fa-var-square-root-alt,
+ "clock": $fa-var-clock,
+ "clock-four": $fa-var-clock-four,
+ "backward-step": $fa-var-backward-step,
+ "step-backward": $fa-var-step-backward,
+ "pallet": $fa-var-pallet,
+ "faucet": $fa-var-faucet,
+ "baseball-bat-ball": $fa-var-baseball-bat-ball,
+ "s": $fa-var-s,
+ "timeline": $fa-var-timeline,
+ "keyboard": $fa-var-keyboard,
+ "caret-down": $fa-var-caret-down,
+ "house-chimney-medical": $fa-var-house-chimney-medical,
+ "clinic-medical": $fa-var-clinic-medical,
+ "temperature-three-quarters": $fa-var-temperature-three-quarters,
+ "temperature-3": $fa-var-temperature-3,
+ "thermometer-3": $fa-var-thermometer-3,
+ "thermometer-three-quarters": $fa-var-thermometer-three-quarters,
+ "mobile-screen": $fa-var-mobile-screen,
+ "mobile-android-alt": $fa-var-mobile-android-alt,
+ "plane-up": $fa-var-plane-up,
+ "piggy-bank": $fa-var-piggy-bank,
+ "battery-half": $fa-var-battery-half,
+ "battery-3": $fa-var-battery-3,
+ "mountain-city": $fa-var-mountain-city,
+ "coins": $fa-var-coins,
+ "khanda": $fa-var-khanda,
+ "sliders": $fa-var-sliders,
+ "sliders-h": $fa-var-sliders-h,
+ "folder-tree": $fa-var-folder-tree,
+ "network-wired": $fa-var-network-wired,
+ "map-pin": $fa-var-map-pin,
+ "hamsa": $fa-var-hamsa,
+ "cent-sign": $fa-var-cent-sign,
+ "flask": $fa-var-flask,
+ "person-pregnant": $fa-var-person-pregnant,
+ "wand-sparkles": $fa-var-wand-sparkles,
+ "ellipsis-vertical": $fa-var-ellipsis-vertical,
+ "ellipsis-v": $fa-var-ellipsis-v,
+ "ticket": $fa-var-ticket,
+ "power-off": $fa-var-power-off,
+ "right-long": $fa-var-right-long,
+ "long-arrow-alt-right": $fa-var-long-arrow-alt-right,
+ "flag-usa": $fa-var-flag-usa,
+ "laptop-file": $fa-var-laptop-file,
+ "tty": $fa-var-tty,
+ "teletype": $fa-var-teletype,
+ "diagram-next": $fa-var-diagram-next,
+ "person-rifle": $fa-var-person-rifle,
+ "house-medical-circle-exclamation": $fa-var-house-medical-circle-exclamation,
+ "closed-captioning": $fa-var-closed-captioning,
+ "person-hiking": $fa-var-person-hiking,
+ "hiking": $fa-var-hiking,
+ "venus-double": $fa-var-venus-double,
+ "images": $fa-var-images,
+ "calculator": $fa-var-calculator,
+ "people-pulling": $fa-var-people-pulling,
+ "n": $fa-var-n,
+ "cable-car": $fa-var-cable-car,
+ "tram": $fa-var-tram,
+ "cloud-rain": $fa-var-cloud-rain,
+ "building-circle-xmark": $fa-var-building-circle-xmark,
+ "ship": $fa-var-ship,
+ "arrows-down-to-line": $fa-var-arrows-down-to-line,
+ "download": $fa-var-download,
+ "face-grin": $fa-var-face-grin,
+ "grin": $fa-var-grin,
+ "delete-left": $fa-var-delete-left,
+ "backspace": $fa-var-backspace,
+ "eye-dropper": $fa-var-eye-dropper,
+ "eye-dropper-empty": $fa-var-eye-dropper-empty,
+ "eyedropper": $fa-var-eyedropper,
+ "file-circle-check": $fa-var-file-circle-check,
+ "forward": $fa-var-forward,
+ "mobile": $fa-var-mobile,
+ "mobile-android": $fa-var-mobile-android,
+ "mobile-phone": $fa-var-mobile-phone,
+ "face-meh": $fa-var-face-meh,
+ "meh": $fa-var-meh,
+ "align-center": $fa-var-align-center,
+ "book-skull": $fa-var-book-skull,
+ "book-dead": $fa-var-book-dead,
+ "id-card": $fa-var-id-card,
+ "drivers-license": $fa-var-drivers-license,
+ "outdent": $fa-var-outdent,
+ "dedent": $fa-var-dedent,
+ "heart-circle-exclamation": $fa-var-heart-circle-exclamation,
+ "house": $fa-var-house,
+ "home": $fa-var-home,
+ "home-alt": $fa-var-home-alt,
+ "home-lg-alt": $fa-var-home-lg-alt,
+ "calendar-week": $fa-var-calendar-week,
+ "laptop-medical": $fa-var-laptop-medical,
+ "b": $fa-var-b,
+ "file-medical": $fa-var-file-medical,
+ "dice-one": $fa-var-dice-one,
+ "kiwi-bird": $fa-var-kiwi-bird,
+ "arrow-right-arrow-left": $fa-var-arrow-right-arrow-left,
+ "exchange": $fa-var-exchange,
+ "rotate-right": $fa-var-rotate-right,
+ "redo-alt": $fa-var-redo-alt,
+ "rotate-forward": $fa-var-rotate-forward,
+ "utensils": $fa-var-utensils,
+ "cutlery": $fa-var-cutlery,
+ "arrow-up-wide-short": $fa-var-arrow-up-wide-short,
+ "sort-amount-up": $fa-var-sort-amount-up,
+ "mill-sign": $fa-var-mill-sign,
+ "bowl-rice": $fa-var-bowl-rice,
+ "skull": $fa-var-skull,
+ "tower-broadcast": $fa-var-tower-broadcast,
+ "broadcast-tower": $fa-var-broadcast-tower,
+ "truck-pickup": $fa-var-truck-pickup,
+ "up-long": $fa-var-up-long,
+ "long-arrow-alt-up": $fa-var-long-arrow-alt-up,
+ "stop": $fa-var-stop,
+ "code-merge": $fa-var-code-merge,
+ "upload": $fa-var-upload,
+ "hurricane": $fa-var-hurricane,
+ "mound": $fa-var-mound,
+ "toilet-portable": $fa-var-toilet-portable,
+ "compact-disc": $fa-var-compact-disc,
+ "file-arrow-down": $fa-var-file-arrow-down,
+ "file-download": $fa-var-file-download,
+ "caravan": $fa-var-caravan,
+ "shield-cat": $fa-var-shield-cat,
+ "bolt": $fa-var-bolt,
+ "zap": $fa-var-zap,
+ "glass-water": $fa-var-glass-water,
+ "oil-well": $fa-var-oil-well,
+ "vault": $fa-var-vault,
+ "mars": $fa-var-mars,
+ "toilet": $fa-var-toilet,
+ "plane-circle-xmark": $fa-var-plane-circle-xmark,
+ "yen-sign": $fa-var-yen-sign,
+ "cny": $fa-var-cny,
+ "jpy": $fa-var-jpy,
+ "rmb": $fa-var-rmb,
+ "yen": $fa-var-yen,
+ "ruble-sign": $fa-var-ruble-sign,
+ "rouble": $fa-var-rouble,
+ "rub": $fa-var-rub,
+ "ruble": $fa-var-ruble,
+ "sun": $fa-var-sun,
+ "guitar": $fa-var-guitar,
+ "face-laugh-wink": $fa-var-face-laugh-wink,
+ "laugh-wink": $fa-var-laugh-wink,
+ "horse-head": $fa-var-horse-head,
+ "bore-hole": $fa-var-bore-hole,
+ "industry": $fa-var-industry,
+ "circle-down": $fa-var-circle-down,
+ "arrow-alt-circle-down": $fa-var-arrow-alt-circle-down,
+ "arrows-turn-to-dots": $fa-var-arrows-turn-to-dots,
+ "florin-sign": $fa-var-florin-sign,
+ "arrow-down-short-wide": $fa-var-arrow-down-short-wide,
+ "sort-amount-desc": $fa-var-sort-amount-desc,
+ "sort-amount-down-alt": $fa-var-sort-amount-down-alt,
+ "less-than": $fa-var-less-than,
+ "angle-down": $fa-var-angle-down,
+ "car-tunnel": $fa-var-car-tunnel,
+ "head-side-cough": $fa-var-head-side-cough,
+ "grip-lines": $fa-var-grip-lines,
+ "thumbs-down": $fa-var-thumbs-down,
+ "user-lock": $fa-var-user-lock,
+ "arrow-right-long": $fa-var-arrow-right-long,
+ "long-arrow-right": $fa-var-long-arrow-right,
+ "anchor-circle-xmark": $fa-var-anchor-circle-xmark,
+ "ellipsis": $fa-var-ellipsis,
+ "ellipsis-h": $fa-var-ellipsis-h,
+ "chess-pawn": $fa-var-chess-pawn,
+ "kit-medical": $fa-var-kit-medical,
+ "first-aid": $fa-var-first-aid,
+ "person-through-window": $fa-var-person-through-window,
+ "toolbox": $fa-var-toolbox,
+ "hands-holding-circle": $fa-var-hands-holding-circle,
+ "bug": $fa-var-bug,
+ "credit-card": $fa-var-credit-card,
+ "credit-card-alt": $fa-var-credit-card-alt,
+ "car": $fa-var-car,
+ "automobile": $fa-var-automobile,
+ "hand-holding-hand": $fa-var-hand-holding-hand,
+ "book-open-reader": $fa-var-book-open-reader,
+ "book-reader": $fa-var-book-reader,
+ "mountain-sun": $fa-var-mountain-sun,
+ "arrows-left-right-to-line": $fa-var-arrows-left-right-to-line,
+ "dice-d20": $fa-var-dice-d20,
+ "truck-droplet": $fa-var-truck-droplet,
+ "file-circle-xmark": $fa-var-file-circle-xmark,
+ "temperature-arrow-up": $fa-var-temperature-arrow-up,
+ "temperature-up": $fa-var-temperature-up,
+ "medal": $fa-var-medal,
+ "bed": $fa-var-bed,
+ "square-h": $fa-var-square-h,
+ "h-square": $fa-var-h-square,
+ "podcast": $fa-var-podcast,
+ "temperature-full": $fa-var-temperature-full,
+ "temperature-4": $fa-var-temperature-4,
+ "thermometer-4": $fa-var-thermometer-4,
+ "thermometer-full": $fa-var-thermometer-full,
+ "bell": $fa-var-bell,
+ "superscript": $fa-var-superscript,
+ "plug-circle-xmark": $fa-var-plug-circle-xmark,
+ "star-of-life": $fa-var-star-of-life,
+ "phone-slash": $fa-var-phone-slash,
+ "paint-roller": $fa-var-paint-roller,
+ "handshake-angle": $fa-var-handshake-angle,
+ "hands-helping": $fa-var-hands-helping,
+ "location-dot": $fa-var-location-dot,
+ "map-marker-alt": $fa-var-map-marker-alt,
+ "file": $fa-var-file,
+ "greater-than": $fa-var-greater-than,
+ "person-swimming": $fa-var-person-swimming,
+ "swimmer": $fa-var-swimmer,
+ "arrow-down": $fa-var-arrow-down,
+ "droplet": $fa-var-droplet,
+ "tint": $fa-var-tint,
+ "eraser": $fa-var-eraser,
+ "earth-americas": $fa-var-earth-americas,
+ "earth": $fa-var-earth,
+ "earth-america": $fa-var-earth-america,
+ "globe-americas": $fa-var-globe-americas,
+ "person-burst": $fa-var-person-burst,
+ "dove": $fa-var-dove,
+ "battery-empty": $fa-var-battery-empty,
+ "battery-0": $fa-var-battery-0,
+ "socks": $fa-var-socks,
+ "inbox": $fa-var-inbox,
+ "section": $fa-var-section,
+ "gauge-high": $fa-var-gauge-high,
+ "tachometer-alt": $fa-var-tachometer-alt,
+ "tachometer-alt-fast": $fa-var-tachometer-alt-fast,
+ "envelope-open-text": $fa-var-envelope-open-text,
+ "hospital": $fa-var-hospital,
+ "hospital-alt": $fa-var-hospital-alt,
+ "hospital-wide": $fa-var-hospital-wide,
+ "wine-bottle": $fa-var-wine-bottle,
+ "chess-rook": $fa-var-chess-rook,
+ "bars-staggered": $fa-var-bars-staggered,
+ "reorder": $fa-var-reorder,
+ "stream": $fa-var-stream,
+ "dharmachakra": $fa-var-dharmachakra,
+ "hotdog": $fa-var-hotdog,
+ "person-walking-with-cane": $fa-var-person-walking-with-cane,
+ "blind": $fa-var-blind,
+ "drum": $fa-var-drum,
+ "ice-cream": $fa-var-ice-cream,
+ "heart-circle-bolt": $fa-var-heart-circle-bolt,
+ "fax": $fa-var-fax,
+ "paragraph": $fa-var-paragraph,
+ "check-to-slot": $fa-var-check-to-slot,
+ "vote-yea": $fa-var-vote-yea,
+ "star-half": $fa-var-star-half,
+ "boxes-stacked": $fa-var-boxes-stacked,
+ "boxes": $fa-var-boxes,
+ "boxes-alt": $fa-var-boxes-alt,
+ "link": $fa-var-link,
+ "chain": $fa-var-chain,
+ "ear-listen": $fa-var-ear-listen,
+ "assistive-listening-systems": $fa-var-assistive-listening-systems,
+ "tree-city": $fa-var-tree-city,
+ "play": $fa-var-play,
+ "font": $fa-var-font,
+ "rupiah-sign": $fa-var-rupiah-sign,
+ "magnifying-glass": $fa-var-magnifying-glass,
+ "search": $fa-var-search,
+ "table-tennis-paddle-ball": $fa-var-table-tennis-paddle-ball,
+ "ping-pong-paddle-ball": $fa-var-ping-pong-paddle-ball,
+ "table-tennis": $fa-var-table-tennis,
+ "person-dots-from-line": $fa-var-person-dots-from-line,
+ "diagnoses": $fa-var-diagnoses,
+ "trash-can-arrow-up": $fa-var-trash-can-arrow-up,
+ "trash-restore-alt": $fa-var-trash-restore-alt,
+ "naira-sign": $fa-var-naira-sign,
+ "cart-arrow-down": $fa-var-cart-arrow-down,
+ "walkie-talkie": $fa-var-walkie-talkie,
+ "file-pen": $fa-var-file-pen,
+ "file-edit": $fa-var-file-edit,
+ "receipt": $fa-var-receipt,
+ "square-pen": $fa-var-square-pen,
+ "pen-square": $fa-var-pen-square,
+ "pencil-square": $fa-var-pencil-square,
+ "suitcase-rolling": $fa-var-suitcase-rolling,
+ "person-circle-exclamation": $fa-var-person-circle-exclamation,
+ "chevron-down": $fa-var-chevron-down,
+ "battery-full": $fa-var-battery-full,
+ "battery": $fa-var-battery,
+ "battery-5": $fa-var-battery-5,
+ "skull-crossbones": $fa-var-skull-crossbones,
+ "code-compare": $fa-var-code-compare,
+ "list-ul": $fa-var-list-ul,
+ "list-dots": $fa-var-list-dots,
+ "school-lock": $fa-var-school-lock,
+ "tower-cell": $fa-var-tower-cell,
+ "down-long": $fa-var-down-long,
+ "long-arrow-alt-down": $fa-var-long-arrow-alt-down,
+ "ranking-star": $fa-var-ranking-star,
+ "chess-king": $fa-var-chess-king,
+ "person-harassing": $fa-var-person-harassing,
+ "brazilian-real-sign": $fa-var-brazilian-real-sign,
+ "landmark-dome": $fa-var-landmark-dome,
+ "landmark-alt": $fa-var-landmark-alt,
+ "arrow-up": $fa-var-arrow-up,
+ "tv": $fa-var-tv,
+ "television": $fa-var-television,
+ "tv-alt": $fa-var-tv-alt,
+ "shrimp": $fa-var-shrimp,
+ "list-check": $fa-var-list-check,
+ "tasks": $fa-var-tasks,
+ "jug-detergent": $fa-var-jug-detergent,
+ "circle-user": $fa-var-circle-user,
+ "user-circle": $fa-var-user-circle,
+ "user-shield": $fa-var-user-shield,
+ "wind": $fa-var-wind,
+ "car-burst": $fa-var-car-burst,
+ "car-crash": $fa-var-car-crash,
+ "y": $fa-var-y,
+ "person-snowboarding": $fa-var-person-snowboarding,
+ "snowboarding": $fa-var-snowboarding,
+ "truck-fast": $fa-var-truck-fast,
+ "shipping-fast": $fa-var-shipping-fast,
+ "fish": $fa-var-fish,
+ "user-graduate": $fa-var-user-graduate,
+ "circle-half-stroke": $fa-var-circle-half-stroke,
+ "adjust": $fa-var-adjust,
+ "clapperboard": $fa-var-clapperboard,
+ "circle-radiation": $fa-var-circle-radiation,
+ "radiation-alt": $fa-var-radiation-alt,
+ "baseball": $fa-var-baseball,
+ "baseball-ball": $fa-var-baseball-ball,
+ "jet-fighter-up": $fa-var-jet-fighter-up,
+ "diagram-project": $fa-var-diagram-project,
+ "project-diagram": $fa-var-project-diagram,
+ "copy": $fa-var-copy,
+ "volume-xmark": $fa-var-volume-xmark,
+ "volume-mute": $fa-var-volume-mute,
+ "volume-times": $fa-var-volume-times,
+ "hand-sparkles": $fa-var-hand-sparkles,
+ "grip": $fa-var-grip,
+ "grip-horizontal": $fa-var-grip-horizontal,
+ "share-from-square": $fa-var-share-from-square,
+ "share-square": $fa-var-share-square,
+ "child-combatant": $fa-var-child-combatant,
+ "child-rifle": $fa-var-child-rifle,
+ "gun": $fa-var-gun,
+ "square-phone": $fa-var-square-phone,
+ "phone-square": $fa-var-phone-square,
+ "plus": $fa-var-plus,
+ "add": $fa-var-add,
+ "expand": $fa-var-expand,
+ "computer": $fa-var-computer,
+ "xmark": $fa-var-xmark,
+ "close": $fa-var-close,
+ "multiply": $fa-var-multiply,
+ "remove": $fa-var-remove,
+ "times": $fa-var-times,
+ "arrows-up-down-left-right": $fa-var-arrows-up-down-left-right,
+ "arrows": $fa-var-arrows,
+ "chalkboard-user": $fa-var-chalkboard-user,
+ "chalkboard-teacher": $fa-var-chalkboard-teacher,
+ "peso-sign": $fa-var-peso-sign,
+ "building-shield": $fa-var-building-shield,
+ "baby": $fa-var-baby,
+ "users-line": $fa-var-users-line,
+ "quote-left": $fa-var-quote-left,
+ "quote-left-alt": $fa-var-quote-left-alt,
+ "tractor": $fa-var-tractor,
+ "trash-arrow-up": $fa-var-trash-arrow-up,
+ "trash-restore": $fa-var-trash-restore,
+ "arrow-down-up-lock": $fa-var-arrow-down-up-lock,
+ "lines-leaning": $fa-var-lines-leaning,
+ "ruler-combined": $fa-var-ruler-combined,
+ "copyright": $fa-var-copyright,
+ "equals": $fa-var-equals,
+ "blender": $fa-var-blender,
+ "teeth": $fa-var-teeth,
+ "shekel-sign": $fa-var-shekel-sign,
+ "ils": $fa-var-ils,
+ "shekel": $fa-var-shekel,
+ "sheqel": $fa-var-sheqel,
+ "sheqel-sign": $fa-var-sheqel-sign,
+ "map": $fa-var-map,
+ "rocket": $fa-var-rocket,
+ "photo-film": $fa-var-photo-film,
+ "photo-video": $fa-var-photo-video,
+ "folder-minus": $fa-var-folder-minus,
+ "store": $fa-var-store,
+ "arrow-trend-up": $fa-var-arrow-trend-up,
+ "plug-circle-minus": $fa-var-plug-circle-minus,
+ "sign-hanging": $fa-var-sign-hanging,
+ "sign": $fa-var-sign,
+ "bezier-curve": $fa-var-bezier-curve,
+ "bell-slash": $fa-var-bell-slash,
+ "tablet": $fa-var-tablet,
+ "tablet-android": $fa-var-tablet-android,
+ "school-flag": $fa-var-school-flag,
+ "fill": $fa-var-fill,
+ "angle-up": $fa-var-angle-up,
+ "drumstick-bite": $fa-var-drumstick-bite,
+ "holly-berry": $fa-var-holly-berry,
+ "chevron-left": $fa-var-chevron-left,
+ "bacteria": $fa-var-bacteria,
+ "hand-lizard": $fa-var-hand-lizard,
+ "notdef": $fa-var-notdef,
+ "disease": $fa-var-disease,
+ "briefcase-medical": $fa-var-briefcase-medical,
+ "genderless": $fa-var-genderless,
+ "chevron-right": $fa-var-chevron-right,
+ "retweet": $fa-var-retweet,
+ "car-rear": $fa-var-car-rear,
+ "car-alt": $fa-var-car-alt,
+ "pump-soap": $fa-var-pump-soap,
+ "video-slash": $fa-var-video-slash,
+ "battery-quarter": $fa-var-battery-quarter,
+ "battery-2": $fa-var-battery-2,
+ "radio": $fa-var-radio,
+ "baby-carriage": $fa-var-baby-carriage,
+ "carriage-baby": $fa-var-carriage-baby,
+ "traffic-light": $fa-var-traffic-light,
+ "thermometer": $fa-var-thermometer,
+ "vr-cardboard": $fa-var-vr-cardboard,
+ "hand-middle-finger": $fa-var-hand-middle-finger,
+ "percent": $fa-var-percent,
+ "percentage": $fa-var-percentage,
+ "truck-moving": $fa-var-truck-moving,
+ "glass-water-droplet": $fa-var-glass-water-droplet,
+ "display": $fa-var-display,
+ "face-smile": $fa-var-face-smile,
+ "smile": $fa-var-smile,
+ "thumbtack": $fa-var-thumbtack,
+ "thumb-tack": $fa-var-thumb-tack,
+ "trophy": $fa-var-trophy,
+ "person-praying": $fa-var-person-praying,
+ "pray": $fa-var-pray,
+ "hammer": $fa-var-hammer,
+ "hand-peace": $fa-var-hand-peace,
+ "rotate": $fa-var-rotate,
+ "sync-alt": $fa-var-sync-alt,
+ "spinner": $fa-var-spinner,
+ "robot": $fa-var-robot,
+ "peace": $fa-var-peace,
+ "gears": $fa-var-gears,
+ "cogs": $fa-var-cogs,
+ "warehouse": $fa-var-warehouse,
+ "arrow-up-right-dots": $fa-var-arrow-up-right-dots,
+ "splotch": $fa-var-splotch,
+ "face-grin-hearts": $fa-var-face-grin-hearts,
+ "grin-hearts": $fa-var-grin-hearts,
+ "dice-four": $fa-var-dice-four,
+ "sim-card": $fa-var-sim-card,
+ "transgender": $fa-var-transgender,
+ "transgender-alt": $fa-var-transgender-alt,
+ "mercury": $fa-var-mercury,
+ "arrow-turn-down": $fa-var-arrow-turn-down,
+ "level-down": $fa-var-level-down,
+ "person-falling-burst": $fa-var-person-falling-burst,
+ "award": $fa-var-award,
+ "ticket-simple": $fa-var-ticket-simple,
+ "ticket-alt": $fa-var-ticket-alt,
+ "building": $fa-var-building,
+ "angles-left": $fa-var-angles-left,
+ "angle-double-left": $fa-var-angle-double-left,
+ "qrcode": $fa-var-qrcode,
+ "clock-rotate-left": $fa-var-clock-rotate-left,
+ "history": $fa-var-history,
+ "face-grin-beam-sweat": $fa-var-face-grin-beam-sweat,
+ "grin-beam-sweat": $fa-var-grin-beam-sweat,
+ "file-export": $fa-var-file-export,
+ "arrow-right-from-file": $fa-var-arrow-right-from-file,
+ "shield": $fa-var-shield,
+ "shield-blank": $fa-var-shield-blank,
+ "arrow-up-short-wide": $fa-var-arrow-up-short-wide,
+ "sort-amount-up-alt": $fa-var-sort-amount-up-alt,
+ "house-medical": $fa-var-house-medical,
+ "golf-ball-tee": $fa-var-golf-ball-tee,
+ "golf-ball": $fa-var-golf-ball,
+ "circle-chevron-left": $fa-var-circle-chevron-left,
+ "chevron-circle-left": $fa-var-chevron-circle-left,
+ "house-chimney-window": $fa-var-house-chimney-window,
+ "pen-nib": $fa-var-pen-nib,
+ "tent-arrow-turn-left": $fa-var-tent-arrow-turn-left,
+ "tents": $fa-var-tents,
+ "wand-magic": $fa-var-wand-magic,
+ "magic": $fa-var-magic,
+ "dog": $fa-var-dog,
+ "carrot": $fa-var-carrot,
+ "moon": $fa-var-moon,
+ "wine-glass-empty": $fa-var-wine-glass-empty,
+ "wine-glass-alt": $fa-var-wine-glass-alt,
+ "cheese": $fa-var-cheese,
+ "yin-yang": $fa-var-yin-yang,
+ "music": $fa-var-music,
+ "code-commit": $fa-var-code-commit,
+ "temperature-low": $fa-var-temperature-low,
+ "person-biking": $fa-var-person-biking,
+ "biking": $fa-var-biking,
+ "broom": $fa-var-broom,
+ "shield-heart": $fa-var-shield-heart,
+ "gopuram": $fa-var-gopuram,
+ "earth-oceania": $fa-var-earth-oceania,
+ "globe-oceania": $fa-var-globe-oceania,
+ "square-xmark": $fa-var-square-xmark,
+ "times-square": $fa-var-times-square,
+ "xmark-square": $fa-var-xmark-square,
+ "hashtag": $fa-var-hashtag,
+ "up-right-and-down-left-from-center": $fa-var-up-right-and-down-left-from-center,
+ "expand-alt": $fa-var-expand-alt,
+ "oil-can": $fa-var-oil-can,
+ "t": $fa-var-t,
+ "hippo": $fa-var-hippo,
+ "chart-column": $fa-var-chart-column,
+ "infinity": $fa-var-infinity,
+ "vial-circle-check": $fa-var-vial-circle-check,
+ "person-arrow-down-to-line": $fa-var-person-arrow-down-to-line,
+ "voicemail": $fa-var-voicemail,
+ "fan": $fa-var-fan,
+ "person-walking-luggage": $fa-var-person-walking-luggage,
+ "up-down": $fa-var-up-down,
+ "arrows-alt-v": $fa-var-arrows-alt-v,
+ "cloud-moon-rain": $fa-var-cloud-moon-rain,
+ "calendar": $fa-var-calendar,
+ "trailer": $fa-var-trailer,
+ "bahai": $fa-var-bahai,
+ "haykal": $fa-var-haykal,
+ "sd-card": $fa-var-sd-card,
+ "dragon": $fa-var-dragon,
+ "shoe-prints": $fa-var-shoe-prints,
+ "circle-plus": $fa-var-circle-plus,
+ "plus-circle": $fa-var-plus-circle,
+ "face-grin-tongue-wink": $fa-var-face-grin-tongue-wink,
+ "grin-tongue-wink": $fa-var-grin-tongue-wink,
+ "hand-holding": $fa-var-hand-holding,
+ "plug-circle-exclamation": $fa-var-plug-circle-exclamation,
+ "link-slash": $fa-var-link-slash,
+ "chain-broken": $fa-var-chain-broken,
+ "chain-slash": $fa-var-chain-slash,
+ "unlink": $fa-var-unlink,
+ "clone": $fa-var-clone,
+ "person-walking-arrow-loop-left": $fa-var-person-walking-arrow-loop-left,
+ "arrow-up-z-a": $fa-var-arrow-up-z-a,
+ "sort-alpha-up-alt": $fa-var-sort-alpha-up-alt,
+ "fire-flame-curved": $fa-var-fire-flame-curved,
+ "fire-alt": $fa-var-fire-alt,
+ "tornado": $fa-var-tornado,
+ "file-circle-plus": $fa-var-file-circle-plus,
+ "book-quran": $fa-var-book-quran,
+ "quran": $fa-var-quran,
+ "anchor": $fa-var-anchor,
+ "border-all": $fa-var-border-all,
+ "face-angry": $fa-var-face-angry,
+ "angry": $fa-var-angry,
+ "cookie-bite": $fa-var-cookie-bite,
+ "arrow-trend-down": $fa-var-arrow-trend-down,
+ "rss": $fa-var-rss,
+ "feed": $fa-var-feed,
+ "draw-polygon": $fa-var-draw-polygon,
+ "scale-balanced": $fa-var-scale-balanced,
+ "balance-scale": $fa-var-balance-scale,
+ "gauge-simple-high": $fa-var-gauge-simple-high,
+ "tachometer": $fa-var-tachometer,
+ "tachometer-fast": $fa-var-tachometer-fast,
+ "shower": $fa-var-shower,
+ "desktop": $fa-var-desktop,
+ "desktop-alt": $fa-var-desktop-alt,
+ "m": $fa-var-m,
+ "table-list": $fa-var-table-list,
+ "th-list": $fa-var-th-list,
+ "comment-sms": $fa-var-comment-sms,
+ "sms": $fa-var-sms,
+ "book": $fa-var-book,
+ "user-plus": $fa-var-user-plus,
+ "check": $fa-var-check,
+ "battery-three-quarters": $fa-var-battery-three-quarters,
+ "battery-4": $fa-var-battery-4,
+ "house-circle-check": $fa-var-house-circle-check,
+ "angle-left": $fa-var-angle-left,
+ "diagram-successor": $fa-var-diagram-successor,
+ "truck-arrow-right": $fa-var-truck-arrow-right,
+ "arrows-split-up-and-left": $fa-var-arrows-split-up-and-left,
+ "hand-fist": $fa-var-hand-fist,
+ "fist-raised": $fa-var-fist-raised,
+ "cloud-moon": $fa-var-cloud-moon,
+ "briefcase": $fa-var-briefcase,
+ "person-falling": $fa-var-person-falling,
+ "image-portrait": $fa-var-image-portrait,
+ "portrait": $fa-var-portrait,
+ "user-tag": $fa-var-user-tag,
+ "rug": $fa-var-rug,
+ "earth-europe": $fa-var-earth-europe,
+ "globe-europe": $fa-var-globe-europe,
+ "cart-flatbed-suitcase": $fa-var-cart-flatbed-suitcase,
+ "luggage-cart": $fa-var-luggage-cart,
+ "rectangle-xmark": $fa-var-rectangle-xmark,
+ "rectangle-times": $fa-var-rectangle-times,
+ "times-rectangle": $fa-var-times-rectangle,
+ "window-close": $fa-var-window-close,
+ "baht-sign": $fa-var-baht-sign,
+ "book-open": $fa-var-book-open,
+ "book-journal-whills": $fa-var-book-journal-whills,
+ "journal-whills": $fa-var-journal-whills,
+ "handcuffs": $fa-var-handcuffs,
+ "triangle-exclamation": $fa-var-triangle-exclamation,
+ "exclamation-triangle": $fa-var-exclamation-triangle,
+ "warning": $fa-var-warning,
+ "database": $fa-var-database,
+ "share": $fa-var-share,
+ "arrow-turn-right": $fa-var-arrow-turn-right,
+ "mail-forward": $fa-var-mail-forward,
+ "bottle-droplet": $fa-var-bottle-droplet,
+ "mask-face": $fa-var-mask-face,
+ "hill-rockslide": $fa-var-hill-rockslide,
+ "right-left": $fa-var-right-left,
+ "exchange-alt": $fa-var-exchange-alt,
+ "paper-plane": $fa-var-paper-plane,
+ "road-circle-exclamation": $fa-var-road-circle-exclamation,
+ "dungeon": $fa-var-dungeon,
+ "align-right": $fa-var-align-right,
+ "money-bill-1-wave": $fa-var-money-bill-1-wave,
+ "money-bill-wave-alt": $fa-var-money-bill-wave-alt,
+ "life-ring": $fa-var-life-ring,
+ "hands": $fa-var-hands,
+ "sign-language": $fa-var-sign-language,
+ "signing": $fa-var-signing,
+ "calendar-day": $fa-var-calendar-day,
+ "water-ladder": $fa-var-water-ladder,
+ "ladder-water": $fa-var-ladder-water,
+ "swimming-pool": $fa-var-swimming-pool,
+ "arrows-up-down": $fa-var-arrows-up-down,
+ "arrows-v": $fa-var-arrows-v,
+ "face-grimace": $fa-var-face-grimace,
+ "grimace": $fa-var-grimace,
+ "wheelchair-move": $fa-var-wheelchair-move,
+ "wheelchair-alt": $fa-var-wheelchair-alt,
+ "turn-down": $fa-var-turn-down,
+ "level-down-alt": $fa-var-level-down-alt,
+ "person-walking-arrow-right": $fa-var-person-walking-arrow-right,
+ "square-envelope": $fa-var-square-envelope,
+ "envelope-square": $fa-var-envelope-square,
+ "dice": $fa-var-dice,
+ "bowling-ball": $fa-var-bowling-ball,
+ "brain": $fa-var-brain,
+ "bandage": $fa-var-bandage,
+ "band-aid": $fa-var-band-aid,
+ "calendar-minus": $fa-var-calendar-minus,
+ "circle-xmark": $fa-var-circle-xmark,
+ "times-circle": $fa-var-times-circle,
+ "xmark-circle": $fa-var-xmark-circle,
+ "gifts": $fa-var-gifts,
+ "hotel": $fa-var-hotel,
+ "earth-asia": $fa-var-earth-asia,
+ "globe-asia": $fa-var-globe-asia,
+ "id-card-clip": $fa-var-id-card-clip,
+ "id-card-alt": $fa-var-id-card-alt,
+ "magnifying-glass-plus": $fa-var-magnifying-glass-plus,
+ "search-plus": $fa-var-search-plus,
+ "thumbs-up": $fa-var-thumbs-up,
+ "user-clock": $fa-var-user-clock,
+ "hand-dots": $fa-var-hand-dots,
+ "allergies": $fa-var-allergies,
+ "file-invoice": $fa-var-file-invoice,
+ "window-minimize": $fa-var-window-minimize,
+ "mug-saucer": $fa-var-mug-saucer,
+ "coffee": $fa-var-coffee,
+ "brush": $fa-var-brush,
+ "mask": $fa-var-mask,
+ "magnifying-glass-minus": $fa-var-magnifying-glass-minus,
+ "search-minus": $fa-var-search-minus,
+ "ruler-vertical": $fa-var-ruler-vertical,
+ "user-large": $fa-var-user-large,
+ "user-alt": $fa-var-user-alt,
+ "train-tram": $fa-var-train-tram,
+ "user-nurse": $fa-var-user-nurse,
+ "syringe": $fa-var-syringe,
+ "cloud-sun": $fa-var-cloud-sun,
+ "stopwatch-20": $fa-var-stopwatch-20,
+ "square-full": $fa-var-square-full,
+ "magnet": $fa-var-magnet,
+ "jar": $fa-var-jar,
+ "note-sticky": $fa-var-note-sticky,
+ "sticky-note": $fa-var-sticky-note,
+ "bug-slash": $fa-var-bug-slash,
+ "arrow-up-from-water-pump": $fa-var-arrow-up-from-water-pump,
+ "bone": $fa-var-bone,
+ "user-injured": $fa-var-user-injured,
+ "face-sad-tear": $fa-var-face-sad-tear,
+ "sad-tear": $fa-var-sad-tear,
+ "plane": $fa-var-plane,
+ "tent-arrows-down": $fa-var-tent-arrows-down,
+ "exclamation": $fa-var-exclamation,
+ "arrows-spin": $fa-var-arrows-spin,
+ "print": $fa-var-print,
+ "turkish-lira-sign": $fa-var-turkish-lira-sign,
+ "try": $fa-var-try,
+ "turkish-lira": $fa-var-turkish-lira,
+ "dollar-sign": $fa-var-dollar-sign,
+ "dollar": $fa-var-dollar,
+ "usd": $fa-var-usd,
+ "x": $fa-var-x,
+ "magnifying-glass-dollar": $fa-var-magnifying-glass-dollar,
+ "search-dollar": $fa-var-search-dollar,
+ "users-gear": $fa-var-users-gear,
+ "users-cog": $fa-var-users-cog,
+ "person-military-pointing": $fa-var-person-military-pointing,
+ "building-columns": $fa-var-building-columns,
+ "bank": $fa-var-bank,
+ "institution": $fa-var-institution,
+ "museum": $fa-var-museum,
+ "university": $fa-var-university,
+ "umbrella": $fa-var-umbrella,
+ "trowel": $fa-var-trowel,
+ "d": $fa-var-d,
+ "stapler": $fa-var-stapler,
+ "masks-theater": $fa-var-masks-theater,
+ "theater-masks": $fa-var-theater-masks,
+ "kip-sign": $fa-var-kip-sign,
+ "hand-point-left": $fa-var-hand-point-left,
+ "handshake-simple": $fa-var-handshake-simple,
+ "handshake-alt": $fa-var-handshake-alt,
+ "jet-fighter": $fa-var-jet-fighter,
+ "fighter-jet": $fa-var-fighter-jet,
+ "square-share-nodes": $fa-var-square-share-nodes,
+ "share-alt-square": $fa-var-share-alt-square,
+ "barcode": $fa-var-barcode,
+ "plus-minus": $fa-var-plus-minus,
+ "video": $fa-var-video,
+ "video-camera": $fa-var-video-camera,
+ "graduation-cap": $fa-var-graduation-cap,
+ "mortar-board": $fa-var-mortar-board,
+ "hand-holding-medical": $fa-var-hand-holding-medical,
+ "person-circle-check": $fa-var-person-circle-check,
+ "turn-up": $fa-var-turn-up,
+ "level-up-alt": $fa-var-level-up-alt,
+);
+
+$fa-brand-icons: (
+ "monero": $fa-var-monero,
+ "hooli": $fa-var-hooli,
+ "yelp": $fa-var-yelp,
+ "cc-visa": $fa-var-cc-visa,
+ "lastfm": $fa-var-lastfm,
+ "shopware": $fa-var-shopware,
+ "creative-commons-nc": $fa-var-creative-commons-nc,
+ "aws": $fa-var-aws,
+ "redhat": $fa-var-redhat,
+ "yoast": $fa-var-yoast,
+ "cloudflare": $fa-var-cloudflare,
+ "ups": $fa-var-ups,
+ "wpexplorer": $fa-var-wpexplorer,
+ "dyalog": $fa-var-dyalog,
+ "bity": $fa-var-bity,
+ "stackpath": $fa-var-stackpath,
+ "buysellads": $fa-var-buysellads,
+ "first-order": $fa-var-first-order,
+ "modx": $fa-var-modx,
+ "guilded": $fa-var-guilded,
+ "vnv": $fa-var-vnv,
+ "square-js": $fa-var-square-js,
+ "js-square": $fa-var-js-square,
+ "microsoft": $fa-var-microsoft,
+ "qq": $fa-var-qq,
+ "orcid": $fa-var-orcid,
+ "java": $fa-var-java,
+ "invision": $fa-var-invision,
+ "creative-commons-pd-alt": $fa-var-creative-commons-pd-alt,
+ "centercode": $fa-var-centercode,
+ "glide-g": $fa-var-glide-g,
+ "drupal": $fa-var-drupal,
+ "hire-a-helper": $fa-var-hire-a-helper,
+ "creative-commons-by": $fa-var-creative-commons-by,
+ "unity": $fa-var-unity,
+ "whmcs": $fa-var-whmcs,
+ "rocketchat": $fa-var-rocketchat,
+ "vk": $fa-var-vk,
+ "untappd": $fa-var-untappd,
+ "mailchimp": $fa-var-mailchimp,
+ "css3-alt": $fa-var-css3-alt,
+ "square-reddit": $fa-var-square-reddit,
+ "reddit-square": $fa-var-reddit-square,
+ "vimeo-v": $fa-var-vimeo-v,
+ "contao": $fa-var-contao,
+ "square-font-awesome": $fa-var-square-font-awesome,
+ "deskpro": $fa-var-deskpro,
+ "sistrix": $fa-var-sistrix,
+ "square-instagram": $fa-var-square-instagram,
+ "instagram-square": $fa-var-instagram-square,
+ "battle-net": $fa-var-battle-net,
+ "the-red-yeti": $fa-var-the-red-yeti,
+ "square-hacker-news": $fa-var-square-hacker-news,
+ "hacker-news-square": $fa-var-hacker-news-square,
+ "edge": $fa-var-edge,
+ "threads": $fa-var-threads,
+ "napster": $fa-var-napster,
+ "square-snapchat": $fa-var-square-snapchat,
+ "snapchat-square": $fa-var-snapchat-square,
+ "google-plus-g": $fa-var-google-plus-g,
+ "artstation": $fa-var-artstation,
+ "markdown": $fa-var-markdown,
+ "sourcetree": $fa-var-sourcetree,
+ "google-plus": $fa-var-google-plus,
+ "diaspora": $fa-var-diaspora,
+ "foursquare": $fa-var-foursquare,
+ "stack-overflow": $fa-var-stack-overflow,
+ "github-alt": $fa-var-github-alt,
+ "phoenix-squadron": $fa-var-phoenix-squadron,
+ "pagelines": $fa-var-pagelines,
+ "algolia": $fa-var-algolia,
+ "red-river": $fa-var-red-river,
+ "creative-commons-sa": $fa-var-creative-commons-sa,
+ "safari": $fa-var-safari,
+ "google": $fa-var-google,
+ "square-font-awesome-stroke": $fa-var-square-font-awesome-stroke,
+ "font-awesome-alt": $fa-var-font-awesome-alt,
+ "atlassian": $fa-var-atlassian,
+ "linkedin-in": $fa-var-linkedin-in,
+ "digital-ocean": $fa-var-digital-ocean,
+ "nimblr": $fa-var-nimblr,
+ "chromecast": $fa-var-chromecast,
+ "evernote": $fa-var-evernote,
+ "hacker-news": $fa-var-hacker-news,
+ "creative-commons-sampling": $fa-var-creative-commons-sampling,
+ "adversal": $fa-var-adversal,
+ "creative-commons": $fa-var-creative-commons,
+ "watchman-monitoring": $fa-var-watchman-monitoring,
+ "fonticons": $fa-var-fonticons,
+ "weixin": $fa-var-weixin,
+ "shirtsinbulk": $fa-var-shirtsinbulk,
+ "codepen": $fa-var-codepen,
+ "git-alt": $fa-var-git-alt,
+ "lyft": $fa-var-lyft,
+ "rev": $fa-var-rev,
+ "windows": $fa-var-windows,
+ "wizards-of-the-coast": $fa-var-wizards-of-the-coast,
+ "square-viadeo": $fa-var-square-viadeo,
+ "viadeo-square": $fa-var-viadeo-square,
+ "meetup": $fa-var-meetup,
+ "centos": $fa-var-centos,
+ "adn": $fa-var-adn,
+ "cloudsmith": $fa-var-cloudsmith,
+ "pied-piper-alt": $fa-var-pied-piper-alt,
+ "square-dribbble": $fa-var-square-dribbble,
+ "dribbble-square": $fa-var-dribbble-square,
+ "codiepie": $fa-var-codiepie,
+ "node": $fa-var-node,
+ "mix": $fa-var-mix,
+ "steam": $fa-var-steam,
+ "cc-apple-pay": $fa-var-cc-apple-pay,
+ "scribd": $fa-var-scribd,
+ "debian": $fa-var-debian,
+ "openid": $fa-var-openid,
+ "instalod": $fa-var-instalod,
+ "expeditedssl": $fa-var-expeditedssl,
+ "sellcast": $fa-var-sellcast,
+ "square-twitter": $fa-var-square-twitter,
+ "twitter-square": $fa-var-twitter-square,
+ "r-project": $fa-var-r-project,
+ "delicious": $fa-var-delicious,
+ "freebsd": $fa-var-freebsd,
+ "vuejs": $fa-var-vuejs,
+ "accusoft": $fa-var-accusoft,
+ "ioxhost": $fa-var-ioxhost,
+ "fonticons-fi": $fa-var-fonticons-fi,
+ "app-store": $fa-var-app-store,
+ "cc-mastercard": $fa-var-cc-mastercard,
+ "itunes-note": $fa-var-itunes-note,
+ "golang": $fa-var-golang,
+ "kickstarter": $fa-var-kickstarter,
+ "grav": $fa-var-grav,
+ "weibo": $fa-var-weibo,
+ "uncharted": $fa-var-uncharted,
+ "firstdraft": $fa-var-firstdraft,
+ "square-youtube": $fa-var-square-youtube,
+ "youtube-square": $fa-var-youtube-square,
+ "wikipedia-w": $fa-var-wikipedia-w,
+ "wpressr": $fa-var-wpressr,
+ "rendact": $fa-var-rendact,
+ "angellist": $fa-var-angellist,
+ "galactic-republic": $fa-var-galactic-republic,
+ "nfc-directional": $fa-var-nfc-directional,
+ "skype": $fa-var-skype,
+ "joget": $fa-var-joget,
+ "fedora": $fa-var-fedora,
+ "stripe-s": $fa-var-stripe-s,
+ "meta": $fa-var-meta,
+ "laravel": $fa-var-laravel,
+ "hotjar": $fa-var-hotjar,
+ "bluetooth-b": $fa-var-bluetooth-b,
+ "sticker-mule": $fa-var-sticker-mule,
+ "creative-commons-zero": $fa-var-creative-commons-zero,
+ "hips": $fa-var-hips,
+ "behance": $fa-var-behance,
+ "reddit": $fa-var-reddit,
+ "discord": $fa-var-discord,
+ "chrome": $fa-var-chrome,
+ "app-store-ios": $fa-var-app-store-ios,
+ "cc-discover": $fa-var-cc-discover,
+ "wpbeginner": $fa-var-wpbeginner,
+ "confluence": $fa-var-confluence,
+ "mdb": $fa-var-mdb,
+ "dochub": $fa-var-dochub,
+ "accessible-icon": $fa-var-accessible-icon,
+ "ebay": $fa-var-ebay,
+ "amazon": $fa-var-amazon,
+ "unsplash": $fa-var-unsplash,
+ "yarn": $fa-var-yarn,
+ "square-steam": $fa-var-square-steam,
+ "steam-square": $fa-var-steam-square,
+ "500px": $fa-var-500px,
+ "square-vimeo": $fa-var-square-vimeo,
+ "vimeo-square": $fa-var-vimeo-square,
+ "asymmetrik": $fa-var-asymmetrik,
+ "font-awesome": $fa-var-font-awesome,
+ "font-awesome-flag": $fa-var-font-awesome-flag,
+ "font-awesome-logo-full": $fa-var-font-awesome-logo-full,
+ "gratipay": $fa-var-gratipay,
+ "apple": $fa-var-apple,
+ "hive": $fa-var-hive,
+ "gitkraken": $fa-var-gitkraken,
+ "keybase": $fa-var-keybase,
+ "apple-pay": $fa-var-apple-pay,
+ "padlet": $fa-var-padlet,
+ "amazon-pay": $fa-var-amazon-pay,
+ "square-github": $fa-var-square-github,
+ "github-square": $fa-var-github-square,
+ "stumbleupon": $fa-var-stumbleupon,
+ "fedex": $fa-var-fedex,
+ "phoenix-framework": $fa-var-phoenix-framework,
+ "shopify": $fa-var-shopify,
+ "neos": $fa-var-neos,
+ "square-threads": $fa-var-square-threads,
+ "hackerrank": $fa-var-hackerrank,
+ "researchgate": $fa-var-researchgate,
+ "swift": $fa-var-swift,
+ "angular": $fa-var-angular,
+ "speakap": $fa-var-speakap,
+ "angrycreative": $fa-var-angrycreative,
+ "y-combinator": $fa-var-y-combinator,
+ "empire": $fa-var-empire,
+ "envira": $fa-var-envira,
+ "square-gitlab": $fa-var-square-gitlab,
+ "gitlab-square": $fa-var-gitlab-square,
+ "studiovinari": $fa-var-studiovinari,
+ "pied-piper": $fa-var-pied-piper,
+ "wordpress": $fa-var-wordpress,
+ "product-hunt": $fa-var-product-hunt,
+ "firefox": $fa-var-firefox,
+ "linode": $fa-var-linode,
+ "goodreads": $fa-var-goodreads,
+ "square-odnoklassniki": $fa-var-square-odnoklassniki,
+ "odnoklassniki-square": $fa-var-odnoklassniki-square,
+ "jsfiddle": $fa-var-jsfiddle,
+ "sith": $fa-var-sith,
+ "themeisle": $fa-var-themeisle,
+ "page4": $fa-var-page4,
+ "hashnode": $fa-var-hashnode,
+ "react": $fa-var-react,
+ "cc-paypal": $fa-var-cc-paypal,
+ "squarespace": $fa-var-squarespace,
+ "cc-stripe": $fa-var-cc-stripe,
+ "creative-commons-share": $fa-var-creative-commons-share,
+ "bitcoin": $fa-var-bitcoin,
+ "keycdn": $fa-var-keycdn,
+ "opera": $fa-var-opera,
+ "itch-io": $fa-var-itch-io,
+ "umbraco": $fa-var-umbraco,
+ "galactic-senate": $fa-var-galactic-senate,
+ "ubuntu": $fa-var-ubuntu,
+ "draft2digital": $fa-var-draft2digital,
+ "stripe": $fa-var-stripe,
+ "houzz": $fa-var-houzz,
+ "gg": $fa-var-gg,
+ "dhl": $fa-var-dhl,
+ "square-pinterest": $fa-var-square-pinterest,
+ "pinterest-square": $fa-var-pinterest-square,
+ "xing": $fa-var-xing,
+ "blackberry": $fa-var-blackberry,
+ "creative-commons-pd": $fa-var-creative-commons-pd,
+ "playstation": $fa-var-playstation,
+ "quinscape": $fa-var-quinscape,
+ "less": $fa-var-less,
+ "blogger-b": $fa-var-blogger-b,
+ "opencart": $fa-var-opencart,
+ "vine": $fa-var-vine,
+ "paypal": $fa-var-paypal,
+ "gitlab": $fa-var-gitlab,
+ "typo3": $fa-var-typo3,
+ "reddit-alien": $fa-var-reddit-alien,
+ "yahoo": $fa-var-yahoo,
+ "dailymotion": $fa-var-dailymotion,
+ "affiliatetheme": $fa-var-affiliatetheme,
+ "pied-piper-pp": $fa-var-pied-piper-pp,
+ "bootstrap": $fa-var-bootstrap,
+ "odnoklassniki": $fa-var-odnoklassniki,
+ "nfc-symbol": $fa-var-nfc-symbol,
+ "ethereum": $fa-var-ethereum,
+ "speaker-deck": $fa-var-speaker-deck,
+ "creative-commons-nc-eu": $fa-var-creative-commons-nc-eu,
+ "patreon": $fa-var-patreon,
+ "avianex": $fa-var-avianex,
+ "ello": $fa-var-ello,
+ "gofore": $fa-var-gofore,
+ "bimobject": $fa-var-bimobject,
+ "facebook-f": $fa-var-facebook-f,
+ "square-google-plus": $fa-var-square-google-plus,
+ "google-plus-square": $fa-var-google-plus-square,
+ "mandalorian": $fa-var-mandalorian,
+ "first-order-alt": $fa-var-first-order-alt,
+ "osi": $fa-var-osi,
+ "google-wallet": $fa-var-google-wallet,
+ "d-and-d-beyond": $fa-var-d-and-d-beyond,
+ "periscope": $fa-var-periscope,
+ "fulcrum": $fa-var-fulcrum,
+ "cloudscale": $fa-var-cloudscale,
+ "forumbee": $fa-var-forumbee,
+ "mizuni": $fa-var-mizuni,
+ "schlix": $fa-var-schlix,
+ "square-xing": $fa-var-square-xing,
+ "xing-square": $fa-var-xing-square,
+ "bandcamp": $fa-var-bandcamp,
+ "wpforms": $fa-var-wpforms,
+ "cloudversify": $fa-var-cloudversify,
+ "usps": $fa-var-usps,
+ "megaport": $fa-var-megaport,
+ "magento": $fa-var-magento,
+ "spotify": $fa-var-spotify,
+ "optin-monster": $fa-var-optin-monster,
+ "fly": $fa-var-fly,
+ "aviato": $fa-var-aviato,
+ "itunes": $fa-var-itunes,
+ "cuttlefish": $fa-var-cuttlefish,
+ "blogger": $fa-var-blogger,
+ "flickr": $fa-var-flickr,
+ "viber": $fa-var-viber,
+ "soundcloud": $fa-var-soundcloud,
+ "digg": $fa-var-digg,
+ "tencent-weibo": $fa-var-tencent-weibo,
+ "symfony": $fa-var-symfony,
+ "maxcdn": $fa-var-maxcdn,
+ "etsy": $fa-var-etsy,
+ "facebook-messenger": $fa-var-facebook-messenger,
+ "audible": $fa-var-audible,
+ "think-peaks": $fa-var-think-peaks,
+ "bilibili": $fa-var-bilibili,
+ "erlang": $fa-var-erlang,
+ "x-twitter": $fa-var-x-twitter,
+ "cotton-bureau": $fa-var-cotton-bureau,
+ "dashcube": $fa-var-dashcube,
+ "42-group": $fa-var-42-group,
+ "innosoft": $fa-var-innosoft,
+ "stack-exchange": $fa-var-stack-exchange,
+ "elementor": $fa-var-elementor,
+ "square-pied-piper": $fa-var-square-pied-piper,
+ "pied-piper-square": $fa-var-pied-piper-square,
+ "creative-commons-nd": $fa-var-creative-commons-nd,
+ "palfed": $fa-var-palfed,
+ "superpowers": $fa-var-superpowers,
+ "resolving": $fa-var-resolving,
+ "xbox": $fa-var-xbox,
+ "searchengin": $fa-var-searchengin,
+ "tiktok": $fa-var-tiktok,
+ "square-facebook": $fa-var-square-facebook,
+ "facebook-square": $fa-var-facebook-square,
+ "renren": $fa-var-renren,
+ "linux": $fa-var-linux,
+ "glide": $fa-var-glide,
+ "linkedin": $fa-var-linkedin,
+ "hubspot": $fa-var-hubspot,
+ "deploydog": $fa-var-deploydog,
+ "twitch": $fa-var-twitch,
+ "ravelry": $fa-var-ravelry,
+ "mixer": $fa-var-mixer,
+ "square-lastfm": $fa-var-square-lastfm,
+ "lastfm-square": $fa-var-lastfm-square,
+ "vimeo": $fa-var-vimeo,
+ "mendeley": $fa-var-mendeley,
+ "uniregistry": $fa-var-uniregistry,
+ "figma": $fa-var-figma,
+ "creative-commons-remix": $fa-var-creative-commons-remix,
+ "cc-amazon-pay": $fa-var-cc-amazon-pay,
+ "dropbox": $fa-var-dropbox,
+ "instagram": $fa-var-instagram,
+ "cmplid": $fa-var-cmplid,
+ "facebook": $fa-var-facebook,
+ "gripfire": $fa-var-gripfire,
+ "jedi-order": $fa-var-jedi-order,
+ "uikit": $fa-var-uikit,
+ "fort-awesome-alt": $fa-var-fort-awesome-alt,
+ "phabricator": $fa-var-phabricator,
+ "ussunnah": $fa-var-ussunnah,
+ "earlybirds": $fa-var-earlybirds,
+ "trade-federation": $fa-var-trade-federation,
+ "autoprefixer": $fa-var-autoprefixer,
+ "whatsapp": $fa-var-whatsapp,
+ "slideshare": $fa-var-slideshare,
+ "google-play": $fa-var-google-play,
+ "viadeo": $fa-var-viadeo,
+ "line": $fa-var-line,
+ "google-drive": $fa-var-google-drive,
+ "servicestack": $fa-var-servicestack,
+ "simplybuilt": $fa-var-simplybuilt,
+ "bitbucket": $fa-var-bitbucket,
+ "imdb": $fa-var-imdb,
+ "deezer": $fa-var-deezer,
+ "raspberry-pi": $fa-var-raspberry-pi,
+ "jira": $fa-var-jira,
+ "docker": $fa-var-docker,
+ "screenpal": $fa-var-screenpal,
+ "bluetooth": $fa-var-bluetooth,
+ "gitter": $fa-var-gitter,
+ "d-and-d": $fa-var-d-and-d,
+ "microblog": $fa-var-microblog,
+ "cc-diners-club": $fa-var-cc-diners-club,
+ "gg-circle": $fa-var-gg-circle,
+ "pied-piper-hat": $fa-var-pied-piper-hat,
+ "kickstarter-k": $fa-var-kickstarter-k,
+ "yandex": $fa-var-yandex,
+ "readme": $fa-var-readme,
+ "html5": $fa-var-html5,
+ "sellsy": $fa-var-sellsy,
+ "sass": $fa-var-sass,
+ "wirsindhandwerk": $fa-var-wirsindhandwerk,
+ "wsh": $fa-var-wsh,
+ "buromobelexperte": $fa-var-buromobelexperte,
+ "salesforce": $fa-var-salesforce,
+ "octopus-deploy": $fa-var-octopus-deploy,
+ "medapps": $fa-var-medapps,
+ "ns8": $fa-var-ns8,
+ "pinterest-p": $fa-var-pinterest-p,
+ "apper": $fa-var-apper,
+ "fort-awesome": $fa-var-fort-awesome,
+ "waze": $fa-var-waze,
+ "cc-jcb": $fa-var-cc-jcb,
+ "snapchat": $fa-var-snapchat,
+ "snapchat-ghost": $fa-var-snapchat-ghost,
+ "fantasy-flight-games": $fa-var-fantasy-flight-games,
+ "rust": $fa-var-rust,
+ "wix": $fa-var-wix,
+ "square-behance": $fa-var-square-behance,
+ "behance-square": $fa-var-behance-square,
+ "supple": $fa-var-supple,
+ "rebel": $fa-var-rebel,
+ "css3": $fa-var-css3,
+ "staylinked": $fa-var-staylinked,
+ "kaggle": $fa-var-kaggle,
+ "space-awesome": $fa-var-space-awesome,
+ "deviantart": $fa-var-deviantart,
+ "cpanel": $fa-var-cpanel,
+ "goodreads-g": $fa-var-goodreads-g,
+ "square-git": $fa-var-square-git,
+ "git-square": $fa-var-git-square,
+ "square-tumblr": $fa-var-square-tumblr,
+ "tumblr-square": $fa-var-tumblr-square,
+ "trello": $fa-var-trello,
+ "creative-commons-nc-jp": $fa-var-creative-commons-nc-jp,
+ "get-pocket": $fa-var-get-pocket,
+ "perbyte": $fa-var-perbyte,
+ "grunt": $fa-var-grunt,
+ "weebly": $fa-var-weebly,
+ "connectdevelop": $fa-var-connectdevelop,
+ "leanpub": $fa-var-leanpub,
+ "black-tie": $fa-var-black-tie,
+ "themeco": $fa-var-themeco,
+ "python": $fa-var-python,
+ "android": $fa-var-android,
+ "bots": $fa-var-bots,
+ "free-code-camp": $fa-var-free-code-camp,
+ "hornbill": $fa-var-hornbill,
+ "js": $fa-var-js,
+ "ideal": $fa-var-ideal,
+ "git": $fa-var-git,
+ "dev": $fa-var-dev,
+ "sketch": $fa-var-sketch,
+ "yandex-international": $fa-var-yandex-international,
+ "cc-amex": $fa-var-cc-amex,
+ "uber": $fa-var-uber,
+ "github": $fa-var-github,
+ "php": $fa-var-php,
+ "alipay": $fa-var-alipay,
+ "youtube": $fa-var-youtube,
+ "skyatlas": $fa-var-skyatlas,
+ "firefox-browser": $fa-var-firefox-browser,
+ "replyd": $fa-var-replyd,
+ "suse": $fa-var-suse,
+ "jenkins": $fa-var-jenkins,
+ "twitter": $fa-var-twitter,
+ "rockrms": $fa-var-rockrms,
+ "pinterest": $fa-var-pinterest,
+ "buffer": $fa-var-buffer,
+ "npm": $fa-var-npm,
+ "yammer": $fa-var-yammer,
+ "btc": $fa-var-btc,
+ "dribbble": $fa-var-dribbble,
+ "stumbleupon-circle": $fa-var-stumbleupon-circle,
+ "internet-explorer": $fa-var-internet-explorer,
+ "stubber": $fa-var-stubber,
+ "telegram": $fa-var-telegram,
+ "telegram-plane": $fa-var-telegram-plane,
+ "old-republic": $fa-var-old-republic,
+ "odysee": $fa-var-odysee,
+ "square-whatsapp": $fa-var-square-whatsapp,
+ "whatsapp-square": $fa-var-whatsapp-square,
+ "node-js": $fa-var-node-js,
+ "edge-legacy": $fa-var-edge-legacy,
+ "slack": $fa-var-slack,
+ "slack-hash": $fa-var-slack-hash,
+ "medrt": $fa-var-medrt,
+ "usb": $fa-var-usb,
+ "tumblr": $fa-var-tumblr,
+ "vaadin": $fa-var-vaadin,
+ "quora": $fa-var-quora,
+ "square-x-twitter": $fa-var-square-x-twitter,
+ "reacteurope": $fa-var-reacteurope,
+ "medium": $fa-var-medium,
+ "medium-m": $fa-var-medium-m,
+ "amilia": $fa-var-amilia,
+ "mixcloud": $fa-var-mixcloud,
+ "flipboard": $fa-var-flipboard,
+ "viacoin": $fa-var-viacoin,
+ "critical-role": $fa-var-critical-role,
+ "sitrox": $fa-var-sitrox,
+ "discourse": $fa-var-discourse,
+ "joomla": $fa-var-joomla,
+ "mastodon": $fa-var-mastodon,
+ "airbnb": $fa-var-airbnb,
+ "wolf-pack-battalion": $fa-var-wolf-pack-battalion,
+ "buy-n-large": $fa-var-buy-n-large,
+ "gulp": $fa-var-gulp,
+ "creative-commons-sampling-plus": $fa-var-creative-commons-sampling-plus,
+ "strava": $fa-var-strava,
+ "ember": $fa-var-ember,
+ "canadian-maple-leaf": $fa-var-canadian-maple-leaf,
+ "teamspeak": $fa-var-teamspeak,
+ "pushed": $fa-var-pushed,
+ "wordpress-simple": $fa-var-wordpress-simple,
+ "nutritionix": $fa-var-nutritionix,
+ "wodu": $fa-var-wodu,
+ "google-pay": $fa-var-google-pay,
+ "intercom": $fa-var-intercom,
+ "zhihu": $fa-var-zhihu,
+ "korvue": $fa-var-korvue,
+ "pix": $fa-var-pix,
+ "steam-symbol": $fa-var-steam-symbol,
+);
diff --git a/_sass/font-awesome/brands.scss b/_sass/font-awesome/brands.scss
index e05c82b6..60346ba6 100644
--- a/_sass/font-awesome/brands.scss
+++ b/_sass/font-awesome/brands.scss
@@ -1,34 +1,34 @@
-/*!
- * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- * Copyright 2023 Fonticons, Inc.
- */
-@import "functions";
-@import "variables";
-
-:root,
-:host {
- --#{$fa-css-prefix}-style-family-brands: "Font Awesome 6 Brands";
- --#{$fa-css-prefix}-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";
-}
-
-@font-face {
- font-family: "Font Awesome 6 Brands";
- font-style: normal;
- font-weight: 400;
- font-display: $fa-font-display;
- src:
- url("#{$fa-font-path}/fa-brands-400.woff2") format("woff2"),
- url("#{$fa-font-path}/fa-brands-400.ttf") format("truetype");
-}
-
-.fab,
-.#{$fa-css-prefix}-brands {
- font-weight: 400;
-}
-
-@each $name, $icon in $fa-brand-icons {
- .#{$fa-css-prefix}-#{$name}:before {
- content: unquote('"#{ $icon }"');
- }
-}
+/*!
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+@import "functions";
+@import "variables";
+
+:root,
+:host {
+ --#{$fa-css-prefix}-style-family-brands: "Font Awesome 6 Brands";
+ --#{$fa-css-prefix}-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";
+}
+
+@font-face {
+ font-family: "Font Awesome 6 Brands";
+ font-style: normal;
+ font-weight: 400;
+ font-display: $fa-font-display;
+ src:
+ url("#{$fa-font-path}/fa-brands-400.woff2") format("woff2"),
+ url("#{$fa-font-path}/fa-brands-400.ttf") format("truetype");
+}
+
+.fab,
+.#{$fa-css-prefix}-brands {
+ font-weight: 400;
+}
+
+@each $name, $icon in $fa-brand-icons {
+ .#{$fa-css-prefix}-#{$name}:before {
+ content: unquote('"#{ $icon }"');
+ }
+}
diff --git a/_sass/font-awesome/fontawesome.scss b/_sass/font-awesome/fontawesome.scss
index 4fa47db3..e43d0d26 100644
--- a/_sass/font-awesome/fontawesome.scss
+++ b/_sass/font-awesome/fontawesome.scss
@@ -1,21 +1,21 @@
-/*!
- * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- * Copyright 2023 Fonticons, Inc.
- */
-// Font Awesome core compile (Web Fonts-based)
-// -------------------------
-
-@import "functions";
-@import "variables";
-@import "mixins";
-@import "core";
-@import "sizing";
-@import "fixed-width";
-@import "list";
-@import "bordered-pulled";
-@import "animated";
-@import "rotated-flipped";
-@import "stacked";
-@import "icons";
-@import "screen-reader";
+/*!
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+// Font Awesome core compile (Web Fonts-based)
+// -------------------------
+
+@import "functions";
+@import "variables";
+@import "mixins";
+@import "core";
+@import "sizing";
+@import "fixed-width";
+@import "list";
+@import "bordered-pulled";
+@import "animated";
+@import "rotated-flipped";
+@import "stacked";
+@import "icons";
+@import "screen-reader";
diff --git a/_sass/font-awesome/regular.scss b/_sass/font-awesome/regular.scss
index 3430497f..3d962b3e 100644
--- a/_sass/font-awesome/regular.scss
+++ b/_sass/font-awesome/regular.scss
@@ -1,28 +1,28 @@
-/*!
- * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- * Copyright 2023 Fonticons, Inc.
- */
-@import "functions";
-@import "variables";
-
-:root,
-:host {
- --#{$fa-css-prefix}-style-family-classic: "#{ $fa-style-family }";
- --#{$fa-css-prefix}-font-regular: normal 400 1em/1 "#{ $fa-style-family }";
-}
-
-@font-face {
- font-family: "Font Awesome 6 Free";
- font-style: normal;
- font-weight: 400;
- font-display: $fa-font-display;
- src:
- url("#{$fa-font-path}/fa-regular-400.woff2") format("woff2"),
- url("#{$fa-font-path}/fa-regular-400.ttf") format("truetype");
-}
-
-.far,
-.#{$fa-css-prefix}-regular {
- font-weight: 400;
-}
+/*!
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+@import "functions";
+@import "variables";
+
+:root,
+:host {
+ --#{$fa-css-prefix}-style-family-classic: "#{ $fa-style-family }";
+ --#{$fa-css-prefix}-font-regular: normal 400 1em/1 "#{ $fa-style-family }";
+}
+
+@font-face {
+ font-family: "Font Awesome 6 Free";
+ font-style: normal;
+ font-weight: 400;
+ font-display: $fa-font-display;
+ src:
+ url("#{$fa-font-path}/fa-regular-400.woff2") format("woff2"),
+ url("#{$fa-font-path}/fa-regular-400.ttf") format("truetype");
+}
+
+.far,
+.#{$fa-css-prefix}-regular {
+ font-weight: 400;
+}
diff --git a/_sass/font-awesome/solid.scss b/_sass/font-awesome/solid.scss
index 5d5c168f..d93eb464 100644
--- a/_sass/font-awesome/solid.scss
+++ b/_sass/font-awesome/solid.scss
@@ -1,28 +1,28 @@
-/*!
- * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- * Copyright 2023 Fonticons, Inc.
- */
-@import "functions";
-@import "variables";
-
-:root,
-:host {
- --#{$fa-css-prefix}-style-family-classic: "#{ $fa-style-family }";
- --#{$fa-css-prefix}-font-solid: normal 900 1em/1 "#{ $fa-style-family }";
-}
-
-@font-face {
- font-family: "Font Awesome 6 Free";
- font-style: normal;
- font-weight: 900;
- font-display: $fa-font-display;
- src:
- url("#{$fa-font-path}/fa-solid-900.woff2") format("woff2"),
- url("#{$fa-font-path}/fa-solid-900.ttf") format("truetype");
-}
-
-.fas,
-.#{$fa-css-prefix}-solid {
- font-weight: 900;
-}
+/*!
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+@import "functions";
+@import "variables";
+
+:root,
+:host {
+ --#{$fa-css-prefix}-style-family-classic: "#{ $fa-style-family }";
+ --#{$fa-css-prefix}-font-solid: normal 900 1em/1 "#{ $fa-style-family }";
+}
+
+@font-face {
+ font-family: "Font Awesome 6 Free";
+ font-style: normal;
+ font-weight: 900;
+ font-display: $fa-font-display;
+ src:
+ url("#{$fa-font-path}/fa-solid-900.woff2") format("woff2"),
+ url("#{$fa-font-path}/fa-solid-900.ttf") format("truetype");
+}
+
+.fas,
+.#{$fa-css-prefix}-solid {
+ font-weight: 900;
+}
diff --git a/_sass/font-awesome/v4-shims.scss b/_sass/font-awesome/v4-shims.scss
index e67b8f83..b6331ed4 100644
--- a/_sass/font-awesome/v4-shims.scss
+++ b/_sass/font-awesome/v4-shims.scss
@@ -1,11 +1,11 @@
-/*!
- * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- * Copyright 2023 Fonticons, Inc.
- */
-// V4 shims compile (Web Fonts-based)
-// -------------------------
-
-@import "functions";
-@import "variables";
-@import "shims";
+/*!
+ * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2023 Fonticons, Inc.
+ */
+// V4 shims compile (Web Fonts-based)
+// -------------------------
+
+@import "functions";
+@import "variables";
+@import "shims";
diff --git a/assets/css/jekyll-pygments-themes-github.css b/assets/css/jekyll-pygments-themes-github.css
index 3c17d62a..8e39cc4b 100644
--- a/assets/css/jekyll-pygments-themes-github.css
+++ b/assets/css/jekyll-pygments-themes-github.css
@@ -1,209 +1,209 @@
-/* https://github.com/jwarby/jekyll-pygments-themes */
-.highlight .hll {
- background-color: #ffffcc;
-}
-.highlight .c {
- color: #999988;
- font-style: italic;
-} /* Comment */
-.highlight .err {
- color: #a61717;
- background-color: #e3d2d2;
-} /* Error */
-.highlight .k {
- color: #000000;
- font-weight: bold;
-} /* Keyword */
-.highlight .o {
- color: #000000;
- font-weight: bold;
-} /* Operator */
-.highlight .cm {
- color: #999988;
- font-style: italic;
-} /* Comment.Multiline */
-.highlight .cp {
- color: #999999;
- font-weight: bold;
- font-style: italic;
-} /* Comment.Preproc */
-.highlight .c1 {
- color: #999988;
- font-style: italic;
-} /* Comment.Single */
-.highlight .cs {
- color: #999999;
- font-weight: bold;
- font-style: italic;
-} /* Comment.Special */
-.highlight .gd {
- color: #000000;
- background-color: #ffdddd;
-} /* Generic.Deleted */
-.highlight .ge {
- color: #000000;
- font-style: italic;
-} /* Generic.Emph */
-.highlight .gr {
- color: #aa0000;
-} /* Generic.Error */
-.highlight .gh {
- color: #999999;
-} /* Generic.Heading */
-.highlight .gi {
- color: #000000;
- background-color: #ddffdd;
-} /* Generic.Inserted */
-.highlight .go {
- color: #888888;
-} /* Generic.Output */
-.highlight .gp {
- color: #555555;
-} /* Generic.Prompt */
-.highlight .gs {
- font-weight: bold;
-} /* Generic.Strong */
-.highlight .gu {
- color: #aaaaaa;
-} /* Generic.Subheading */
-.highlight .gt {
- color: #aa0000;
-} /* Generic.Traceback */
-.highlight .kc {
- color: #000000;
- font-weight: bold;
-} /* Keyword.Constant */
-.highlight .kd {
- color: #000000;
- font-weight: bold;
-} /* Keyword.Declaration */
-.highlight .kn {
- color: #000000;
- font-weight: bold;
-} /* Keyword.Namespace */
-.highlight .kp {
- color: #000000;
- font-weight: bold;
-} /* Keyword.Pseudo */
-.highlight .kr {
- color: #000000;
- font-weight: bold;
-} /* Keyword.Reserved */
-.highlight .kt {
- color: #445588;
- font-weight: bold;
-} /* Keyword.Type */
-.highlight .m {
- color: #009999;
-} /* Literal.Number */
-.highlight .s {
- color: #d01040;
-} /* Literal.String */
-.highlight .na {
- color: #008080;
-} /* Name.Attribute */
-.highlight .nb {
- color: #0086b3;
-} /* Name.Builtin */
-.highlight .nc {
- color: #445588;
- font-weight: bold;
-} /* Name.Class */
-.highlight .no {
- color: #008080;
-} /* Name.Constant */
-.highlight .nd {
- color: #3c5d5d;
- font-weight: bold;
-} /* Name.Decorator */
-.highlight .ni {
- color: #800080;
-} /* Name.Entity */
-.highlight .ne {
- color: #990000;
- font-weight: bold;
-} /* Name.Exception */
-.highlight .nf {
- color: #990000;
- font-weight: bold;
-} /* Name.Function */
-.highlight .nl {
- color: #990000;
- font-weight: bold;
-} /* Name.Label */
-.highlight .nn {
- color: #555555;
-} /* Name.Namespace */
-.highlight .nt {
- color: #000080;
-} /* Name.Tag */
-.highlight .nv {
- color: #008080;
-} /* Name.Variable */
-.highlight .ow {
- color: #000000;
- font-weight: bold;
-} /* Operator.Word */
-.highlight .w {
- color: #bbbbbb;
-} /* Text.Whitespace */
-.highlight .mf {
- color: #009999;
-} /* Literal.Number.Float */
-.highlight .mh {
- color: #009999;
-} /* Literal.Number.Hex */
-.highlight .mi {
- color: #009999;
-} /* Literal.Number.Integer */
-.highlight .mo {
- color: #009999;
-} /* Literal.Number.Oct */
-.highlight .sb {
- color: #d01040;
-} /* Literal.String.Backtick */
-.highlight .sc {
- color: #d01040;
-} /* Literal.String.Char */
-.highlight .sd {
- color: #d01040;
-} /* Literal.String.Doc */
-.highlight .s2 {
- color: #d01040;
-} /* Literal.String.Double */
-.highlight .se {
- color: #d01040;
-} /* Literal.String.Escape */
-.highlight .sh {
- color: #d01040;
-} /* Literal.String.Heredoc */
-.highlight .si {
- color: #d01040;
-} /* Literal.String.Interpol */
-.highlight .sx {
- color: #d01040;
-} /* Literal.String.Other */
-.highlight .sr {
- color: #009926;
-} /* Literal.String.Regex */
-.highlight .s1 {
- color: #d01040;
-} /* Literal.String.Single */
-.highlight .ss {
- color: #990073;
-} /* Literal.String.Symbol */
-.highlight .bp {
- color: #999999;
-} /* Name.Builtin.Pseudo */
-.highlight .vc {
- color: #008080;
-} /* Name.Variable.Class */
-.highlight .vg {
- color: #008080;
-} /* Name.Variable.Global */
-.highlight .vi {
- color: #008080;
-} /* Name.Variable.Instance */
-.highlight .il {
- color: #009999;
-} /* Literal.Number.Integer.Long */
+/* https://github.com/jwarby/jekyll-pygments-themes */
+.highlight .hll {
+ background-color: #ffffcc;
+}
+.highlight .c {
+ color: #999988;
+ font-style: italic;
+} /* Comment */
+.highlight .err {
+ color: #a61717;
+ background-color: #e3d2d2;
+} /* Error */
+.highlight .k {
+ color: #000000;
+ font-weight: bold;
+} /* Keyword */
+.highlight .o {
+ color: #000000;
+ font-weight: bold;
+} /* Operator */
+.highlight .cm {
+ color: #999988;
+ font-style: italic;
+} /* Comment.Multiline */
+.highlight .cp {
+ color: #999999;
+ font-weight: bold;
+ font-style: italic;
+} /* Comment.Preproc */
+.highlight .c1 {
+ color: #999988;
+ font-style: italic;
+} /* Comment.Single */
+.highlight .cs {
+ color: #999999;
+ font-weight: bold;
+ font-style: italic;
+} /* Comment.Special */
+.highlight .gd {
+ color: #000000;
+ background-color: #ffdddd;
+} /* Generic.Deleted */
+.highlight .ge {
+ color: #000000;
+ font-style: italic;
+} /* Generic.Emph */
+.highlight .gr {
+ color: #aa0000;
+} /* Generic.Error */
+.highlight .gh {
+ color: #999999;
+} /* Generic.Heading */
+.highlight .gi {
+ color: #000000;
+ background-color: #ddffdd;
+} /* Generic.Inserted */
+.highlight .go {
+ color: #888888;
+} /* Generic.Output */
+.highlight .gp {
+ color: #555555;
+} /* Generic.Prompt */
+.highlight .gs {
+ font-weight: bold;
+} /* Generic.Strong */
+.highlight .gu {
+ color: #aaaaaa;
+} /* Generic.Subheading */
+.highlight .gt {
+ color: #aa0000;
+} /* Generic.Traceback */
+.highlight .kc {
+ color: #000000;
+ font-weight: bold;
+} /* Keyword.Constant */
+.highlight .kd {
+ color: #000000;
+ font-weight: bold;
+} /* Keyword.Declaration */
+.highlight .kn {
+ color: #000000;
+ font-weight: bold;
+} /* Keyword.Namespace */
+.highlight .kp {
+ color: #000000;
+ font-weight: bold;
+} /* Keyword.Pseudo */
+.highlight .kr {
+ color: #000000;
+ font-weight: bold;
+} /* Keyword.Reserved */
+.highlight .kt {
+ color: #445588;
+ font-weight: bold;
+} /* Keyword.Type */
+.highlight .m {
+ color: #009999;
+} /* Literal.Number */
+.highlight .s {
+ color: #d01040;
+} /* Literal.String */
+.highlight .na {
+ color: #008080;
+} /* Name.Attribute */
+.highlight .nb {
+ color: #0086b3;
+} /* Name.Builtin */
+.highlight .nc {
+ color: #445588;
+ font-weight: bold;
+} /* Name.Class */
+.highlight .no {
+ color: #008080;
+} /* Name.Constant */
+.highlight .nd {
+ color: #3c5d5d;
+ font-weight: bold;
+} /* Name.Decorator */
+.highlight .ni {
+ color: #800080;
+} /* Name.Entity */
+.highlight .ne {
+ color: #990000;
+ font-weight: bold;
+} /* Name.Exception */
+.highlight .nf {
+ color: #990000;
+ font-weight: bold;
+} /* Name.Function */
+.highlight .nl {
+ color: #990000;
+ font-weight: bold;
+} /* Name.Label */
+.highlight .nn {
+ color: #555555;
+} /* Name.Namespace */
+.highlight .nt {
+ color: #000080;
+} /* Name.Tag */
+.highlight .nv {
+ color: #008080;
+} /* Name.Variable */
+.highlight .ow {
+ color: #000000;
+ font-weight: bold;
+} /* Operator.Word */
+.highlight .w {
+ color: #bbbbbb;
+} /* Text.Whitespace */
+.highlight .mf {
+ color: #009999;
+} /* Literal.Number.Float */
+.highlight .mh {
+ color: #009999;
+} /* Literal.Number.Hex */
+.highlight .mi {
+ color: #009999;
+} /* Literal.Number.Integer */
+.highlight .mo {
+ color: #009999;
+} /* Literal.Number.Oct */
+.highlight .sb {
+ color: #d01040;
+} /* Literal.String.Backtick */
+.highlight .sc {
+ color: #d01040;
+} /* Literal.String.Char */
+.highlight .sd {
+ color: #d01040;
+} /* Literal.String.Doc */
+.highlight .s2 {
+ color: #d01040;
+} /* Literal.String.Double */
+.highlight .se {
+ color: #d01040;
+} /* Literal.String.Escape */
+.highlight .sh {
+ color: #d01040;
+} /* Literal.String.Heredoc */
+.highlight .si {
+ color: #d01040;
+} /* Literal.String.Interpol */
+.highlight .sx {
+ color: #d01040;
+} /* Literal.String.Other */
+.highlight .sr {
+ color: #009926;
+} /* Literal.String.Regex */
+.highlight .s1 {
+ color: #d01040;
+} /* Literal.String.Single */
+.highlight .ss {
+ color: #990073;
+} /* Literal.String.Symbol */
+.highlight .bp {
+ color: #999999;
+} /* Name.Builtin.Pseudo */
+.highlight .vc {
+ color: #008080;
+} /* Name.Variable.Class */
+.highlight .vg {
+ color: #008080;
+} /* Name.Variable.Global */
+.highlight .vi {
+ color: #008080;
+} /* Name.Variable.Instance */
+.highlight .il {
+ color: #009999;
+} /* Literal.Number.Integer.Long */
diff --git a/assets/css/jekyll-pygments-themes-native.css b/assets/css/jekyll-pygments-themes-native.css
index d0c7bcd2..0140e259 100644
--- a/assets/css/jekyll-pygments-themes-native.css
+++ b/assets/css/jekyll-pygments-themes-native.css
@@ -1,232 +1,232 @@
-/* https://github.com/jwarby/jekyll-pygments-themes */
-.highlight pre {
- background-color: #404040;
-}
-.highlight .hll {
- background-color: #404040;
-}
-.highlight .c {
- color: #999999;
- font-style: italic;
-} /* Comment */
-.highlight .err {
- color: #a61717;
- background-color: #e3d2d2;
-} /* Error */
-.highlight .g {
- color: #d0d0d0;
-} /* Generic */
-.highlight .k {
- color: #6ab825;
- font-weight: bold;
-} /* Keyword */
-.highlight .l {
- color: #d0d0d0;
-} /* Literal */
-.highlight .n {
- color: #d0d0d0;
-} /* Name */
-.highlight .o {
- color: #d0d0d0;
-} /* Operator */
-.highlight .x {
- color: #d0d0d0;
-} /* Other */
-.highlight .p {
- color: #d0d0d0;
-} /* Punctuation */
-.highlight .cm {
- color: #999999;
- font-style: italic;
-} /* Comment.Multiline */
-.highlight .cp {
- color: #cd2828;
- font-weight: bold;
-} /* Comment.Preproc */
-.highlight .c1 {
- color: #999999;
- font-style: italic;
-} /* Comment.Single */
-.highlight .cs {
- color: #e50808;
- font-weight: bold;
- background-color: #520000;
-} /* Comment.Special */
-.highlight .gd {
- color: #d22323;
-} /* Generic.Deleted */
-.highlight .ge {
- color: #d0d0d0;
- font-style: italic;
-} /* Generic.Emph */
-.highlight .gr {
- color: #d22323;
-} /* Generic.Error */
-.highlight .gh {
- color: #ffffff;
- font-weight: bold;
-} /* Generic.Heading */
-.highlight .gi {
- color: #589819;
-} /* Generic.Inserted */
-.highlight .go {
- color: #cccccc;
-} /* Generic.Output */
-.highlight .gp {
- color: #aaaaaa;
-} /* Generic.Prompt */
-.highlight .gs {
- color: #d0d0d0;
- font-weight: bold;
-} /* Generic.Strong */
-.highlight .gu {
- color: #ffffff;
- text-decoration: underline;
-} /* Generic.Subheading */
-.highlight .gt {
- color: #d22323;
-} /* Generic.Traceback */
-.highlight .kc {
- color: #6ab825;
- font-weight: bold;
-} /* Keyword.Constant */
-.highlight .kd {
- color: #6ab825;
- font-weight: bold;
-} /* Keyword.Declaration */
-.highlight .kn {
- color: #6ab825;
- font-weight: bold;
-} /* Keyword.Namespace */
-.highlight .kp {
- color: #6ab825;
-} /* Keyword.Pseudo */
-.highlight .kr {
- color: #6ab825;
- font-weight: bold;
-} /* Keyword.Reserved */
-.highlight .kt {
- color: #6ab825;
- font-weight: bold;
-} /* Keyword.Type */
-.highlight .ld {
- color: #d0d0d0;
-} /* Literal.Date */
-.highlight .m {
- color: #3677a9;
-} /* Literal.Number */
-.highlight .s {
- color: #ed9d13;
-} /* Literal.String */
-.highlight .na {
- color: #bbbbbb;
-} /* Name.Attribute */
-.highlight .nb {
- color: #24909d;
-} /* Name.Builtin */
-.highlight .nc {
- color: #447fcf;
- text-decoration: underline;
-} /* Name.Class */
-.highlight .no {
- color: #40ffff;
-} /* Name.Constant */
-.highlight .nd {
- color: #ffa500;
-} /* Name.Decorator */
-.highlight .ni {
- color: #d0d0d0;
-} /* Name.Entity */
-.highlight .ne {
- color: #bbbbbb;
-} /* Name.Exception */
-.highlight .nf {
- color: #447fcf;
-} /* Name.Function */
-.highlight .nl {
- color: #d0d0d0;
-} /* Name.Label */
-.highlight .nn {
- color: #447fcf;
- text-decoration: underline;
-} /* Name.Namespace */
-.highlight .nx {
- color: #d0d0d0;
-} /* Name.Other */
-.highlight .py {
- color: #d0d0d0;
-} /* Name.Property */
-.highlight .nt {
- color: #6ab825;
- font-weight: bold;
-} /* Name.Tag */
-.highlight .nv {
- color: #40ffff;
-} /* Name.Variable */
-.highlight .ow {
- color: #6ab825;
- font-weight: bold;
-} /* Operator.Word */
-.highlight .w {
- color: #666666;
-} /* Text.Whitespace */
-.highlight .mf {
- color: #3677a9;
-} /* Literal.Number.Float */
-.highlight .mh {
- color: #3677a9;
-} /* Literal.Number.Hex */
-.highlight .mi {
- color: #3677a9;
-} /* Literal.Number.Integer */
-.highlight .mo {
- color: #3677a9;
-} /* Literal.Number.Oct */
-.highlight .sb {
- color: #ed9d13;
-} /* Literal.String.Backtick */
-.highlight .sc {
- color: #ed9d13;
-} /* Literal.String.Char */
-.highlight .sd {
- color: #ed9d13;
-} /* Literal.String.Doc */
-.highlight .s2 {
- color: #ed9d13;
-} /* Literal.String.Double */
-.highlight .se {
- color: #ed9d13;
-} /* Literal.String.Escape */
-.highlight .sh {
- color: #ed9d13;
-} /* Literal.String.Heredoc */
-.highlight .si {
- color: #ed9d13;
-} /* Literal.String.Interpol */
-.highlight .sx {
- color: #ffa500;
-} /* Literal.String.Other */
-.highlight .sr {
- color: #ed9d13;
-} /* Literal.String.Regex */
-.highlight .s1 {
- color: #ed9d13;
-} /* Literal.String.Single */
-.highlight .ss {
- color: #ed9d13;
-} /* Literal.String.Symbol */
-.highlight .bp {
- color: #24909d;
-} /* Name.Builtin.Pseudo */
-.highlight .vc {
- color: #40ffff;
-} /* Name.Variable.Class */
-.highlight .vg {
- color: #40ffff;
-} /* Name.Variable.Global */
-.highlight .vi {
- color: #40ffff;
-} /* Name.Variable.Instance */
-.highlight .il {
- color: #3677a9;
-} /* Literal.Number.Integer.Long */
+/* https://github.com/jwarby/jekyll-pygments-themes */
+.highlight pre {
+ background-color: #404040;
+}
+.highlight .hll {
+ background-color: #404040;
+}
+.highlight .c {
+ color: #999999;
+ font-style: italic;
+} /* Comment */
+.highlight .err {
+ color: #a61717;
+ background-color: #e3d2d2;
+} /* Error */
+.highlight .g {
+ color: #d0d0d0;
+} /* Generic */
+.highlight .k {
+ color: #6ab825;
+ font-weight: bold;
+} /* Keyword */
+.highlight .l {
+ color: #d0d0d0;
+} /* Literal */
+.highlight .n {
+ color: #d0d0d0;
+} /* Name */
+.highlight .o {
+ color: #d0d0d0;
+} /* Operator */
+.highlight .x {
+ color: #d0d0d0;
+} /* Other */
+.highlight .p {
+ color: #d0d0d0;
+} /* Punctuation */
+.highlight .cm {
+ color: #999999;
+ font-style: italic;
+} /* Comment.Multiline */
+.highlight .cp {
+ color: #cd2828;
+ font-weight: bold;
+} /* Comment.Preproc */
+.highlight .c1 {
+ color: #999999;
+ font-style: italic;
+} /* Comment.Single */
+.highlight .cs {
+ color: #e50808;
+ font-weight: bold;
+ background-color: #520000;
+} /* Comment.Special */
+.highlight .gd {
+ color: #d22323;
+} /* Generic.Deleted */
+.highlight .ge {
+ color: #d0d0d0;
+ font-style: italic;
+} /* Generic.Emph */
+.highlight .gr {
+ color: #d22323;
+} /* Generic.Error */
+.highlight .gh {
+ color: #ffffff;
+ font-weight: bold;
+} /* Generic.Heading */
+.highlight .gi {
+ color: #589819;
+} /* Generic.Inserted */
+.highlight .go {
+ color: #cccccc;
+} /* Generic.Output */
+.highlight .gp {
+ color: #aaaaaa;
+} /* Generic.Prompt */
+.highlight .gs {
+ color: #d0d0d0;
+ font-weight: bold;
+} /* Generic.Strong */
+.highlight .gu {
+ color: #ffffff;
+ text-decoration: underline;
+} /* Generic.Subheading */
+.highlight .gt {
+ color: #d22323;
+} /* Generic.Traceback */
+.highlight .kc {
+ color: #6ab825;
+ font-weight: bold;
+} /* Keyword.Constant */
+.highlight .kd {
+ color: #6ab825;
+ font-weight: bold;
+} /* Keyword.Declaration */
+.highlight .kn {
+ color: #6ab825;
+ font-weight: bold;
+} /* Keyword.Namespace */
+.highlight .kp {
+ color: #6ab825;
+} /* Keyword.Pseudo */
+.highlight .kr {
+ color: #6ab825;
+ font-weight: bold;
+} /* Keyword.Reserved */
+.highlight .kt {
+ color: #6ab825;
+ font-weight: bold;
+} /* Keyword.Type */
+.highlight .ld {
+ color: #d0d0d0;
+} /* Literal.Date */
+.highlight .m {
+ color: #3677a9;
+} /* Literal.Number */
+.highlight .s {
+ color: #ed9d13;
+} /* Literal.String */
+.highlight .na {
+ color: #bbbbbb;
+} /* Name.Attribute */
+.highlight .nb {
+ color: #24909d;
+} /* Name.Builtin */
+.highlight .nc {
+ color: #447fcf;
+ text-decoration: underline;
+} /* Name.Class */
+.highlight .no {
+ color: #40ffff;
+} /* Name.Constant */
+.highlight .nd {
+ color: #ffa500;
+} /* Name.Decorator */
+.highlight .ni {
+ color: #d0d0d0;
+} /* Name.Entity */
+.highlight .ne {
+ color: #bbbbbb;
+} /* Name.Exception */
+.highlight .nf {
+ color: #447fcf;
+} /* Name.Function */
+.highlight .nl {
+ color: #d0d0d0;
+} /* Name.Label */
+.highlight .nn {
+ color: #447fcf;
+ text-decoration: underline;
+} /* Name.Namespace */
+.highlight .nx {
+ color: #d0d0d0;
+} /* Name.Other */
+.highlight .py {
+ color: #d0d0d0;
+} /* Name.Property */
+.highlight .nt {
+ color: #6ab825;
+ font-weight: bold;
+} /* Name.Tag */
+.highlight .nv {
+ color: #40ffff;
+} /* Name.Variable */
+.highlight .ow {
+ color: #6ab825;
+ font-weight: bold;
+} /* Operator.Word */
+.highlight .w {
+ color: #666666;
+} /* Text.Whitespace */
+.highlight .mf {
+ color: #3677a9;
+} /* Literal.Number.Float */
+.highlight .mh {
+ color: #3677a9;
+} /* Literal.Number.Hex */
+.highlight .mi {
+ color: #3677a9;
+} /* Literal.Number.Integer */
+.highlight .mo {
+ color: #3677a9;
+} /* Literal.Number.Oct */
+.highlight .sb {
+ color: #ed9d13;
+} /* Literal.String.Backtick */
+.highlight .sc {
+ color: #ed9d13;
+} /* Literal.String.Char */
+.highlight .sd {
+ color: #ed9d13;
+} /* Literal.String.Doc */
+.highlight .s2 {
+ color: #ed9d13;
+} /* Literal.String.Double */
+.highlight .se {
+ color: #ed9d13;
+} /* Literal.String.Escape */
+.highlight .sh {
+ color: #ed9d13;
+} /* Literal.String.Heredoc */
+.highlight .si {
+ color: #ed9d13;
+} /* Literal.String.Interpol */
+.highlight .sx {
+ color: #ffa500;
+} /* Literal.String.Other */
+.highlight .sr {
+ color: #ed9d13;
+} /* Literal.String.Regex */
+.highlight .s1 {
+ color: #ed9d13;
+} /* Literal.String.Single */
+.highlight .ss {
+ color: #ed9d13;
+} /* Literal.String.Symbol */
+.highlight .bp {
+ color: #24909d;
+} /* Name.Builtin.Pseudo */
+.highlight .vc {
+ color: #40ffff;
+} /* Name.Variable.Class */
+.highlight .vg {
+ color: #40ffff;
+} /* Name.Variable.Global */
+.highlight .vi {
+ color: #40ffff;
+} /* Name.Variable.Instance */
+.highlight .il {
+ color: #3677a9;
+} /* Literal.Number.Integer.Long */
diff --git a/assets/css/jupyter-grade3.css b/assets/css/jupyter-grade3.css
index d28ba1a3..8b7ca2f1 100644
--- a/assets/css/jupyter-grade3.css
+++ b/assets/css/jupyter-grade3.css
@@ -1,3758 +1,3758 @@
-/* From https://github.com/dunovank/jupyter-themes/blob/master/jupyterthemes/styles/compiled/grade3.css */
-div#notebook {
- font-family: sans-serif;
- font-size: 13pt;
- line-height: 170%;
- color: #303030;
- -webkit-font-smoothing: antialiased !important;
- padding-top: 25px !important;
-}
-
-body,
-div.body {
- font-family: sans-serif;
- font-size: 13pt;
- color: #303030;
- background-color: #ffffff;
- background: #ffffff;
- -webkit-font-smoothing: antialiased !important;
-}
-
-body.notebook_app {
- padding: 0;
- background-color: #ffffff;
- background: #ffffff;
- padding-right: 0px !important;
- overflow-y: hidden;
-}
-
-a {
- font-family: sans-serif;
- color: #303030;
- -webkit-font-smoothing: antialiased !important;
-}
-
-a:hover,
-a:focus {
- color: #2f2f2f;
- -webkit-font-smoothing: antialiased !important;
-}
-
-div#maintoolbar {
- position: absolute;
- width: 90%;
- margin-left: -10%;
- padding-right: 8%;
- float: left;
- background: transparent !important;
-}
-
-#maintoolbar {
- margin-bottom: -3px;
- margin-top: 0px;
- border: 0px;
- min-height: 27px;
- padding-top: 2px;
- padding-bottom: 0px;
-}
-
-#maintoolbar .container {
- width: 75%;
- margin-right: auto;
- margin-left: auto;
-}
-
-.list_header,
-div#notebook_list_header.row.list_header {
- font-size: 14pt;
- color: #2f2f2f;
- background-color: transparent;
- height: 35px;
-}
-
-i.fa.fa-folder {
- display: inline-block;
- font: normal normal normal 14px "FontAwesome";
- font-family: "FontAwesome" !important;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- font-size: 18px;
- -moz-osx-font-smoothing: grayscale;
-}
-
-#running .panel-group .panel .panel-heading {
- font-size: 14pt;
- color: #303030;
- padding: 8px 8px;
- background: #e4e4e4;
- background-color: #e4e4e4;
-}
-
-#running .panel-group .panel .panel-heading a {
- font-size: 14pt;
- color: #303030;
-}
-
-#running .panel-group .panel .panel-heading a:focus,
-#running .panel-group .panel .panel-heading a:hover {
- font-size: 14pt;
- color: #303030;
-}
-
-#running .panel-group .panel .panel-body .list_container .list_item {
- background: #f4f4f4;
- background-color: #f4f4f4;
- padding: 2px;
- border-bottom: 2px solid #dedede;
-}
-
-#running .panel-group .panel .panel-body .list_container .list_item:hover {
- background: #f4f4f4;
- background-color: #f4f4f4;
-}
-
-#running .panel-group .panel .panel-body {
- padding: 2px;
-}
-
-button#refresh_running_list {
- border: none !important;
-}
-
-button#refresh_cluster_list {
- border: none !important;
-}
-
-div.running_list_info.toolbar_info {
- font-size: 15px;
- padding: 4px 0 4px 0;
- margin-top: 5px;
- margin-bottom: 8px;
- height: 24px;
- line-height: 24px;
- text-shadow: none;
-}
-
-.list_placeholder {
- font-weight: normal;
-}
-
-#tree-selector {
- padding: 0px;
- border-color: transparent;
-}
-
-#project_name > ul > li > a > i.fa.fa-home {
- color: #ff7823;
- font-size: 17pt;
- display: inline-block;
- position: static;
- padding: 0px 0px;
- font-weight: normal;
- text-align: center;
- vertical-align: text-top;
-}
-
-.fa-folder:before {
- color: #126dce;
-}
-
-.fa-arrow-up:before {
- font-size: 14px;
-}
-
-.fa-arrow-down:before {
- font-size: 14px;
-}
-
-span#last-modified.btn.btn-xs.btn-default.sort-action:hover .fa,
-span#sort-name.btn.btn-xs.btn-default.sort-action:hover .fa {
- color: #ef5c00;
-}
-
-.folder_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f07b";
- color: #126dce;
-}
-
-.notebook_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f02d";
- position: relative;
- color: #009e07 !important;
- top: 0px;
-}
-
-.file_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f15b";
- position: relative;
- top: 0px;
- color: #6a737d !important;
-}
-
-#project_name a {
- display: inline-flex;
- padding-left: 7px;
- margin-left: -2px;
- text-align: -webkit-auto;
- vertical-align: baseline;
- font-size: 18px;
-}
-
-div#notebook_toolbar div.dynamic-instructions {
- font-family: sans-serif;
- font-size: 17px;
- color: #828892;
-}
-
-span#login_widget > .button,
-#logout {
- font-family: "Proxima Nova", sans-serif;
- color: #303030;
- background: transparent;
- background-color: transparent;
- border: 2px solid #e5e5e5;
- font-weight: normal;
- box-shadow: none;
- text-shadow: none;
- border-radius: 3px;
- margin-right: 10px;
- padding: 2px 7px;
-}
-
-span#login_widget > .button:hover,
-#logout:hover {
- color: #ef5c00;
- background-color: transparent;
- background: transparent;
- border: 2px solid #ef5c00;
- background-image: none;
- box-shadow: none !important;
- border-radius: 3px;
-}
-
-span#login_widget > .button:focus,
-#logout:focus,
-span#login_widget > .button.focus,
-#logout.focus,
-span#login_widget > .button:active,
-#logout:active,
-span#login_widget > .button.active,
-#logout.active,
-.open > .dropdown-togglespan#login_widget > .button,
-.open > .dropdown-toggle#logout {
- color: #1c1c1c;
- background-color: #303030;
- background: #303030;
- border-color: #303030;
- background-image: none;
- box-shadow: none !important;
- border-radius: 2px;
-}
-
-body > #header #header-container {
- padding-bottom: 0px;
- padding-top: 4px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
-}
-
-body > #header {
- background: #ffffff;
- background-color: #ffffff;
- position: relative;
- z-index: 100;
-}
-
-.list_container {
- font-size: 13pt;
- color: #303030;
- border: none;
- text-shadow: none !important;
-}
-
-.list_container > div {
- border-bottom: 1px solid rgba(180, 180, 180, 0.14);
- font-size: 13pt;
-}
-
-.list_header > div,
-.list_item > div {
- padding-top: 6px;
- padding-bottom: 2px;
- padding-left: 0px;
-}
-
-.list_header > div .item_link,
-.list_item > div .item_link {
- margin-left: -1px;
- vertical-align: middle;
- line-height: 22px;
- font-size: 13pt;
-}
-
-.item_icon {
- color: #126dce;
- font-size: 13pt;
- vertical-align: middle;
-}
-
-.list_item input:not([type="checkbox"]) {
- padding-right: 0px;
- height: 1.75em;
- width: 25%;
- margin: 0px 0 0;
- margin-top: 0px;
-}
-
-.list_header > div .item_link,
-.list_item > div .item_link {
- margin-left: -1px;
- vertical-align: middle;
- line-height: 1.5em;
- font-size: 12pt;
- display: inline-table;
- position: static;
-}
-
-#button-select-all {
- height: 34px;
- min-width: 55px;
- z-index: 0;
- border: none !important;
- padding-top: 0px;
- padding-bottom: 0px;
- margin-bottom: 0px;
- margin-top: 0px;
- left: -3px;
- border-radius: 0px !important;
-}
-
-#button-select-all:focus,
-#button-select-all:active:focus,
-#button-select-all.active:focus,
-#button-select-all.focus,
-#button-select-all:active.focus,
-#button-select-all.active.focus {
- background-color: #e5e5e5 !important;
- background: #e5e5e5 !important;
-}
-
-button#tree-selector-btn {
- height: 34px;
- font-size: 12pt;
- border: none;
- left: 0px;
- border-radius: 0px !important;
-}
-
-input#select-all.pull-left.tree-selector {
- margin-left: 7px;
- margin-right: 2px;
- margin-top: 2px;
- top: 4px;
-}
-
-input[type="radio"],
-input[type="checkbox"] {
- margin-top: 1px;
- line-height: normal;
-}
-
-.delete-button {
- border: none !important;
-}
-
-i.fa.fa-trash {
- font-size: 13.5pt;
-}
-
-.list_container a {
- font-size: 16px;
- color: #303030;
- border: none;
- text-shadow: none !important;
- font-weight: normal;
- font-style: normal;
-}
-
-div.list_container a:hover {
- color: #2f2f2f;
-}
-
-.list_header > div input,
-.list_item > div input {
- margin-right: 7px;
- margin-left: 12px;
- vertical-align: baseline;
- line-height: 22px;
- position: relative;
- top: -1px;
-}
-
-div.list_item:hover {
- background-color: #fafafa;
-}
-
-.breadcrumb > li {
- font-size: 12pt;
- color: #303030;
- border: none;
- text-shadow: none !important;
-}
-
-.breadcrumb > li + li:before {
- content: "/\00a0";
- padding: 0px;
- color: #303030;
- font-size: 18px;
-}
-
-#project_name > .breadcrumb {
- padding: 0px;
- margin-bottom: 0px;
- background-color: transparent;
- font-weight: normal;
- margin-top: -2px;
-}
-
-ul#tabs a {
- font-family: sans-serif;
- font-size: 13.5pt;
- font-weight: normal;
- font-style: normal;
- text-shadow: none !important;
-}
-
-.nav-tabs {
- font-family: sans-serif;
- font-size: 13.5pt;
- font-weight: normal;
- font-style: normal;
- background-color: transparent;
- border-color: transparent;
- text-shadow: none !important;
- border: 2px solid transparent;
-}
-
-.nav-tabs > li > a:active,
-.nav-tabs > li > a:focus,
-.nav-tabs > li > a:hover,
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:focus,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
- color: #ef5c00;
- background-color: transparent;
- border-color: transparent;
- border-bottom: 2px solid transparent;
-}
-
-.nav > li.disabled > a,
-.nav > li.disabled > a:hover {
- color: #828892;
-}
-
-.nav-tabs > li > a:before {
- content: "";
- position: absolute;
- width: 100%;
- height: 2px;
- bottom: -2px;
- left: 0;
- background-color: #ef5c00;
- visibility: hidden;
- -webkit-transform: perspective(0) scaleX(0);
- transform: perspective(0) scaleX(0);
- -webkit-transition: ease 220ms;
- transition: ease 220ms;
- -webkit-font-smoothing: antialiased !important;
-}
-
-.nav-tabs > li > a:hover:before {
- visibility: visible;
- -webkit-transform: perspective(1) scaleX(1);
- transform: perspective(1) scaleX(1);
-}
-
-.nav-tabs > li.active > a:before {
- content: "";
- position: absolute;
- width: 100%;
- height: 2px;
- bottom: -2px;
- left: 0;
- background-color: #ef5c00;
- visibility: visible;
- -webkit-transform: perspective(1) scaleX(1);
- transform: perspective(1) scaleX(1);
- -webkit-font-smoothing: subpixel-antialiased !important;
-}
-
-div#notebook {
- font-family: sans-serif;
- font-size: 13pt;
- padding-top: 4px;
-}
-
-.notebook_app {
- background-color: #ffffff;
-}
-
-#notebook-container {
- padding: 13px 2px;
- background-color: #ffffff;
- min-height: 0px;
- box-shadow: none;
- width: 980px;
- margin-right: auto;
- margin-left: auto;
-}
-
-div#ipython-main-app.container {
- width: 980px;
- margin-right: auto;
- margin-left: auto;
- margin-right: auto;
- margin-left: auto;
-}
-
-.container {
- width: 980px;
- margin-right: auto;
- margin-left: auto;
-}
-
-div#menubar-container {
- width: 100%;
- width: 980px;
-}
-
-div#header-container {
- width: 980px;
-}
-
-.notebook_app #header,
-.edit_app #header {
- box-shadow: none !important;
- background-color: #ffffff;
- border-bottom: 2px solid rgba(180, 180, 180, 0.14);
-}
-
-#header,
-.edit_app #header {
- font-family: sans-serif;
- font-size: 13pt;
- box-shadow: none;
- background-color: #ffffff;
-}
-
-#header .header-bar,
-.edit_app #header .header-bar {
- background: #ffffff;
- background-color: #ffffff;
-}
-
-body > #header .header-bar {
- width: 100%;
- background: #ffffff;
-}
-
-span.checkpoint_status,
-span.autosave_status {
- font-size: small;
- display: none;
-}
-
-#menubar,
-div#menubar {
- background-color: #ffffff;
- padding-top: 0px !important;
-}
-
-#menubar .navbar,
-.navbar-default {
- background-color: #ffffff;
- margin-bottom: 0px;
- margin-top: 0px;
-}
-
-.navbar {
- border: none;
-}
-
-div.navbar-text,
-.navbar-text,
-.navbar-text.indicator_area,
-p.navbar-text.indicator_area {
- margin-top: 8px !important;
- margin-bottom: 0px;
- color: #ff7823;
-}
-
-.navbar-default {
- font-family: sans-serif;
- font-size: 13pt;
- background-color: #ffffff;
- border-color: #d4d4d4;
- line-height: 1.5em;
- padding-bottom: 0px;
-}
-
-.navbar-default .navbar-nav > li > a {
- font-family: sans-serif;
- font-size: 13pt;
- color: #303030;
- display: block;
- line-height: 1.5em;
- padding-top: 14px;
- padding-bottom: 11px;
-}
-
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
- color: #2f2f2f !important;
- background-color: rgba(180, 180, 180, 0.14) !important;
- border-color: #d4d4d4 !important;
- line-height: 1.5em;
- transition: 80ms ease;
-}
-
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
- color: #1c1c1c;
- background-color: #dedede;
- border-color: #dedede;
- line-height: 1.5em;
-}
-
-.navbar-nav > li > .dropdown-menu {
- margin-top: 0px;
-}
-
-.navbar-nav {
- margin: 0;
-}
-
-div.notification_widget.info,
-.notification_widget.info,
-.notification_widget:active:hover,
-.notification_widget.active:hover,
-.open > .dropdown-toggle.notification_widget:hover,
-.notification_widget:active:focus,
-.notification_widget.active:focus,
-.open > .dropdown-toggle.notification_widget:focus,
-.notification_widget:active.focus,
-.notification_widget.active.focus,
-.open > .dropdown-toggle.notification_widget.focus,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:hover,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:focus {
- color: #303030 !important;
- background-color: transparent !important;
- border-color: transparent !important;
- padding-bottom: 0px !important;
- margin-bottom: 0px !important;
- font-size: 9pt !important;
- z-index: 0;
-}
-
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn {
- font-size: 9pt !important;
- z-index: 0;
-}
-
-.notification_widget {
- color: #126dce;
- z-index: -500;
- font-size: 9pt;
- background: transparent;
- background-color: transparent;
- margin-right: 3px;
- border: none;
-}
-
-.notification_widget,
-div.notification_widget {
- margin-right: 0px;
- margin-left: 0px;
- padding-right: 0px;
- vertical-align: text-top !important;
- margin-top: 6px !important;
- background: transparent !important;
- background-color: transparent !important;
- font-size: 9pt !important;
- border: none;
-}
-
-.navbar-btn.btn-xs:hover {
- border: none !important;
- background: transparent !important;
- background-color: transparent !important;
- color: #303030 !important;
-}
-
-div.notification_widget.info,
-.notification_widget.info {
- display: none !important;
-}
-
-.edit_mode .modal_indicator:before {
- display: none;
-}
-
-.command_mode .modal_indicator:before {
- display: none;
-}
-
-.item_icon {
- color: #126dce;
-}
-
-.item_buttons .kernel-name {
- font-size: 13pt;
- color: #126dce;
-}
-
-.running_notebook_icon:before {
- color: #009e07 !important;
- font: normal normal normal 15px/1 FontAwesome;
- font-size: 15px;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f10c";
- vertical-align: middle;
- position: static;
- display: inherit;
-}
-
-.item_buttons .running-indicator {
- padding-top: 4px;
- color: #009e07;
- font-family: sans-serif;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
-}
-
-#notification_trusted {
- font-family: sans-serif;
- border: none;
- background: transparent;
- background-color: transparent;
- margin-bottom: 0px !important;
- vertical-align: bottom !important;
- color: #828892 !important;
- cursor: default !important;
-}
-
-#notification_area,
-div.notification_area {
- float: right !important;
- position: static;
- cursor: pointer;
- padding-top: 6px;
- padding-right: 4px;
-}
-
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn {
- font-size: 9pt !important;
- z-index: 0;
- margin-top: -5px !important;
-}
-
-#modal_indicator {
- float: right !important;
- color: #4c8be2;
- background: #ffffff;
- background-color: #ffffff;
- margin-top: 8px !important;
- margin-left: 0px;
-}
-
-#kernel_indicator {
- float: right !important;
- color: #ff7823;
- background: #ffffff;
- background-color: #ffffff;
- border-left: 2px solid #ff7823;
- padding-top: 0px;
- padding-bottom: 4px;
- margin-top: 10px !important;
- margin-left: -2px;
- padding-left: 5px !important;
-}
-
-#kernel_indicator .kernel_indicator_name {
- font-size: 17px;
- color: #ff7823;
- background: #ffffff;
- background-color: #ffffff;
- padding-left: 5px;
- padding-right: 5px;
- margin-top: 4px;
- vertical-align: text-top;
- padding-bottom: 0px;
-}
-
-.kernel_idle_icon:before {
- display: inline-block;
- font: normal normal normal 22px/1 FontAwesome;
- font-size: 22px;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- cursor: pointer;
- margin-left: 0px !important;
- opacity: 0.7;
- vertical-align: bottom;
- margin-top: 1px;
- content: "\f1db";
-}
-
-.kernel_busy_icon:before {
- display: inline-block;
- font: normal normal normal 22px/1 FontAwesome;
- font-size: 22px;
- -webkit-animation: pulsate 2s infinite ease-out;
- animation: pulsate 2s infinite ease-out;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- cursor: pointer;
- margin-left: 0px !important;
- vertical-align: bottom;
- margin-top: 1px;
- content: "\f111";
-}
-
-@-webkit-keyframes pulsate {
- 0% {
- -webkit-transform: scale(1, 1);
- opacity: 0.8;
- }
-
- 8% {
- -webkit-transform: scale(1, 1);
- opacity: 0.8;
- }
-
- 50% {
- -webkit-transform: scale(0.75, 0.75);
- opacity: 0.3;
- }
-
- 92% {
- -webkit-transform: scale(1, 1);
- opacity: 0.8;
- }
-
- 100% {
- -webkit-transform: scale(1, 1);
- opacity: 0.8;
- }
-}
-
-div.notification_widget.info,
-.notification_widget.info,
-.notification_widget:active:hover,
-.notification_widget.active:hover,
-.open > .dropdown-toggle.notification_widget:hover,
-.notification_widget:active:focus,
-.notification_widget.active:focus,
-.open > .dropdown-toggle.notification_widget:focus,
-.notification_widget:active.focus,
-.notification_widget.active.focus,
-.open > .dropdown-toggle.notification_widget.focus,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:hover,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:focus {
- color: #303030;
- background-color: #ffffff;
- border-color: #ffffff;
-}
-
-#notification_area,
-div.notification_area {
- float: right !important;
- position: static;
-}
-
-.notification_widget,
-div.notification_widget {
- margin-right: 0px;
- margin-left: 0px;
- padding-right: 0px;
- vertical-align: text-top !important;
- margin-top: 6px !important;
- z-index: 1000;
-}
-
-#kernel_logo_widget,
-#kernel_logo_widget .current_kernel_logo {
- display: none;
-}
-
-div#ipython_notebook {
- display: none;
-}
-
-i.fa.fa-icon {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-rendering: auto;
-}
-
-.fa {
- display: inline-block;
- font:
- normal normal normal 10pt/1 "FontAwesome",
- sans-serif;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.dropdown-menu {
- font-family: sans-serif;
- font-size: 13pt;
- box-shadow: none;
- padding: 0px;
- text-align: left;
- border: none;
- background-color: #dedede;
- background: #dedede;
- line-height: 1;
-}
-
-.dropdown-menu:hover {
- font-family: sans-serif;
- font-size: 13pt;
- box-shadow: none;
- padding: 0px;
- text-align: left;
- border: none;
- background-color: #dedede;
- box-shadow: none;
- line-height: 1;
-}
-
-.dropdown-menu > li > a {
- font-family: sans-serif;
- font-size: 12pt;
- display: block;
- padding: 10px 20px 9px 10px;
- color: #303030;
- background-color: #dedede;
- background: #dedede;
-}
-
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- color: #2f2f2f;
- background-color: #d4d4d4;
- background: #d4d4d4;
- border-color: #d4d4d4;
- transition: 200ms ease;
-}
-
-.dropdown-menu .divider {
- height: 1px;
- margin: 0px 0px;
- overflow: hidden;
- background-color: rgba(180, 180, 180, 0.3);
-}
-
-.dropdown-submenu > .dropdown-menu {
- display: none;
- top: 2px !important;
- left: 100%;
- margin-top: -2px;
- margin-left: 0px;
- padding-top: 0px;
- transition: 200ms ease;
-}
-
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- font-family: sans-serif;
- font-size: 12pt;
- font-weight: normal;
- color: #828892;
- padding: none;
- display: block;
- clear: both;
- white-space: nowrap;
-}
-
-.dropdown-submenu > a:after {
- color: #303030;
- margin-right: -16px;
- margin-top: 0px;
- display: inline-block;
-}
-
-.dropdown-submenu:hover > a:after,
-.dropdown-submenu:active > a:after,
-.dropdown-submenu:focus > a:after,
-.dropdown-submenu:visited > a:after {
- color: #ff7823;
- margin-right: -16px;
- display: inline-block !important;
-}
-
-div.kse-dropdown > .dropdown-menu,
-.kse-dropdown > .dropdown-menu {
- min-width: 0;
- top: 94%;
-}
-
-.btn,
-.btn-default {
- font-family: sans-serif;
- color: #303030;
- background: #e5e5e5;
- background-color: #e5e5e5;
- border: 2px solid #e5e5e5;
- font-weight: normal;
- box-shadow: none;
- text-shadow: none;
- border-radius: 3px;
- font-size: initial;
-}
-
-.btn:hover,
-.btn:active:hover,
-.btn.active:hover,
-.btn-default:hover,
-.open > .dropdown-toggle.btn-default:hover,
-.open > .dropdown-toggle.btn:hover {
- color: #ef5c00;
- border: 2px solid #e0e0e0;
- background-color: #e0e0e0;
- background: #e0e0e0;
- background-image: none;
- box-shadow: none !important;
- border-radius: 3px;
-}
-
-.btn:active,
-.btn.active,
-.btn:active:focus,
-.btn.active:focus,
-.btn:active.focus,
-.btn.active.focus,
-.btn-default:focus,
-.btn-default.focus,
-.btn-default:active,
-.btn-default.active,
-.btn-default:active:hover,
-.btn-default.active:hover,
-.btn-default:active:focus,
-.btn-default.active:focus,
-.btn-default:active.focus,
-.btn-default.active.focus,
-.open > .dropdown-toggle.btn:focus,
-.open > .dropdown-toggle.btn.focus,
-.open > .dropdown-toggle.btn-default:hover,
-.open > .dropdown-toggle.btn-default:focus,
-.open > .dropdown-toggle.btn-default.hover,
-.open > .dropdown-toggle.btn-default.focus {
- color: #ef5c00;
- border: 2px solid #e0e0e0;
- background-color: #e0e0e0 !important;
- background: #e0e0e0 !important;
- background-image: none;
- box-shadow: none !important;
- border-radius: 3px;
-}
-
-.btn-default:active:hover,
-.btn-default.active:hover,
-.btn-default:active:focus,
-.btn-default.active:focus,
-.btn-default:active.focus,
-.btn-default.active.focus {
- color: #ef5c00 !important;
- background-color: #e5e5e5;
- border-color: #ffccac !important;
- transition: 2000ms ease;
-}
-
-.btn:focus,
-.btn.focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn:active,
-.btn.active,
-.btn:active.focus,
-.btn.active.focus {
- color: #ef5c00 !important;
- outline: none !important;
- outline-width: 0px !important;
- background: #ffccac !important;
- background-color: #ffccac !important;
- border-color: #ffccac !important;
- transition: 200ms ease !important;
-}
-
-.item_buttons > .btn,
-.item_buttons > .btn-group,
-.item_buttons > .input-group {
- font-size: 13pt;
- background: transparent;
- background-color: transparent;
- border: 0px solid #e4e4e4;
- border-bottom: 2px solid transparent;
- margin-left: 5px;
- padding-top: 4px !important;
-}
-
-.item_buttons > .btn:hover,
-.item_buttons > .btn-group:hover,
-.item_buttons > .input-group:hover,
-.item_buttons > .btn.active,
-.item_buttons > .btn-group.active,
-.item_buttons > .input-group.active,
-.item_buttons > .btn.focus {
- margin-left: 5px;
- background: #dfdfdf;
- padding-top: 4px !important;
- background-color: transparent;
- border: 0px solid transparent;
- border-bottom: 2px solid #ff7823;
- border-radius: 0px;
- transition: none;
-}
-
-.item_buttons {
- line-height: 1.5em !important;
-}
-
-.item_buttons .btn {
- min-width: 11ex;
-}
-
-.btn-group > .btn:first-child {
- margin-left: 3px;
-}
-
-.btn-group > .btn-mini,
-.btn-sm,
-.btn-group-sm > .btn,
-.btn-xs,
-.btn-group-xs > .btn,
-.alternate_upload .btn-upload,
-.btn-group,
-.btn-group-vertical {
- font-size: inherit;
- font-weight: normal;
- height: inherit;
- line-height: inherit;
-}
-
-.btn-xs,
-.btn-group-xs > .btn {
- font-size: initial !important;
- background-image: none;
- font-weight: normal;
- text-shadow: none;
- display: inline-table;
- padding: 2px 5px;
- line-height: 1.45;
-}
-
-.btn-group > .btn:first-child {
- margin-left: 3px;
-}
-
-div#new-buttons > button,
-#new-buttons > button,
-div#refresh_notebook_list,
-#refresh_notebook_list {
- background: transparent;
- background-color: transparent;
- border: none;
-}
-
-div#new-buttons > button:hover,
-#new-buttons > button:hover,
-div#refresh_notebook_list,
-#refresh_notebook_list,
-div.alternate_upload .btn-upload,
-.alternate_upload .btn-upload,
-div.dynamic-buttons > button,
-.dynamic-buttons > button,
-.dynamic-buttons > button:focus,
-.dynamic-buttons > button:active:focus,
-.dynamic-buttons > button.active:focus,
-.dynamic-buttons > button.focus,
-.dynamic-buttons > button:active.focus,
-.dynamic-buttons > button.active.focus,
-#new-buttons > button:focus,
-#new-buttons > button:active:focus,
-#new-buttons > button.active:focus,
-#new-buttons > button.focus,
-#new-buttons > button:active.focus,
-#new-buttons > button.active.focus,
-.alternate_upload .btn-upload:focus,
-.alternate_upload .btn-upload:active:focus,
-.alternate_upload .btn-upload.active:focus,
-.alternate_upload .btn-upload.focus,
-.alternate_upload .btn-upload:active.focus,
-.alternate_upload .btn-upload.active.focus {
- background: transparent !important;
- background-color: transparent !important;
- border: none !important;
-}
-
-.alternate_upload input.fileinput {
- text-align: center;
- vertical-align: bottom;
- margin-left: -0.5ex;
- display: inline-table;
- border: solid 0px #e5e5e5;
- margin-bottom: -1ex;
-}
-
-.alternate_upload .btn-upload {
- display: inline-table;
- background: transparent;
- border: none;
-}
-
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -2px;
-}
-
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- z-index: 2;
-}
-
-.dropdown-header {
- font-family: sans-serif !important;
- font-size: 13pt !important;
- color: #ff7823 !important;
- border-bottom: none !important;
- padding: 0px !important;
- margin: 6px 6px 0px !important;
-}
-
-span#last-modified.btn.btn-xs.btn-default.sort-action,
-span#sort-name.btn.btn-xs.btn-default.sort-action,
-span#file-size.btn.btn-xs.btn-default.sort-action {
- font-family: sans-serif;
- font-size: 16px;
- background-color: transparent;
- background: transparent;
- border: none;
- color: #303030;
- padding-bottom: 0px;
- margin-bottom: 0px;
- vertical-align: sub;
-}
-
-span#last-modified.btn.btn-xs.btn-default.sort-action {
- margin-left: 19px;
-}
-
-button.close {
- border: 0px none;
- font-family: sans-serif;
- font-size: 20pt;
- font-weight: normal;
-}
-
-.dynamic-buttons {
- padding-top: 0px;
- display: inline-block;
-}
-
-.close {
- color: #de143d;
- opacity: 0.5;
- text-shadow: none;
- font-weight: normal;
-}
-
-.close:hover {
- color: #de143d;
- opacity: 1;
- font-weight: normal;
-}
-
-div.nbext-enable-btns .btn[disabled],
-div.nbext-enable-btns .btn[disabled]:hover,
-.btn-default.disabled,
-.btn-default[disabled],
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus {
- color: #4a4a4a;
- background: #e2e2e2;
- background-color: #e2e2e2;
- border-color: #e2e2e2;
- transition: 200ms ease;
-}
-
-.input-group-addon {
- padding: 2px 5px;
- font-size: 13pt;
- font-weight: normal;
- height: auto;
- color: #303030;
- text-align: center;
- background-color: transparent;
- border: 2px solid transparent !important;
- text-transform: capitalize;
-}
-
-a.btn.btn-default.input-group-addon:hover {
- background: transparent !important;
- background-color: transparent !important;
-}
-
-.btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
- height: 100%;
-}
-
-.btn-group > .btn + .dropdown-toggle:hover {
- background: #e0e0e0 !important;
-}
-
-.input-group-btn {
- position: relative;
- font-size: inherit;
- white-space: nowrap;
- background: #e4e4e4;
- background-color: #e4e4e4;
- border: none;
-}
-
-.input-group-btn:hover {
- background: #dfdfdf;
- background-color: #dfdfdf;
- border: none;
-}
-
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
- background: #e4e4e4;
- background-color: #e4e4e4;
- border: none;
- margin-left: 2px;
- margin-right: -1px;
- font-size: inherit;
-}
-
-.input-group-btn:first-child > .btn:hover,
-.input-group-btn:first-child > .btn-group:hover {
- background: #e0e0e0;
- background-color: #e0e0e0;
- border: none;
- font-size: inherit;
- transition: 200ms ease;
-}
-
-div.modal .btn-group > .btn:first-child {
- background: #e4e4e4;
- background-color: #e4e4e4;
- border: 1px solid #e1e1e1;
- margin-top: 0px !important;
- margin-left: 0px;
- margin-bottom: 2px;
-}
-
-div.modal .btn-group > .btn:first-child:hover {
- background: #dfdfdf;
- background-color: #dfdfdf;
- border: 1px solid #dfdfdf;
- transition: 200ms ease;
-}
-
-div.modal > button,
-div.modal-footer > button {
- background: #e4e4e4;
- background-color: #e4e4e4;
- border-color: #e4e4e4;
-}
-
-div.modal > button:hover,
-div.modal-footer > button:hover {
- background: #dfdfdf;
- background-color: #dfdfdf;
- border-color: #dfdfdf;
- transition: 200ms ease;
-}
-
-.modal-content {
- font-family: sans-serif;
- font-size: 12pt;
- position: relative;
- background: #e4e4e4;
- background-color: #e4e4e4;
- border: none;
- border-radius: 1px;
- background-clip: padding-box;
- outline: none;
-}
-
-.modal-header {
- font-family: sans-serif;
- font-size: 13pt;
- color: #303030;
- background: #e4e4e4;
- background-color: #e4e4e4;
- border-color: #dedede;
- padding: 12px;
- min-height: 16.4286px;
-}
-
-.modal-content h4 {
- font-family: sans-serif;
- font-size: 16pt;
- color: #303030;
- padding: 5px;
-}
-
-.modal-body {
- background-color: #ffffff;
- position: relative;
- padding: 15px;
-}
-
-.modal-footer {
- padding: 8px;
- text-align: right;
- background-color: #ffffff;
- border-top: none;
-}
-
-.alert-info {
- background-color: #fdfdfd;
- border-color: #dedede;
- color: #303030;
-}
-
-.modal-header .close {
- margin-top: -5px;
- font-size: 25pt;
-}
-
-.modal-backdrop,
-.modal-backdrop.in {
- opacity: 0.85;
- background-color: notebook-bg;
-}
-
-div.panel,
-div.panel-default,
-.panel,
-.panel-default {
- font-family: sans-serif;
- font-size: 13pt;
- background-color: #f4f4f4;
- color: #303030;
- margin-bottom: 14px;
- border: 0;
- box-shadow: none;
-}
-
-div.panel > .panel-heading,
-div.panel-default > .panel-heading {
- font-size: 14pt;
- color: #303030;
- background: #e4e4e4;
- background-color: #e4e4e4;
- border: 0;
-}
-
-.modal .modal-dialog {
- min-width: 950px;
- margin: 50px auto;
-}
-
-div.container-fluid {
- margin-right: auto;
- margin-left: auto;
- padding-left: 0px;
- padding-right: 5px;
-}
-
-div.form-control,
-.form-control {
- font-family: sans-serif;
- font-size: initial;
- color: #303030;
- background-color: #ffffff;
- border: 1px solid #d0d0d0 !important;
- margin-left: 2px;
- box-shadow: none;
- transition:
- border-color 0.15s ease-in-out 0s,
- box-shadow 0.15s ease-in-out 0s;
-}
-
-.form-control-static {
- min-height: inherit;
- height: inherit;
-}
-
-.form-group.list-group-item {
- color: #303030;
- background-color: #f4f4f4;
- border-color: #dedede;
- margin-bottom: 0px;
-}
-
-.form-group .input-group {
- float: left;
-}
-
-input,
-button,
-select,
-textarea {
- background-color: #ffffff;
- font-weight: normal;
- border: 1px solid #dedede;
-}
-
-select.form-control.select-xs {
- height: 33px;
- font-size: 13pt;
-}
-
-.toolbar select,
-.toolbar label {
- width: auto;
- vertical-align: middle;
- margin-right: 0px;
- margin-bottom: 0px;
- display: inline;
- font-size: 92%;
- margin-left: 10px;
- padding: 0px;
- background: #e5e5e5 !important;
- background-color: #e5e5e5 !important;
- border: 2px solid #e5e5e5 !important;
-}
-
-.form-control:focus {
- border-color: #ff7823;
- outline: 2px solid rgba(240, 147, 43, 0.5);
- -webkit-box-shadow: none;
-}
-
-::-webkit-input-placeholder {
- color: #828892;
-}
-
-::-moz-placeholder {
- color: #828892;
-}
-
-:-ms-input-placeholder {
- color: #828892;
-}
-
-:-moz-placeholder {
- color: #828892;
-}
-
-[dir="ltr"] #find-and-replace .input-group-btn + .form-control {
- border: 2px solid #dedede !important;
-}
-
-[dir="ltr"] #find-and-replace .input-group-btn + .form-control:focus {
- border-color: #ff7823;
- outline: 2px solid rgba(240, 147, 43, 0.5);
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-div.output.output_scroll {
- box-shadow: none;
-}
-
-::-webkit-scrollbar {
- width: 11px;
- max-height: 9px;
- background-color: #ebebeb;
- border-radius: 3px;
- border: none;
-}
-
-::-webkit-scrollbar-track {
- background: #ebebeb;
- border: none;
- width: 11px;
- max-height: 9px;
-}
-
-::-webkit-scrollbar-thumb {
- border-radius: 2px;
- border: none;
- background: #909090;
- background-clip: content-box;
- width: 11px;
-}
-
-HTML,
-body,
-div,
-dl,
-dt,
-dd,
-ul,
-ol,
-li,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-pre,
-code,
-form,
-fieldset,
-legend,
-input,
-button,
-textarea,
-p,
-blockquote,
-th,
-td,
-span,
-a {
- text-rendering: geometricPrecision;
- -webkit-font-smoothing: subpixel-antialiased;
- font-weight: 400;
-}
-
-div.input_area {
- background-color: #ededed;
- background: #ededed;
- padding-right: 1.2em;
- border: 0px;
- border-radius: 0px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-
-div.cell {
- padding: 0px;
- background: #ededed;
- background-color: #ededed;
- border: medium solid #ffffff;
- border-radius: 4px;
- top: 0;
-}
-
-div.cell.selected {
- background: #ededed;
- background-color: #ededed;
- border: medium solid #ffffff;
- padding: 0px;
- border-radius: 5px;
-}
-
-.edit_mode div.cell.selected {
- padding: 0px;
- background: #ededed;
- background-color: #ededed;
- border: medium solid #ffffff;
- border-radius: 5px;
-}
-
-div.cell.edit_mode {
- padding: 0px;
- background: #ededed;
- background-color: #ededed;
-}
-
-div.CodeMirror-sizer {
- margin-left: 0px;
- margin-bottom: -21px;
- border-right-width: 16px;
- min-height: 37px;
- padding-right: 0px;
- padding-bottom: 0px;
- margin-top: 0px;
-}
-
-div.cell.selected:before,
-.edit_mode div.cell.selected:before,
-div.cell.selected:before,
-div.cell.selected.jupyter-soft-selected:before {
- background: #ededed !important;
- border: none;
- border-radius: 3px;
- position: absolute;
- display: block;
- top: 0px;
- left: 0px;
- width: 0px;
- height: 100%;
-}
-
-div.cell.text_cell.selected::before,
-.edit_mode div.cell.text_cell.selected:before,
-div.cell.text_cell.selected:before,
-div.cell.text_cell.selected.jupyter-soft-selected:before {
- background: #ffffff !important;
- background-color: #ffffff !important;
- border-color: #f2f2f2 !important;
-}
-
-div.cell.code_cell .input {
- border-left: 5px solid #ededed !important;
- border-radius: 3px;
- border-bottom-left-radius: 3px;
- border-top-left-radius: 3px;
-}
-
-div.cell.code_cell.selected .input {
- border-left: 5px solid #ff7823 !important;
- border-radius: 3px;
-}
-
-.edit_mode div.cell.code_cell.selected .input {
- border-left: 5px solid #ffd5bb !important;
- border-radius: 3px;
-}
-
-.edit_mode div.cell.selected:before {
- height: 100%;
- border-left: 5px solid #ffd5bb !important;
- border-radius: 3px;
-}
-
-div.cell.jupyter-soft-selected,
-div.cell.selected.jupyter-soft-selected {
- border-left-color: #ffd5bb !important;
- border-left-width: 0px !important;
- padding-left: 7px !important;
- border-right-color: #ffd5bb !important;
- border-right-width: 0px !important;
- background: #ffd5bb !important;
- border-radius: 6px !important;
-}
-
-div.cell.selected.jupyter-soft-selected .input {
- border-left: 5px solid #ededed !important;
-}
-
-div.cell.selected.jupyter-soft-selected {
- border-left-color: #ff7823;
- border-color: #ffffff;
- padding-left: 7px;
- border-radius: 6px;
-}
-
-div.cell.code_cell.selected .input {
- border-left: none;
- border-radius: 3px;
-}
-
-div.cell.selected.jupyter-soft-selected .prompt,
-div.cell.text_cell.selected.jupyter-soft-selected .prompt {
- top: 0;
- border-left: #ededed !important;
- border-radius: 2px;
-}
-
-div.cell.text_cell.selected.jupyter-soft-selected .input_prompt {
- border-left: none !important;
-}
-
-div.cell.text_cell.jupyter-soft-selected,
-div.cell.text_cell.selected.jupyter-soft-selected {
- border-left-color: #f2f2f2 !important;
- border-left-width: 0px !important;
- padding-left: 26px !important;
- border-right-color: #f2f2f2 !important;
- border-right-width: 0px !important;
- background: #f2f2f2 !important;
- border-radius: 5px !important;
-}
-
-div.cell.jupyter-soft-selected .input,
-div.cell.selected.jupyter-soft-selected .input {
- border-left-color: #ffd5bb !important;
-}
-
-div.prompt,
-.prompt {
- font-family: monospace, monospace;
- font-size: 9pt !important;
- font-weight: normal;
- color: #828892;
- line-height: 170%;
- padding: 0px;
- padding-top: 4px;
- padding-left: 0px;
- padding-right: 1px;
- text-align: right !important;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
-}
-
-div.prompt.input_prompt {
- font-size: 9pt !important;
- background-color: #ededed;
- border-top: 0px;
- border-top-right-radius: 0px;
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
- padding-right: 3px;
- min-width: 11.5ex;
- width: 11.5ex !important;
-}
-
-div.cell.code_cell .input_prompt {
- border-right: 2px solid rgba(240, 147, 43, 0.5);
-}
-
-div.cell.selected .prompt {
- top: 0;
-}
-
-.edit_mode div.cell.selected .prompt {
- top: 0;
-}
-
-.edit_mode div.cell.selected .prompt {
- top: 0;
-}
-
-.run_this_cell {
- visibility: hidden;
- color: transparent;
- padding-top: 0px;
- padding-bottom: 0px;
- padding-left: 3px;
- padding-right: 12px;
- width: 1.5ex;
- width: 0ex;
- background: transparent;
- background-color: transparent;
-}
-
-div.code_cell:hover div.input .run_this_cell {
- visibility: visible;
-}
-
-div.cell.code_cell.rendered.selected .run_this_cell:hover {
- background-color: #e3e3e3;
- background: #e3e3e3;
- color: #ff7823 !important;
-}
-
-div.cell.code_cell.rendered.unselected .run_this_cell:hover {
- background-color: #e3e3e3;
- background: #e3e3e3;
- color: #ff7823 !important;
-}
-
-i.fa-step-forward.fa {
- display: inline-block;
- font: normal normal normal 9px "FontAwesome";
-}
-
-.fa-step-forward:before {
- content: "\f04b";
-}
-
-div.cell.selected.jupyter-soft-selected .run_this_cell,
-div.cell.selected.jupyter-soft-selected .run_this_cell:hover,
-div.cell.unselected.jupyter-soft-selected .run_this_cell:hover,
-div.cell.code_cell.rendered.selected.jupyter-soft-selected .run_this_cell:hover,
-div.cell.code_cell.rendered.unselected.jupyter-soft-selected .run_this_cell:hover {
- background-color: #ffd5bb !important;
- background: #ffd5bb !important;
- color: #ffd5bb !important;
-}
-
-div.output_wrapper {
- background-color: #ffffff;
- border: 0px;
- left: 0px;
- margin-bottom: 0em;
- margin-top: 0em;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
-}
-
-div.output_subarea.output_text.output_stream.output_stdout,
-div.output_subarea.output_text {
- font-family: monospace, monospace;
- font-size: 8.5pt !important;
- line-height: 150% !important;
- background-color: #ffffff;
- color: #303030;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- margin-left: 11.5px;
-}
-
-div.output_area pre {
- font-family: monospace, monospace;
- font-size: 8.5pt !important;
- line-height: 151% !important;
- color: #303030;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
-}
-
-div.output_area {
- display: -webkit-box;
-}
-
-div.output_html {
- font-family: monospace, monospace;
- font-size: 8.5pt;
- color: #353535;
- background-color: #ffffff;
- background: #ffffff;
-}
-
-div.output_subarea {
- overflow-x: auto;
- padding: 1.2em !important;
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- flex: 1;
-}
-
-div.btn.btn-default.output_collapsed {
- background: #d7d7d7;
- background-color: #d7d7d7;
- border-color: #d7d7d7;
-}
-
-div.btn.btn-default.output_collapsed:hover {
- background: #d2d2d2;
- background-color: #d2d2d2;
- border-color: #d2d2d2;
-}
-
-div.prompt.output_prompt {
- font-family: monospace, monospace;
- font-weight: bold !important;
- background-color: #ffffff;
- color: transparent;
- border-bottom-left-radius: 4px;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- border-bottom-right-radius: 0px;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
- border-right: 2px solid transparent;
-}
-
-div.out_prompt_overlay.prompt {
- font-family: monospace, monospace;
- font-weight: bold !important;
- background-color: #ffffff;
- border-bottom-left-radius: 2px;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- border-bottom-right-radius: 0px;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
- border-right: 2px solid transparent;
- color: transparent;
-}
-
-div.out_prompt_overlay.prompt:hover {
- background-color: #f7f7f7;
- box-shadow: none !important;
- border: none;
- border-bottom-left-radius: 2px;
- -webkit-border-: 2px;
- -moz-border-radius: 2px;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
- border-right: 2px solid #f7f7f7 !important;
-}
-
-div.cell.code_cell .output_prompt {
- border-right: 2px solid transparent;
- color: transparent;
-}
-
-div.cell.selected .output_prompt,
-div.cell.selected .out_prompt_overlay.prompt {
- border-left: 5px solid #f2f2f2;
- border-right: 2px solid #ffffff;
- border-radius: 0px !important;
-}
-
-.edit_mode div.cell.selected .output_prompt,
-.edit_mode div.cell.selected .out_prompt_overlay.prompt {
- border-left: 5px solid #f2f2f2;
- border-right: 2px solid #ffffff;
- border-radius: 0px !important;
-}
-
-div.text_cell,
-div.text_cell_render pre,
-div.text_cell_render {
- font-family: sans-serif;
- font-size: 13pt;
- line-height: 130% !important;
- color: #353535;
- background: #ffffff;
- background-color: #ffffff;
- border-radius: 0px;
-}
-
-div .text_cell_render {
- padding: 0.4em 0.4em 0.4em 0.4em;
-}
-
-div.cell.text_cell .CodeMirror-lines {
- padding-top: 0.7em !important;
- padding-bottom: 0.4em !important;
- padding-left: 0.5em !important;
- padding-right: 0.5em !important;
- margin-top: 0.4em;
- margin-bottom: 0.3em;
-}
-
-div.cell.text_cell.unrendered div.input_area,
-div.cell.text_cell.rendered div.input_area {
- background-color: #ffffff;
- background: #ffffff;
- border: 0px;
- border-radius: 2px;
-}
-
-div.cell.text_cell .CodeMirror,
-div.cell.text_cell .CodeMirror pre {
- line-height: 170% !important;
-}
-
-div.cell.text_cell.rendered.selected {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #ffffff;
- background-color: #ffffff;
- border-radius: 0px;
-}
-
-div.cell.text_cell.unrendered.selected {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #ffffff;
- background-color: #ffffff;
- border-radius: 0px;
-}
-
-div.cell.text_cell.selected {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #ffffff;
- background-color: #ffffff;
- border-radius: 0px;
-}
-
-.edit_mode div.cell.text_cell.selected {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #ffffff;
- background-color: #ffffff;
- border-radius: 0px;
-}
-
-div.text_cell.unrendered,
-div.text_cell.unrendered.selected,
-div.edit_mode div.text_cell.unrendered {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #ffffff;
- background-color: #ffffff;
- border-radius: 0px;
-}
-
-div.cell.text_cell .prompt {
- border-right: 0;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
-}
-
-div.cell.text_cell.rendered .prompt {
- font-family: monospace, monospace;
- font-size: 9.5pt !important;
- font-weight: normal;
- color: #828892 !important;
- text-align: right !important;
- min-width: 14.5ex !important;
- width: 14.5ex !important;
- background-color: #ffffff;
- border-right: 2px solid transparent;
- border-left: 4px solid #ffffff;
-}
-
-div.cell.text_cell.unrendered .prompt {
- font-family: monospace, monospace;
- font-size: 9.5pt !important;
- font-weight: normal;
- color: #828892 !important;
- text-align: right !important;
- min-width: 14.5ex !important;
- width: 14.5ex !important;
- border-right: 2px solid transparent;
- border-left: 4px solid #ffffff;
- background-color: #ffffff;
-}
-
-div.cell.text_cell.rendered .prompt {
- border-right: 2px solid transparent;
-}
-
-div.cell.text_cell.rendered.selected .prompt {
- top: 0;
- border-left: 4px solid #f2f2f2;
- border-right: 2px solid transparent;
-}
-
-div.text_cell.unrendered.selected .prompt,
-div.text_cell.rendered.selected .prompt {
- top: 0;
- background: #ffffff;
- border-left: 4px solid #f2f2f2;
- border-right: 2px solid transparent;
-}
-
-div.rendered_html code {
- font-family: monospace, monospace;
- font-size: 11pt;
- padding-top: 3px;
- padding-left: 2px;
- color: #303030;
- background: #efefef;
- background-color: #efefef;
-}
-
-pre,
-code,
-kbd,
-samp {
- white-space: pre-wrap;
-}
-
-.well code,
-code {
- font-family: monospace, monospace;
- font-size: 11pt !important;
- line-height: 170% !important;
- color: #353535;
- background: #efefef;
- background-color: #efefef;
- border-color: #efefef;
-}
-
-kbd {
- padding: 1px;
- font-size: 11pt;
- font-weight: 800;
- color: #303030;
- background-color: transparent !important;
- border: 0;
- box-shadow: none;
-}
-
-pre {
- display: block;
- padding: 8.5px;
- margin: 0 0 9px;
- font-size: 12pt;
- line-height: 1.42857143;
- color: #303030;
- background-color: #efefef;
- border: 1px solid #e7e7e7;
- border-radius: 2px;
-}
-
-div.rendered_html {
- color: #353535;
-}
-
-.rendered_html * + ul {
- margin-top: 0.4em;
- margin-bottom: 0.3em;
-}
-
-.rendered_html * + p {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
-}
-
-div.rendered_html pre {
- font-family: monospace, monospace;
- font-size: 11pt !important;
- line-height: 170% !important;
- color: #353535 !important;
- background: #efefef;
- background-color: #efefef;
- max-width: 80%;
- border-radius: 0px;
- border-left: 3px solid #efefef;
- max-width: 80%;
- border-radius: 0px;
- padding-left: 5px;
- margin-left: 6px;
-}
-
-div.text_cell_render pre,
-div.text_cell_render code {
- font-family: monospace, monospace;
- font-size: 11pt !important;
- line-height: 170% !important;
- color: #353535;
- background: #ffffff;
- background-color: #ffffff;
- max-width: 80%;
- border-radius: 0px;
- border-left: none;
-}
-
-div.text_cell_render pre {
- border-left: 3px solid rgba(240, 147, 43, 0.5) !important;
- max-width: 80%;
- border-radius: 0px;
- padding-left: 5px;
- margin-left: 6px;
-}
-
-div.text_cell_render h1,
-div.rendered_html h1,
-div.text_cell_render h2,
-div.rendered_html h2,
-div.text_cell_render h3,
-div.rendered_html h3,
-div.text_cell_render h4,
-div.rendered_html h4,
-div.text_cell_render h5,
-div.rendered_html h5 {
- font-family: sans-serif;
- margin: 0.4em 0.2em 0.3em 0.2em !important;
-}
-
-.rendered_html h1:first-child,
-.rendered_html h2:first-child,
-.rendered_html h3:first-child,
-.rendered_html h4:first-child,
-.rendered_html h5:first-child,
-.rendered_html h6:first-child {
- margin-top: 0.2em !important;
- margin-bottom: 0.2em !important;
-}
-
-.rendered_html h1,
-.text_cell_render h1 {
- color: #126dce !important;
- font-size: 200%;
- text-align: left;
- font-style: normal;
- font-weight: normal;
-}
-
-.rendered_html h2,
-.text_cell_render h2 {
- color: #126dce !important;
- font-size: 170%;
- font-style: normal;
- font-weight: normal;
-}
-
-.rendered_html h3,
-.text_cell_render h3 {
- color: #126dce !important;
- font-size: 140%;
- font-style: normal;
- font-weight: normal;
-}
-
-.rendered_html h4,
-.text_cell_render h4 {
- color: #126dce !important;
- font-size: 110%;
- font-style: normal;
- font-weight: normal;
-}
-
-.rendered_html h5,
-.text_cell_render h5 {
- color: #126dce !important;
- font-size: 100%;
- font-style: normal;
- font-weight: normal;
-}
-
-hr {
- margin-top: 8px;
- margin-bottom: 10px;
- border: 0;
- border-top: 1px solid #126dce;
-}
-
-.rendered_html hr {
- color: #126dce;
- background-color: #126dce;
- margin-right: 2em;
-}
-
-#complete > select > option:hover {
- background: #d4d4d4;
- background-color: #d4d4d4;
-}
-
-div#_vivaldi-spatnav-focus-indicator._vivaldi-spatnav-focus-indicator {
- position: absolute;
- z-index: 9999999999;
- top: 0px;
- left: 0px;
- box-shadow: none;
- pointer-events: none;
- border-radius: 2px;
-}
-
-.rendered_html tr,
-.rendered_html th,
-.rendered_html td {
- text-align: left;
- vertical-align: middle;
- padding: 0.42em 0.47em;
- line-height: normal;
- white-space: normal;
- max-width: none;
- border: none;
-}
-
-.rendered_html td {
- font-family: sans-serif !important;
- font-size: 9.3pt;
-}
-
-.rendered_html table {
- font-family: sans-serif !important;
- margin-left: 8px;
- margin-right: auto;
- border: none;
- border-collapse: collapse;
- border-spacing: 0;
- color: #353535;
- table-layout: fixed;
-}
-
-.rendered_html thead {
- font-family: sans-serif !important;
- font-size: 10.3pt !important;
- background: #ebebeb;
- color: #353535;
- border-bottom: 1px solid #ebebeb;
- vertical-align: bottom;
-}
-
-.rendered_html tbody tr:nth-child(odd) {
- background: #fafafa;
-}
-
-.rendered_html tbody tr {
- background: #f2f2f2;
-}
-
-.rendered_html tbody tr:hover:nth-child(odd) {
- background: #f7f7f7;
-}
-
-.rendered_html tbody tr:hover {
- background: #f0f0f0;
-}
-
-.rendered_html * + table {
- margin-top: 0.05em;
-}
-
-div.widget-area {
- background-color: #ffffff;
- background: #ffffff;
- color: #303030;
-}
-
-div.widget-area a {
- font-family: sans-serif;
- font-size: 12pt;
- font-weight: normal;
- font-style: normal;
- color: #303030;
- text-shadow: none !important;
-}
-
-div.widget-area a:hover,
-div.widget-area a:focus {
- font-family: sans-serif;
- font-size: 12pt;
- font-weight: normal;
- font-style: normal;
- color: #2f2f2f;
- background: rgba(180, 180, 180, 0.14);
- background-color: rgba(180, 180, 180, 0.14);
- border-color: transparent;
- background-image: none;
- text-shadow: none !important;
-}
-
-div.widget_item.btn-group > button.btn.btn-default.widget-combo-btn,
-div.widget_item.btn-group > button.btn.btn-default.widget-combo-btn:hover {
- background: #e1e1e1;
- background-color: #e1e1e1;
- border: 2px solid #e1e1e1 !important;
- font-size: inherit;
- z-index: 0;
-}
-
-div.jupyter-widgets.widget-hprogress.widget-hbox {
- display: inline-table !important;
- width: 38% !important;
- margin-left: 10px;
-}
-
-div.jupyter-widgets.widget-hprogress.widget-hbox .widget-label,
-div.widget-hbox .widget-label,
-.widget-hbox .widget-label,
-.widget-inline-hbox .widget-label,
-div.widget-label {
- text-align: -webkit-auto !important;
- margin-left: 15px !important;
- max-width: 240px !important;
- min-width: 100px !important;
- vertical-align: text-top !important;
- color: #303030 !important;
- font-size: 14px !important;
-}
-
-.widget-hprogress .progress {
- flex-grow: 1;
- height: 20px;
- margin-top: auto;
- margin-left: 12px;
- margin-bottom: auto;
- width: 300px;
-}
-
-.progress {
- overflow: hidden;
- height: 22px;
- margin-bottom: 10px;
- padding-left: 10px;
- background-color: #d6d6d6 !important;
- border-radius: 2px;
- -webkit-box-shadow: none;
- box-shadow: none;
- z-index: 10;
-}
-
-.progress-bar-danger {
- background-color: #e5344a !important;
-}
-
-.progress-bar-info {
- background-color: #2980b9 !important;
-}
-
-.progress-bar-warning {
- background-color: #f39c12 !important;
-}
-
-.progress-bar-success {
- background-color: #5cb85c !important;
-}
-
-.widget-select select {
- margin-left: 12px;
-}
-
-.rendered_html :link {
- font-family: sans-serif;
- font-size: 100%;
- color: #ff7823;
- text-decoration: underline;
-}
-
-.rendered_html :visited,
-.rendered_html :visited:active,
-.rendered_html :visited:focus {
- color: #fa853d;
-}
-
-.rendered_html :visited:hover,
-.rendered_html :link:hover {
- font-family: sans-serif;
- font-size: 100%;
- color: #f96000;
-}
-
-div.cell.text_cell a.anchor-link:link {
- font-size: inherit;
- text-decoration: none;
- padding: 0px 20px;
- visibility: none;
- color: rgba(0, 0, 0, 0.32);
-}
-
-div.cell.text_cell a.anchor-link:link:hover {
- font-size: inherit;
- color: #de6d25;
-}
-
-.navbar-text {
- margin-top: 4px;
- margin-bottom: 0px;
-}
-
-#clusters > a {
- color: #ef5c00;
- text-decoration: underline;
- cursor: auto;
-}
-
-#clusters > a:hover {
- color: #126dce;
- text-decoration: underline;
- cursor: auto;
-}
-
-#nbextensions-configurator-container > div.row.container-fluid.nbext-selector > h3 {
- font-size: 17px;
- margin-top: 5px;
- margin-bottom: 8px;
- height: 24px;
- padding: 4px 0 4px 0;
-}
-
-div#nbextensions-configurator-container.container,
-#nbextensions-configurator-container.container {
- width: 100%;
- margin-right: auto;
- margin-left: auto;
-}
-
-div.nbext-selector > nav > .nav > li > a {
- font-family: sans-serif;
- font-size: 10.5pt;
- padding: 2px 5px;
-}
-
-div.nbext-selector > nav > .nav > li > a:hover {
- background: transparent;
-}
-
-div.nbext-selector > nav > .nav > li:hover {
- background-color: rgba(180, 180, 180, 0.14) !important;
- background: rgba(180, 180, 180, 0.14) !important;
-}
-
-div.nbext-selector > nav > .nav > li.active:hover {
- background: transparent !important;
- background-color: transparent !important;
-}
-
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:active,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
- color: #1c1c1c;
- background-color: rgba(180, 180, 180, 0.14) !important;
- background: rgba(180, 180, 180, 0.14) !important;
- -webkit-backface-visibility: hidden;
- -webkit-font-smoothing: subpixel-antialiased !important;
-}
-
-div.nbext-readme > .nbext-readme-contents > .rendered_html {
- font-family: sans-serif;
- font-size: 11.5pt;
- line-height: 145%;
- padding: 1em 1em;
- color: #353535;
- background-color: #ffffff;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-
-.nbext-icon,
-.nbext-desc,
-.nbext-compat-div,
-.nbext-enable-btns,
-.nbext-params {
- margin-bottom: 8px;
- font-size: 11.5pt;
-}
-
-div.nbext-readme > .nbext-readme-contents {
- padding: 0;
- overflow-y: hidden;
-}
-
-div.nbext-readme > .nbext-readme-contents:not(:empty) {
- margin-top: 0.5em;
- margin-bottom: 2em;
- border: none;
- border-top-color: #828892;
-}
-
-.nbext-showhide-incompat {
- padding-bottom: 0.5em;
- color: #4a4a4a;
- font-size: 10.5pt;
-}
-
-.nbext-filter-menu.dropdown-menu > li > a:hover,
-.nbext-filter-menu.dropdown-menu > li > a:focus,
-.nbext-filter-menu.dropdown-menu > li > a.ui-state-focus {
- color: #2f2f2f !important;
- background-color: #d4d4d4 !important;
- background: #d4d4d4 !important;
- border-color: #d4d4d4 !important;
-}
-
-.nbext-filter-input-wrap > .nbext-filter-input-subwrap,
-.nbext-filter-input-wrap > .nbext-filter-input-subwrap > input {
- border: none;
- outline: none;
- background-color: transparent;
- padding: 0;
- vertical-align: middle;
- margin-top: -2px;
-}
-
-span.rendered_html code {
- background-color: transparent;
- color: #303030;
-}
-
-#nbextensions-configurator-container > div.row.container-fluid.nbext-selector {
- padding-left: 0px;
- padding-right: 0px;
-}
-
-.nbext-filter-menu {
- max-height: 55vh !important;
- overflow-y: auto;
- outline: none;
- border: none;
-}
-
-.nbext-filter-menu:hover {
- border: none;
-}
-
-.alert-warning {
- background-color: #f4f4f4;
- border-color: #f4f4f4;
- color: #303030;
-}
-
-.notification_widget.danger {
- color: #ffffff;
- background-color: #e5344a;
- border-color: #e5344a;
- padding-right: 5px;
-}
-
-#nbextensions-configurator-container > div.nbext-buttons.tree-buttons.no-padding.pull-right > span > button {
- border: none !important;
-}
-
-button#refresh_running_list {
- border: none !important;
-}
-
-mark,
-.mark {
- background-color: #ffffff;
- color: #353535;
- padding: 0.15em;
-}
-
-a.text-warning,
-a.text-warning:hover {
- color: #828892;
-}
-
-a.text-warning.bg-warning {
- background-color: #ffffff;
-}
-
-span.bg-success.text-success {
- background-color: transparent;
- color: #009e07;
-}
-
-span.bg-danger.text-danger {
- background-color: #ffffff;
- color: #de143d;
-}
-
-.has-success .input-group-addon {
- color: #009e07;
- border-color: transparent;
- background: inherit;
- background-color: rgba(83, 180, 115, 0.1);
-}
-
-.has-success .form-control {
- border-color: #009e07;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
-}
-
-.has-error .input-group-addon {
- color: #de143d;
- border-color: transparent;
- background: inherit;
- background-color: rgba(192, 57, 67, 0.1);
-}
-
-.has-error .form-control {
- border-color: #de143d;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
-}
-
-.kse-input-group-pretty > kbd {
- font-family: monospace, monospace;
- color: #303030;
- font-weight: normal;
- background: transparent;
-}
-
-.kse-input-group-pretty > kbd {
- font-family: monospace, monospace;
- color: #303030;
- font-weight: normal;
- background: transparent;
-}
-
-div.nbext-enable-btns .btn[disabled],
-div.nbext-enable-btns .btn[disabled]:hover,
-.btn-default.disabled,
-.btn-default[disabled] {
- background: #e2e2e2;
- background-color: #e2e2e2;
- color: #282828;
-}
-
-label#Keyword-Filter {
- display: none;
-}
-
-.input-group .nbext-list-btn-add,
-.input-group-btn:last-child > .btn-group > .btn {
- background: #e4e4e4;
- background-color: #e4e4e4;
- border-color: #e4e4e4;
- border: 2px solid #e4e4e4;
-}
-
-.input-group .nbext-list-btn-add:hover,
-.input-group-btn:last-child > .btn-group > .btn:hover {
- background: #dfdfdf;
- background-color: #dfdfdf;
- border-color: #dfdfdf;
- border: 2px solid #dfdfdf;
-}
-
-#notebook-container
- > div.cell.code_cell.rendered.selected
- > div.widget-area
- > div.widget-subarea
- > div
- > div.widget_item.btn-group
- > button.btn.btn-default.dropdown-toggle.widget-combo-carrot-btn {
- background: #e4e4e4;
- background-color: #e4e4e4;
- border-color: #e4e4e4;
-}
-
-#notebook-container
- > div.cell.code_cell.rendered.selected
- > div.widget-area
- > div.widget-subarea
- > div
- > div.widget_item.btn-group
- > button.btn.btn-default.dropdown-toggle.widget-combo-carrot-btn:hover {
- background: #dfdfdf;
- background-color: #dfdfdf;
- border-color: #dfdfdf;
-}
-
-.ui-widget-content {
- background: #e5e5e5;
- background-color: #e5e5e5;
- border: 2px solid #e5e5e5;
- color: #303030;
-}
-
-div.collapsible_headings_toggle {
- color: rgba(180, 180, 180, 0.3) !important;
-}
-
-div.collapsible_headings_toggle:hover {
- color: #ff7823 !important;
-}
-
-.collapsible_headings_toggle .h1,
-.collapsible_headings_toggle .h2,
-.collapsible_headings_toggle .h3,
-.collapsible_headings_toggle .h4,
-.collapsible_headings_toggle .h5,
-.collapsible_headings_toggle .h6 {
- margin: 0.3em 0.4em 0em 0em !important;
- line-height: 1.2 !important;
-}
-
-div.collapsible_headings_toggle .fa-caret-down:before,
-div.collapsible_headings_toggle .fa-caret-right:before {
- font-size: xx-large;
- transition: transform 1000ms;
- transform: none !important;
-}
-
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h1:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h2:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h3:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h4:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h5:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h6:after {
- position: absolute;
- right: 0;
- bottom: 20% !important;
- content: "[\002026]";
- color: rgba(180, 180, 180, 0.3) !important;
- padding: 0.5em 0em 0em 0em !important;
-}
-
-.collapsible_headings_ellipsis .rendered_html h1,
-.collapsible_headings_ellipsis .rendered_html h2,
-.collapsible_headings_ellipsis .rendered_html h3,
-.collapsible_headings_ellipsis .rendered_html h4,
-.collapsible_headings_ellipsis .rendered_html h5,
-.collapsible_headings_ellipsis .rendered_html h6,
-.collapsible_headings_toggle .fa {
- transition: transform 1000ms !important;
- -webkit-transform: inherit !important;
- -moz-transform: inherit !important;
- -ms-transform: inherit !important;
- -o-transform: inherit !important;
- transform: inherit !important;
- padding-right: 0px !important;
-}
-
-#toc-wrapper {
- z-index: 90;
- position: fixed !important;
- display: flex;
- flex-direction: column;
- overflow: hidden;
- padding: 10px;
- border-style: solid;
- border-width: thin;
- border-right-width: medium !important;
- background-color: #ffffff !important;
-}
-
-#toc-wrapper.ui-draggable.ui-resizable.sidebar-wrapper {
- border-color: rgba(180, 180, 180, 0.14) !important;
-}
-
-#toc a,
-#navigate_menu a,
-.toc {
- color: #303030 !important;
- font-size: 11pt !important;
-}
-
-#toc li > span:hover {
- background-color: #d4d4d4 !important;
-}
-
-#toc a:hover,
-#navigate_menu a:hover,
-.toc {
- color: #1c1c1c !important;
- font-size: 11pt !important;
-}
-
-#toc-wrapper .toc-item-num {
- color: #ff7823 !important;
- font-size: 11pt !important;
-}
-
-input.raw_input {
- font-family: monospace, monospace;
- font-size: 11pt !important;
- color: #303030;
- background-color: #efefef;
- border-color: #ececec;
- background: #ececec;
- width: auto;
- vertical-align: baseline;
- padding: 0em 0.25em;
- margin: 0em 0.25em;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-audio,
-video {
- display: inline;
- vertical-align: middle;
- align-content: center;
- margin-left: 20%;
-}
-
-.cmd-palette .modal-body {
- padding: 0px;
- margin: 0px;
-}
-
-.cmd-palette form {
- background: #e5e5e5;
- background-color: #e5e5e5;
-}
-
-.typeahead-field input:last-child,
-.typeahead-hint {
- background: #e5e5e5;
- background-color: #e5e5e5;
- z-index: 1;
-}
-
-.typeahead-field input {
- font-family: sans-serif;
- color: #303030;
- border: none;
- font-size: 28pt;
- display: inline-block;
- line-height: inherit;
- padding: 3px 10px;
- height: 70px;
-}
-
-.typeahead-select {
- background-color: #e5e5e5;
-}
-
-body > div.modal.cmd-palette.typeahead-field {
- display: table;
- border-collapse: separate;
- background-color: #f4f4f4;
-}
-
-.typeahead-container button {
- font-family: sans-serif;
- font-size: 28pt;
- background-color: #e4e4e4;
- border: none;
- display: inline-block;
- line-height: inherit;
- padding: 3px 10px;
- height: 70px;
-}
-
-.typeahead-search-icon {
- min-width: 40px;
- min-height: 55px;
- display: block;
- vertical-align: middle;
- text-align: center;
-}
-
-.typeahead-container button:focus,
-.typeahead-container button:hover {
- color: #2f2f2f;
- background-color: #dfdfdf;
- border-color: #e0e0e0;
-}
-
-.typeahead-list > li.typeahead-group.active > a,
-.typeahead-list > li.typeahead-group > a,
-.typeahead-list > li.typeahead-group > a:focus,
-.typeahead-list > li.typeahead-group > a:hover {
- display: none;
-}
-
-.typeahead-dropdown > li > a,
-.typeahead-list > li > a {
- color: #303030;
- text-decoration: none;
-}
-
-.typeahead-dropdown,
-.typeahead-list {
- font-family: sans-serif;
- font-size: 13pt;
- color: #303030;
- background-color: #ffffff;
- border: none;
- background-clip: padding-box;
- margin-top: 0px;
- padding: 3px 2px 3px 0px;
- line-height: 1.7;
-}
-
-.typeahead-dropdown > li.active > a,
-.typeahead-dropdown > li > a:focus,
-.typeahead-dropdown > li > a:hover,
-.typeahead-list > li.active > a,
-.typeahead-list > li > a:focus,
-.typeahead-list > li > a:hover {
- color: #2f2f2f;
- background-color: #f4f4f4;
- border-color: #f4f4f4;
-}
-
-.command-shortcut:before {
- content: "(command)";
- padding-right: 3px;
- color: #828892;
-}
-
-.edit-shortcut:before {
- content: "(edit)";
- padding-right: 3px;
- color: #828892;
-}
-
-ul.typeahead-list i {
- margin-left: 1px;
- width: 18px;
- margin-right: 10px;
-}
-
-ul.typeahead-list {
- max-height: 50vh;
- overflow: auto;
-}
-
-.typeahead-list > li {
- position: relative;
- border: none;
-}
-
-div.input.typeahead-hint,
-input.typeahead-hint,
-body > div.modal.cmd-palette.in > div > div > div > form > div > div.typeahead-field > span.typeahead-query > input.typeahead-hint {
- color: #828892 !important;
- background-color: transparent;
- padding: 3px 10px;
-}
-
-.typeahead-dropdown > li > a,
-.typeahead-list > li > a {
- display: block;
- padding: 5px;
- clear: both;
- font-weight: 400;
- line-height: 1.7;
- border: 1px solid #ffffff;
- border-bottom-color: rgba(180, 180, 180, 0.3);
-}
-
-body > div.modal.cmd-palette.in > div {
- min-width: 750px;
- margin: 150px auto;
-}
-
-.typeahead-container strong {
- font-weight: bolder;
- color: #ff7823;
-}
-
-#find-and-replace #replace-preview .match,
-#find-and-replace #replace-preview .insert {
- color: #ffffff;
- background-color: #ff7823;
- border-color: #ff7823;
- border-style: solid;
- border-width: 1px;
- border-radius: 0px;
-}
-
-#find-and-replace #replace-preview .replace .match {
- background-color: #de143d;
- border-color: #de143d;
- border-radius: 0px;
-}
-
-#find-and-replace #replace-preview .replace .insert {
- background-color: #009e07;
- border-color: #009e07;
- border-radius: 0px;
-}
-
-.jupyter-dashboard-menu-item.selected::before {
- font-family: "FontAwesome" !important;
- content: "\f00c" !important;
- position: absolute !important;
- color: #ff7823 !important;
- left: 0px !important;
- top: 13px !important;
- font-size: 12px !important;
-}
-
-.shortcut_key,
-span.shortcut_key {
- display: inline-block;
- width: 16ex;
- text-align: right;
- font-family: monospace;
-}
-
-.jupyter-keybindings {
- padding: 1px;
- line-height: 24px;
- border-bottom: 1px solid rgba(180, 180, 180, 0.14);
-}
-
-.jupyter-keybindings i {
- background: #efefef;
- font-size: small;
- padding: 5px;
- margin-left: 7px;
-}
-
-div#short-key-bindings-intro.well,
-.well {
- background-color: #e4e4e4;
- border: 1px solid #e4e4e4;
- color: #303030;
- border-radius: 2px;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-#texteditor-backdrop {
- background: #ffffff;
- background-color: #ffffff;
-}
-
-#texteditor-backdrop #texteditor-container .CodeMirror-gutter,
-#texteditor-backdrop #texteditor-container .CodeMirror-gutters {
- background: #e0e1e3;
- background-color: #e0e1e3;
- color: #828892;
-}
-
-.edit_app #menubar .navbar {
- margin-bottom: 0px;
-}
-
-#texteditor-backdrop #texteditor-container {
- padding: 0px;
- background-color: #ededed;
- box-shadow: none;
-}
-
-.terminal-app {
- background: #ffffff;
-}
-
-.terminal-app > #header {
- background: #ffffff;
-}
-
-.terminal-app .terminal {
- font-family: monospace, monospace;
- font-size: 11pt;
- line-height: 170%;
- color: #303030;
- background: #ededed;
- padding: 0.4em;
- border-radius: 2px;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-.terminal .xterm-viewport {
- background-color: #ededed;
- color: #303030;
- overflow-y: auto;
-}
-
-.terminal .xterm-color-0 {
- color: #ff7823;
-}
-
-.terminal .xterm-color-1 {
- color: #de143d;
-}
-
-.terminal .xterm-color-2 {
- color: #713bc5;
-}
-
-.terminal .xterm-color-3 {
- color: #e22978;
-}
-
-.terminal .xterm-color-4 {
- color: #ff8132;
-}
-
-.terminal .xterm-color-5 {
- color: #009e07;
-}
-
-.terminal .xterm-color-6 {
- color: #e22978;
-}
-
-.terminal .xterm-color-7 {
- color: #e22978;
-}
-
-.terminal .xterm-color-8 {
- color: #ef5c00;
-}
-
-.terminal .xterm-color-9 {
- color: #009e07;
-}
-
-.terminal .xterm-color-10 {
- color: #e22978;
-}
-
-.terminal .xterm-color-14 {
- color: #e22978;
-}
-
-.terminal .xterm-bg-color-15 {
- background-color: #ededed;
-}
-
-.terminal:not(.xterm-cursor-style-underline):not(.xterm-cursor-style-bar) .terminal-cursor {
- background-color: #ff7823;
- color: #ededed;
-}
-
-.terminal:not(.focus) .terminal-cursor {
- outline: 1px solid #ff7823;
- outline-offset: -1px;
-}
-
-.celltoolbar {
- font-size: 100%;
- padding-top: 3px;
- border-color: transparent;
- border-bottom: thin solid #828892;
- background: transparent;
-}
-
-.cell-tag,
-.tags-input input,
-.tags-input button {
- color: #303030;
- background-color: #ffffff;
- background-image: none;
- border: 1px solid #303030;
- border-radius: 1px;
- box-shadow: none;
- width: inherit;
- font-size: inherit;
- height: 22px;
- line-height: 22px;
-}
-
-#notebook-container > div.cell.code_cell.rendered.selected > div.input > div.inner_cell > div.ctb_hideshow.ctb_show > div > div > button,
-#notebook-container > div.input > div.inner_cell > div.ctb_hideshow.ctb_show > div > div > button {
- font-size: 10pt;
- color: #303030;
- background-color: #ffffff;
- background-image: none;
- border: 1px solid #303030;
- border-radius: 1px;
- box-shadow: none;
- width: inherit;
- font-size: inherit;
- height: 22px;
- line-height: 22px;
-}
-
-div#pager #pager-contents {
- background: #ffffff !important;
- background-color: #ffffff !important;
-}
-
-div#pager pre {
- color: #303030 !important;
- background: #ededed !important;
- background-color: #ededed !important;
- padding: 0.4em;
-}
-
-div#pager .ui-resizable-handle {
- top: 0px;
- height: 8px;
- background: #ff7823 !important;
- border-top: 1px solid #ff7823;
- border-bottom: 1px solid #ff7823;
-}
-
-div.CodeMirror,
-div.CodeMirror pre {
- font-family: monospace, monospace;
- font-size: 11pt;
- line-height: 170%;
- color: #303030;
-}
-
-div.CodeMirror-lines {
- padding-bottom: 0.9em;
- padding-left: 0.5em;
- padding-right: 1.5em;
- padding-top: 0.7em;
-}
-
-span.ansiblack,
-.ansi-black-fg {
- color: #e22978;
-}
-
-span.ansiblue,
-.ansi-blue-fg,
-.ansi-blue-intense-fg {
- color: #009e07;
-}
-
-span.ansigray,
-.ansi-gray-fg,
-.ansi-gray-intense-fg {
- color: #ff8132;
-}
-
-span.ansigreen,
-.ansi-green-fg {
- color: #333333;
-}
-
-.ansi-green-intense-fg {
- color: #ff8132;
-}
-
-span.ansipurple,
-.ansi-purple-fg,
-.ansi-purple-intense-fg {
- color: #653bc5;
-}
-
-span.ansicyan,
-.ansi-cyan-fg,
-.ansi-cyan-intense-fg {
- color: #653bc5;
-}
-
-span.ansiyellow,
-.ansi-yellow-fg,
-.ansi-yellow-intense-fg {
- color: #ff8132;
-}
-
-span.ansired,
-.ansi-red-fg,
-.ansi-red-intense-fg {
- color: #de143d;
-}
-
-div.output-stderr {
- background-color: #ebb5b7;
-}
-
-div.output-stderr pre {
- color: #000000;
-}
-
-div.js-error {
- color: #de143d;
-}
-
-.ipython_tooltip {
- font-family: monospace, monospace;
- font-size: 11pt;
- line-height: 170%;
- border: 2px solid #dadada;
- background: #eeeeee;
- background-color: #eeeeee;
- border-radius: 2px;
- overflow-x: visible;
- overflow-y: visible;
- box-shadow: none;
- position: absolute;
- z-index: 1000;
-}
-
-.ipython_tooltip .tooltiptext pre {
- font-family: monospace, monospace;
- font-size: 11pt;
- line-height: 170%;
- background: #eeeeee;
- background-color: #eeeeee;
- color: #303030;
- overflow-x: visible;
- overflow-y: visible;
- max-width: 900px;
-}
-
-div#tooltip.ipython_tooltip {
- overflow-x: wrap;
- overflow-y: visible;
- max-width: 800px;
-}
-
-div.tooltiptext.bigtooltip {
- overflow-x: visible;
- overflow-y: scroll;
- height: 400px;
- max-width: 800px;
-}
-
-.cm-s-ipython.CodeMirror {
- font-family: monospace, monospace;
- font-size: 11pt;
- background: #ededed;
- color: #303030;
- border-radius: 2px;
- font-style: normal;
- font-weight: normal;
-}
-
-.cm-s-ipython div.CodeMirror-selected {
- background: #e0e1e3;
-}
-
-.CodeMirror-gutters {
- border: none;
- border-right: 1px solid #e0e1e3 !important;
- background-color: #e0e1e3 !important;
- background: #e0e1e3 !important;
- border-radius: 0px;
- white-space: nowrap;
-}
-
-.cm-s-ipython .CodeMirror-gutters {
- background: #e0e1e3;
- border: none;
- border-radius: 0px;
- width: 36px;
-}
-
-.cm-s-ipython .CodeMirror-linenumber {
- color: #828892;
-}
-
-.CodeMirror-sizer {
- margin-left: 40px;
-}
-
-.CodeMirror-linenumber,
-div.CodeMirror-linenumber,
-.CodeMirror-gutter.CodeMirror-linenumberdiv.CodeMirror-gutter.CodeMirror-linenumber {
- padding-right: 1px;
- margin-left: 0px;
- margin: 0px;
- width: 26px !important;
- padding: 0px;
- text-align: right;
-}
-
-.CodeMirror-linenumber {
- color: #828892;
-}
-
-.cm-s-ipython .CodeMirror-cursor {
- border-left: 2px solid #ff711a !important;
-}
-
-.cm-s-ipython span.cm-comment {
- color: #8d8d8d;
- font-style: italic;
-}
-
-.cm-s-ipython span.cm-atom {
- color: #055be0;
-}
-
-.cm-s-ipython span.cm-number {
- color: #ff8132;
-}
-
-.cm-s-ipython span.cm-property {
- color: #303030;
-}
-
-.cm-s-ipython span.cm-attribute {
- color: #303030;
-}
-
-.cm-s-ipython span.cm-keyword {
- color: #713bc5;
- font-weight: normal;
-}
-
-.cm-s-ipython span.cm-string {
- color: #009e07;
-}
-
-.cm-s-ipython span.cm-meta {
- color: #aa22ff;
-}
-
-.cm-s-ipython span.cm-operator {
- color: #055be0;
-}
-
-.cm-s-ipython span.cm-builtin {
- color: #e22978;
-}
-
-.cm-s-ipython span.cm-variable {
- color: #303030;
-}
-
-.cm-s-ipython span.cm-variable-2 {
- color: #de143d;
-}
-
-.cm-s-ipython span.cm-variable-3 {
- color: #aa22ff;
-}
-
-.cm-s-ipython span.cm-def {
- color: #e22978;
- font-weight: normal;
-}
-
-.cm-s-ipython span.cm-error {
- background: rgba(191, 11, 55, 0.7);
-}
-
-.cm-s-ipython span.cm-tag {
- color: #e22978;
-}
-
-.cm-s-ipython span.cm-link {
- color: #ef5c00;
-}
-
-.cm-s-ipython span.cm-storage {
- color: #055be0;
-}
-
-.cm-s-ipython span.cm-entity {
- color: #e22978;
-}
-
-.cm-s-ipython span.cm-quote {
- color: #009e07;
-}
-
-div.CodeMirror span.CodeMirror-matchingbracket {
- color: #ffffff;
- font-weight: bold;
- background-color: #009e07;
-}
-
-div.CodeMirror span.CodeMirror-nonmatchingbracket {
- color: #ffffff;
- font-weight: bold;
- background: rgba(191, 11, 55, 0.7) !important;
-}
-
-.cm-header-1 {
- font-size: 215%;
-}
-
-.cm-header-2 {
- font-size: 180%;
-}
-
-.cm-header-3 {
- font-size: 150%;
-}
-
-.cm-header-4 {
- font-size: 120%;
-}
-
-.cm-header-5 {
- font-size: 100%;
-}
-
-.cm-s-default .cm-hr {
- color: #055be0;
-}
-
-div.cell.text_cell .cm-s-default .cm-header {
- font-family: sans-serif;
- font-weight: normal;
- color: #126dce !important;
- margin-top: 0.3em !important;
- margin-bottom: 0.3em !important;
-}
-
-div.cell.text_cell .cm-s-default span.cm-variable-2 {
- color: #353535 !important;
-}
-
-div.cell.text_cell .cm-s-default span.cm-variable-3 {
- color: #aa22ff !important;
-}
-
-.cm-s-default span.cm-comment {
- color: #8d8d8d !important;
-}
-
-.cm-s-default .cm-tag {
- color: #009fb7;
-}
-
-.cm-s-default .cm-builtin {
- color: #e22978;
-}
-
-.cm-s-default .cm-string {
- color: #009e07;
-}
-
-.cm-s-default .cm-keyword {
- color: #713bc5;
-}
-
-.cm-s-default .cm-number {
- color: #ff8132;
-}
-
-.cm-s-default .cm-error {
- color: #055be0;
-}
-
-.cm-s-default .cm-link {
- color: #ef5c00;
-}
-
-.cm-s-default .cm-atom {
- color: #ff8132;
-}
-
-.cm-s-default .cm-def {
- color: #e22978;
-}
-
-.CodeMirror-cursor {
- border-left: 2px solid #ff711a !important;
- border-right: none;
- width: 0;
-}
-
-.cm-s-default div.CodeMirror-selected {
- background: #e0e1e3;
-}
-
-.cm-s-default .cm-selected {
- background: #e0e1e3;
-}
-
-.MathJax_Display,
-.MathJax {
- border: 0 !important;
- font-size: 100% !important;
- text-align: center !important;
- margin: 0em !important;
- line-height: 2.25 !important;
-}
-
-.MathJax:focus,
-body :focus .MathJax {
- display: inline-block !important;
-}
-
-.MathJax:focus,
-body :focus .MathJax {
- display: inline-block !important;
-}
-
-.completions {
- position: absolute;
- z-index: 110;
- overflow: hidden;
- border: medium solid rgba(240, 147, 43, 0.5);
- box-shadow: none;
- line-height: 1;
-}
-
-.completions select {
- background: #ededed;
- background-color: #ededed;
- outline: none;
- border: none;
- padding: 0px;
- margin: 0px;
- margin-left: 2px;
- overflow: auto;
- font-family: monospace, monospace;
- font-size: 11pt;
- color: #303030;
- width: auto;
-}
-
-div#maintoolbar {
- display: none !important;
-}
-
-#header-container {
- display: none !important;
-}
+/* From https://github.com/dunovank/jupyter-themes/blob/master/jupyterthemes/styles/compiled/grade3.css */
+div#notebook {
+ font-family: sans-serif;
+ font-size: 13pt;
+ line-height: 170%;
+ color: #303030;
+ -webkit-font-smoothing: antialiased !important;
+ padding-top: 25px !important;
+}
+
+body,
+div.body {
+ font-family: sans-serif;
+ font-size: 13pt;
+ color: #303030;
+ background-color: #ffffff;
+ background: #ffffff;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+body.notebook_app {
+ padding: 0;
+ background-color: #ffffff;
+ background: #ffffff;
+ padding-right: 0px !important;
+ overflow-y: hidden;
+}
+
+a {
+ font-family: sans-serif;
+ color: #303030;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+a:hover,
+a:focus {
+ color: #2f2f2f;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+div#maintoolbar {
+ position: absolute;
+ width: 90%;
+ margin-left: -10%;
+ padding-right: 8%;
+ float: left;
+ background: transparent !important;
+}
+
+#maintoolbar {
+ margin-bottom: -3px;
+ margin-top: 0px;
+ border: 0px;
+ min-height: 27px;
+ padding-top: 2px;
+ padding-bottom: 0px;
+}
+
+#maintoolbar .container {
+ width: 75%;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.list_header,
+div#notebook_list_header.row.list_header {
+ font-size: 14pt;
+ color: #2f2f2f;
+ background-color: transparent;
+ height: 35px;
+}
+
+i.fa.fa-folder {
+ display: inline-block;
+ font: normal normal normal 14px "FontAwesome";
+ font-family: "FontAwesome" !important;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ font-size: 18px;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+#running .panel-group .panel .panel-heading {
+ font-size: 14pt;
+ color: #303030;
+ padding: 8px 8px;
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+}
+
+#running .panel-group .panel .panel-heading a {
+ font-size: 14pt;
+ color: #303030;
+}
+
+#running .panel-group .panel .panel-heading a:focus,
+#running .panel-group .panel .panel-heading a:hover {
+ font-size: 14pt;
+ color: #303030;
+}
+
+#running .panel-group .panel .panel-body .list_container .list_item {
+ background: #f4f4f4;
+ background-color: #f4f4f4;
+ padding: 2px;
+ border-bottom: 2px solid #dedede;
+}
+
+#running .panel-group .panel .panel-body .list_container .list_item:hover {
+ background: #f4f4f4;
+ background-color: #f4f4f4;
+}
+
+#running .panel-group .panel .panel-body {
+ padding: 2px;
+}
+
+button#refresh_running_list {
+ border: none !important;
+}
+
+button#refresh_cluster_list {
+ border: none !important;
+}
+
+div.running_list_info.toolbar_info {
+ font-size: 15px;
+ padding: 4px 0 4px 0;
+ margin-top: 5px;
+ margin-bottom: 8px;
+ height: 24px;
+ line-height: 24px;
+ text-shadow: none;
+}
+
+.list_placeholder {
+ font-weight: normal;
+}
+
+#tree-selector {
+ padding: 0px;
+ border-color: transparent;
+}
+
+#project_name > ul > li > a > i.fa.fa-home {
+ color: #ff7823;
+ font-size: 17pt;
+ display: inline-block;
+ position: static;
+ padding: 0px 0px;
+ font-weight: normal;
+ text-align: center;
+ vertical-align: text-top;
+}
+
+.fa-folder:before {
+ color: #126dce;
+}
+
+.fa-arrow-up:before {
+ font-size: 14px;
+}
+
+.fa-arrow-down:before {
+ font-size: 14px;
+}
+
+span#last-modified.btn.btn-xs.btn-default.sort-action:hover .fa,
+span#sort-name.btn.btn-xs.btn-default.sort-action:hover .fa {
+ color: #ef5c00;
+}
+
+.folder_icon:before {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f07b";
+ color: #126dce;
+}
+
+.notebook_icon:before {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f02d";
+ position: relative;
+ color: #009e07 !important;
+ top: 0px;
+}
+
+.file_icon:before {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f15b";
+ position: relative;
+ top: 0px;
+ color: #6a737d !important;
+}
+
+#project_name a {
+ display: inline-flex;
+ padding-left: 7px;
+ margin-left: -2px;
+ text-align: -webkit-auto;
+ vertical-align: baseline;
+ font-size: 18px;
+}
+
+div#notebook_toolbar div.dynamic-instructions {
+ font-family: sans-serif;
+ font-size: 17px;
+ color: #828892;
+}
+
+span#login_widget > .button,
+#logout {
+ font-family: "Proxima Nova", sans-serif;
+ color: #303030;
+ background: transparent;
+ background-color: transparent;
+ border: 2px solid #e5e5e5;
+ font-weight: normal;
+ box-shadow: none;
+ text-shadow: none;
+ border-radius: 3px;
+ margin-right: 10px;
+ padding: 2px 7px;
+}
+
+span#login_widget > .button:hover,
+#logout:hover {
+ color: #ef5c00;
+ background-color: transparent;
+ background: transparent;
+ border: 2px solid #ef5c00;
+ background-image: none;
+ box-shadow: none !important;
+ border-radius: 3px;
+}
+
+span#login_widget > .button:focus,
+#logout:focus,
+span#login_widget > .button.focus,
+#logout.focus,
+span#login_widget > .button:active,
+#logout:active,
+span#login_widget > .button.active,
+#logout.active,
+.open > .dropdown-togglespan#login_widget > .button,
+.open > .dropdown-toggle#logout {
+ color: #1c1c1c;
+ background-color: #303030;
+ background: #303030;
+ border-color: #303030;
+ background-image: none;
+ box-shadow: none !important;
+ border-radius: 2px;
+}
+
+body > #header #header-container {
+ padding-bottom: 0px;
+ padding-top: 4px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+}
+
+body > #header {
+ background: #ffffff;
+ background-color: #ffffff;
+ position: relative;
+ z-index: 100;
+}
+
+.list_container {
+ font-size: 13pt;
+ color: #303030;
+ border: none;
+ text-shadow: none !important;
+}
+
+.list_container > div {
+ border-bottom: 1px solid rgba(180, 180, 180, 0.14);
+ font-size: 13pt;
+}
+
+.list_header > div,
+.list_item > div {
+ padding-top: 6px;
+ padding-bottom: 2px;
+ padding-left: 0px;
+}
+
+.list_header > div .item_link,
+.list_item > div .item_link {
+ margin-left: -1px;
+ vertical-align: middle;
+ line-height: 22px;
+ font-size: 13pt;
+}
+
+.item_icon {
+ color: #126dce;
+ font-size: 13pt;
+ vertical-align: middle;
+}
+
+.list_item input:not([type="checkbox"]) {
+ padding-right: 0px;
+ height: 1.75em;
+ width: 25%;
+ margin: 0px 0 0;
+ margin-top: 0px;
+}
+
+.list_header > div .item_link,
+.list_item > div .item_link {
+ margin-left: -1px;
+ vertical-align: middle;
+ line-height: 1.5em;
+ font-size: 12pt;
+ display: inline-table;
+ position: static;
+}
+
+#button-select-all {
+ height: 34px;
+ min-width: 55px;
+ z-index: 0;
+ border: none !important;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ margin-bottom: 0px;
+ margin-top: 0px;
+ left: -3px;
+ border-radius: 0px !important;
+}
+
+#button-select-all:focus,
+#button-select-all:active:focus,
+#button-select-all.active:focus,
+#button-select-all.focus,
+#button-select-all:active.focus,
+#button-select-all.active.focus {
+ background-color: #e5e5e5 !important;
+ background: #e5e5e5 !important;
+}
+
+button#tree-selector-btn {
+ height: 34px;
+ font-size: 12pt;
+ border: none;
+ left: 0px;
+ border-radius: 0px !important;
+}
+
+input#select-all.pull-left.tree-selector {
+ margin-left: 7px;
+ margin-right: 2px;
+ margin-top: 2px;
+ top: 4px;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ margin-top: 1px;
+ line-height: normal;
+}
+
+.delete-button {
+ border: none !important;
+}
+
+i.fa.fa-trash {
+ font-size: 13.5pt;
+}
+
+.list_container a {
+ font-size: 16px;
+ color: #303030;
+ border: none;
+ text-shadow: none !important;
+ font-weight: normal;
+ font-style: normal;
+}
+
+div.list_container a:hover {
+ color: #2f2f2f;
+}
+
+.list_header > div input,
+.list_item > div input {
+ margin-right: 7px;
+ margin-left: 12px;
+ vertical-align: baseline;
+ line-height: 22px;
+ position: relative;
+ top: -1px;
+}
+
+div.list_item:hover {
+ background-color: #fafafa;
+}
+
+.breadcrumb > li {
+ font-size: 12pt;
+ color: #303030;
+ border: none;
+ text-shadow: none !important;
+}
+
+.breadcrumb > li + li:before {
+ content: "/\00a0";
+ padding: 0px;
+ color: #303030;
+ font-size: 18px;
+}
+
+#project_name > .breadcrumb {
+ padding: 0px;
+ margin-bottom: 0px;
+ background-color: transparent;
+ font-weight: normal;
+ margin-top: -2px;
+}
+
+ul#tabs a {
+ font-family: sans-serif;
+ font-size: 13.5pt;
+ font-weight: normal;
+ font-style: normal;
+ text-shadow: none !important;
+}
+
+.nav-tabs {
+ font-family: sans-serif;
+ font-size: 13.5pt;
+ font-weight: normal;
+ font-style: normal;
+ background-color: transparent;
+ border-color: transparent;
+ text-shadow: none !important;
+ border: 2px solid transparent;
+}
+
+.nav-tabs > li > a:active,
+.nav-tabs > li > a:focus,
+.nav-tabs > li > a:hover,
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:focus,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #ef5c00;
+ background-color: transparent;
+ border-color: transparent;
+ border-bottom: 2px solid transparent;
+}
+
+.nav > li.disabled > a,
+.nav > li.disabled > a:hover {
+ color: #828892;
+}
+
+.nav-tabs > li > a:before {
+ content: "";
+ position: absolute;
+ width: 100%;
+ height: 2px;
+ bottom: -2px;
+ left: 0;
+ background-color: #ef5c00;
+ visibility: hidden;
+ -webkit-transform: perspective(0) scaleX(0);
+ transform: perspective(0) scaleX(0);
+ -webkit-transition: ease 220ms;
+ transition: ease 220ms;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+.nav-tabs > li > a:hover:before {
+ visibility: visible;
+ -webkit-transform: perspective(1) scaleX(1);
+ transform: perspective(1) scaleX(1);
+}
+
+.nav-tabs > li.active > a:before {
+ content: "";
+ position: absolute;
+ width: 100%;
+ height: 2px;
+ bottom: -2px;
+ left: 0;
+ background-color: #ef5c00;
+ visibility: visible;
+ -webkit-transform: perspective(1) scaleX(1);
+ transform: perspective(1) scaleX(1);
+ -webkit-font-smoothing: subpixel-antialiased !important;
+}
+
+div#notebook {
+ font-family: sans-serif;
+ font-size: 13pt;
+ padding-top: 4px;
+}
+
+.notebook_app {
+ background-color: #ffffff;
+}
+
+#notebook-container {
+ padding: 13px 2px;
+ background-color: #ffffff;
+ min-height: 0px;
+ box-shadow: none;
+ width: 980px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+div#ipython-main-app.container {
+ width: 980px;
+ margin-right: auto;
+ margin-left: auto;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.container {
+ width: 980px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+div#menubar-container {
+ width: 100%;
+ width: 980px;
+}
+
+div#header-container {
+ width: 980px;
+}
+
+.notebook_app #header,
+.edit_app #header {
+ box-shadow: none !important;
+ background-color: #ffffff;
+ border-bottom: 2px solid rgba(180, 180, 180, 0.14);
+}
+
+#header,
+.edit_app #header {
+ font-family: sans-serif;
+ font-size: 13pt;
+ box-shadow: none;
+ background-color: #ffffff;
+}
+
+#header .header-bar,
+.edit_app #header .header-bar {
+ background: #ffffff;
+ background-color: #ffffff;
+}
+
+body > #header .header-bar {
+ width: 100%;
+ background: #ffffff;
+}
+
+span.checkpoint_status,
+span.autosave_status {
+ font-size: small;
+ display: none;
+}
+
+#menubar,
+div#menubar {
+ background-color: #ffffff;
+ padding-top: 0px !important;
+}
+
+#menubar .navbar,
+.navbar-default {
+ background-color: #ffffff;
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+.navbar {
+ border: none;
+}
+
+div.navbar-text,
+.navbar-text,
+.navbar-text.indicator_area,
+p.navbar-text.indicator_area {
+ margin-top: 8px !important;
+ margin-bottom: 0px;
+ color: #ff7823;
+}
+
+.navbar-default {
+ font-family: sans-serif;
+ font-size: 13pt;
+ background-color: #ffffff;
+ border-color: #d4d4d4;
+ line-height: 1.5em;
+ padding-bottom: 0px;
+}
+
+.navbar-default .navbar-nav > li > a {
+ font-family: sans-serif;
+ font-size: 13pt;
+ color: #303030;
+ display: block;
+ line-height: 1.5em;
+ padding-top: 14px;
+ padding-bottom: 11px;
+}
+
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #2f2f2f !important;
+ background-color: rgba(180, 180, 180, 0.14) !important;
+ border-color: #d4d4d4 !important;
+ line-height: 1.5em;
+ transition: 80ms ease;
+}
+
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #1c1c1c;
+ background-color: #dedede;
+ border-color: #dedede;
+ line-height: 1.5em;
+}
+
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0px;
+}
+
+.navbar-nav {
+ margin: 0;
+}
+
+div.notification_widget.info,
+.notification_widget.info,
+.notification_widget:active:hover,
+.notification_widget.active:hover,
+.open > .dropdown-toggle.notification_widget:hover,
+.notification_widget:active:focus,
+.notification_widget.active:focus,
+.open > .dropdown-toggle.notification_widget:focus,
+.notification_widget:active.focus,
+.notification_widget.active.focus,
+.open > .dropdown-toggle.notification_widget.focus,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:hover,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:focus {
+ color: #303030 !important;
+ background-color: transparent !important;
+ border-color: transparent !important;
+ padding-bottom: 0px !important;
+ margin-bottom: 0px !important;
+ font-size: 9pt !important;
+ z-index: 0;
+}
+
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn {
+ font-size: 9pt !important;
+ z-index: 0;
+}
+
+.notification_widget {
+ color: #126dce;
+ z-index: -500;
+ font-size: 9pt;
+ background: transparent;
+ background-color: transparent;
+ margin-right: 3px;
+ border: none;
+}
+
+.notification_widget,
+div.notification_widget {
+ margin-right: 0px;
+ margin-left: 0px;
+ padding-right: 0px;
+ vertical-align: text-top !important;
+ margin-top: 6px !important;
+ background: transparent !important;
+ background-color: transparent !important;
+ font-size: 9pt !important;
+ border: none;
+}
+
+.navbar-btn.btn-xs:hover {
+ border: none !important;
+ background: transparent !important;
+ background-color: transparent !important;
+ color: #303030 !important;
+}
+
+div.notification_widget.info,
+.notification_widget.info {
+ display: none !important;
+}
+
+.edit_mode .modal_indicator:before {
+ display: none;
+}
+
+.command_mode .modal_indicator:before {
+ display: none;
+}
+
+.item_icon {
+ color: #126dce;
+}
+
+.item_buttons .kernel-name {
+ font-size: 13pt;
+ color: #126dce;
+}
+
+.running_notebook_icon:before {
+ color: #009e07 !important;
+ font: normal normal normal 15px/1 FontAwesome;
+ font-size: 15px;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f10c";
+ vertical-align: middle;
+ position: static;
+ display: inherit;
+}
+
+.item_buttons .running-indicator {
+ padding-top: 4px;
+ color: #009e07;
+ font-family: sans-serif;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+}
+
+#notification_trusted {
+ font-family: sans-serif;
+ border: none;
+ background: transparent;
+ background-color: transparent;
+ margin-bottom: 0px !important;
+ vertical-align: bottom !important;
+ color: #828892 !important;
+ cursor: default !important;
+}
+
+#notification_area,
+div.notification_area {
+ float: right !important;
+ position: static;
+ cursor: pointer;
+ padding-top: 6px;
+ padding-right: 4px;
+}
+
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn {
+ font-size: 9pt !important;
+ z-index: 0;
+ margin-top: -5px !important;
+}
+
+#modal_indicator {
+ float: right !important;
+ color: #4c8be2;
+ background: #ffffff;
+ background-color: #ffffff;
+ margin-top: 8px !important;
+ margin-left: 0px;
+}
+
+#kernel_indicator {
+ float: right !important;
+ color: #ff7823;
+ background: #ffffff;
+ background-color: #ffffff;
+ border-left: 2px solid #ff7823;
+ padding-top: 0px;
+ padding-bottom: 4px;
+ margin-top: 10px !important;
+ margin-left: -2px;
+ padding-left: 5px !important;
+}
+
+#kernel_indicator .kernel_indicator_name {
+ font-size: 17px;
+ color: #ff7823;
+ background: #ffffff;
+ background-color: #ffffff;
+ padding-left: 5px;
+ padding-right: 5px;
+ margin-top: 4px;
+ vertical-align: text-top;
+ padding-bottom: 0px;
+}
+
+.kernel_idle_icon:before {
+ display: inline-block;
+ font: normal normal normal 22px/1 FontAwesome;
+ font-size: 22px;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ cursor: pointer;
+ margin-left: 0px !important;
+ opacity: 0.7;
+ vertical-align: bottom;
+ margin-top: 1px;
+ content: "\f1db";
+}
+
+.kernel_busy_icon:before {
+ display: inline-block;
+ font: normal normal normal 22px/1 FontAwesome;
+ font-size: 22px;
+ -webkit-animation: pulsate 2s infinite ease-out;
+ animation: pulsate 2s infinite ease-out;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ cursor: pointer;
+ margin-left: 0px !important;
+ vertical-align: bottom;
+ margin-top: 1px;
+ content: "\f111";
+}
+
+@-webkit-keyframes pulsate {
+ 0% {
+ -webkit-transform: scale(1, 1);
+ opacity: 0.8;
+ }
+
+ 8% {
+ -webkit-transform: scale(1, 1);
+ opacity: 0.8;
+ }
+
+ 50% {
+ -webkit-transform: scale(0.75, 0.75);
+ opacity: 0.3;
+ }
+
+ 92% {
+ -webkit-transform: scale(1, 1);
+ opacity: 0.8;
+ }
+
+ 100% {
+ -webkit-transform: scale(1, 1);
+ opacity: 0.8;
+ }
+}
+
+div.notification_widget.info,
+.notification_widget.info,
+.notification_widget:active:hover,
+.notification_widget.active:hover,
+.open > .dropdown-toggle.notification_widget:hover,
+.notification_widget:active:focus,
+.notification_widget.active:focus,
+.open > .dropdown-toggle.notification_widget:focus,
+.notification_widget:active.focus,
+.notification_widget.active.focus,
+.open > .dropdown-toggle.notification_widget.focus,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:hover,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:focus {
+ color: #303030;
+ background-color: #ffffff;
+ border-color: #ffffff;
+}
+
+#notification_area,
+div.notification_area {
+ float: right !important;
+ position: static;
+}
+
+.notification_widget,
+div.notification_widget {
+ margin-right: 0px;
+ margin-left: 0px;
+ padding-right: 0px;
+ vertical-align: text-top !important;
+ margin-top: 6px !important;
+ z-index: 1000;
+}
+
+#kernel_logo_widget,
+#kernel_logo_widget .current_kernel_logo {
+ display: none;
+}
+
+div#ipython_notebook {
+ display: none;
+}
+
+i.fa.fa-icon {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-rendering: auto;
+}
+
+.fa {
+ display: inline-block;
+ font:
+ normal normal normal 10pt/1 "FontAwesome",
+ sans-serif;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.dropdown-menu {
+ font-family: sans-serif;
+ font-size: 13pt;
+ box-shadow: none;
+ padding: 0px;
+ text-align: left;
+ border: none;
+ background-color: #dedede;
+ background: #dedede;
+ line-height: 1;
+}
+
+.dropdown-menu:hover {
+ font-family: sans-serif;
+ font-size: 13pt;
+ box-shadow: none;
+ padding: 0px;
+ text-align: left;
+ border: none;
+ background-color: #dedede;
+ box-shadow: none;
+ line-height: 1;
+}
+
+.dropdown-menu > li > a {
+ font-family: sans-serif;
+ font-size: 12pt;
+ display: block;
+ padding: 10px 20px 9px 10px;
+ color: #303030;
+ background-color: #dedede;
+ background: #dedede;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #2f2f2f;
+ background-color: #d4d4d4;
+ background: #d4d4d4;
+ border-color: #d4d4d4;
+ transition: 200ms ease;
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 0px 0px;
+ overflow: hidden;
+ background-color: rgba(180, 180, 180, 0.3);
+}
+
+.dropdown-submenu > .dropdown-menu {
+ display: none;
+ top: 2px !important;
+ left: 100%;
+ margin-top: -2px;
+ margin-left: 0px;
+ padding-top: 0px;
+ transition: 200ms ease;
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ font-family: sans-serif;
+ font-size: 12pt;
+ font-weight: normal;
+ color: #828892;
+ padding: none;
+ display: block;
+ clear: both;
+ white-space: nowrap;
+}
+
+.dropdown-submenu > a:after {
+ color: #303030;
+ margin-right: -16px;
+ margin-top: 0px;
+ display: inline-block;
+}
+
+.dropdown-submenu:hover > a:after,
+.dropdown-submenu:active > a:after,
+.dropdown-submenu:focus > a:after,
+.dropdown-submenu:visited > a:after {
+ color: #ff7823;
+ margin-right: -16px;
+ display: inline-block !important;
+}
+
+div.kse-dropdown > .dropdown-menu,
+.kse-dropdown > .dropdown-menu {
+ min-width: 0;
+ top: 94%;
+}
+
+.btn,
+.btn-default {
+ font-family: sans-serif;
+ color: #303030;
+ background: #e5e5e5;
+ background-color: #e5e5e5;
+ border: 2px solid #e5e5e5;
+ font-weight: normal;
+ box-shadow: none;
+ text-shadow: none;
+ border-radius: 3px;
+ font-size: initial;
+}
+
+.btn:hover,
+.btn:active:hover,
+.btn.active:hover,
+.btn-default:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.open > .dropdown-toggle.btn:hover {
+ color: #ef5c00;
+ border: 2px solid #e0e0e0;
+ background-color: #e0e0e0;
+ background: #e0e0e0;
+ background-image: none;
+ box-shadow: none !important;
+ border-radius: 3px;
+}
+
+.btn:active,
+.btn.active,
+.btn:active:focus,
+.btn.active:focus,
+.btn:active.focus,
+.btn.active.focus,
+.btn-default:focus,
+.btn-default.focus,
+.btn-default:active,
+.btn-default.active,
+.btn-default:active:hover,
+.btn-default.active:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn:focus,
+.open > .dropdown-toggle.btn.focus,
+.open > .dropdown-toggle.btn-default:hover,
+.open > .dropdown-toggle.btn-default:focus,
+.open > .dropdown-toggle.btn-default.hover,
+.open > .dropdown-toggle.btn-default.focus {
+ color: #ef5c00;
+ border: 2px solid #e0e0e0;
+ background-color: #e0e0e0 !important;
+ background: #e0e0e0 !important;
+ background-image: none;
+ box-shadow: none !important;
+ border-radius: 3px;
+}
+
+.btn-default:active:hover,
+.btn-default.active:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.btn-default:active.focus,
+.btn-default.active.focus {
+ color: #ef5c00 !important;
+ background-color: #e5e5e5;
+ border-color: #ffccac !important;
+ transition: 2000ms ease;
+}
+
+.btn:focus,
+.btn.focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn:active,
+.btn.active,
+.btn:active.focus,
+.btn.active.focus {
+ color: #ef5c00 !important;
+ outline: none !important;
+ outline-width: 0px !important;
+ background: #ffccac !important;
+ background-color: #ffccac !important;
+ border-color: #ffccac !important;
+ transition: 200ms ease !important;
+}
+
+.item_buttons > .btn,
+.item_buttons > .btn-group,
+.item_buttons > .input-group {
+ font-size: 13pt;
+ background: transparent;
+ background-color: transparent;
+ border: 0px solid #e4e4e4;
+ border-bottom: 2px solid transparent;
+ margin-left: 5px;
+ padding-top: 4px !important;
+}
+
+.item_buttons > .btn:hover,
+.item_buttons > .btn-group:hover,
+.item_buttons > .input-group:hover,
+.item_buttons > .btn.active,
+.item_buttons > .btn-group.active,
+.item_buttons > .input-group.active,
+.item_buttons > .btn.focus {
+ margin-left: 5px;
+ background: #dfdfdf;
+ padding-top: 4px !important;
+ background-color: transparent;
+ border: 0px solid transparent;
+ border-bottom: 2px solid #ff7823;
+ border-radius: 0px;
+ transition: none;
+}
+
+.item_buttons {
+ line-height: 1.5em !important;
+}
+
+.item_buttons .btn {
+ min-width: 11ex;
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 3px;
+}
+
+.btn-group > .btn-mini,
+.btn-sm,
+.btn-group-sm > .btn,
+.btn-xs,
+.btn-group-xs > .btn,
+.alternate_upload .btn-upload,
+.btn-group,
+.btn-group-vertical {
+ font-size: inherit;
+ font-weight: normal;
+ height: inherit;
+ line-height: inherit;
+}
+
+.btn-xs,
+.btn-group-xs > .btn {
+ font-size: initial !important;
+ background-image: none;
+ font-weight: normal;
+ text-shadow: none;
+ display: inline-table;
+ padding: 2px 5px;
+ line-height: 1.45;
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 3px;
+}
+
+div#new-buttons > button,
+#new-buttons > button,
+div#refresh_notebook_list,
+#refresh_notebook_list {
+ background: transparent;
+ background-color: transparent;
+ border: none;
+}
+
+div#new-buttons > button:hover,
+#new-buttons > button:hover,
+div#refresh_notebook_list,
+#refresh_notebook_list,
+div.alternate_upload .btn-upload,
+.alternate_upload .btn-upload,
+div.dynamic-buttons > button,
+.dynamic-buttons > button,
+.dynamic-buttons > button:focus,
+.dynamic-buttons > button:active:focus,
+.dynamic-buttons > button.active:focus,
+.dynamic-buttons > button.focus,
+.dynamic-buttons > button:active.focus,
+.dynamic-buttons > button.active.focus,
+#new-buttons > button:focus,
+#new-buttons > button:active:focus,
+#new-buttons > button.active:focus,
+#new-buttons > button.focus,
+#new-buttons > button:active.focus,
+#new-buttons > button.active.focus,
+.alternate_upload .btn-upload:focus,
+.alternate_upload .btn-upload:active:focus,
+.alternate_upload .btn-upload.active:focus,
+.alternate_upload .btn-upload.focus,
+.alternate_upload .btn-upload:active.focus,
+.alternate_upload .btn-upload.active.focus {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: none !important;
+}
+
+.alternate_upload input.fileinput {
+ text-align: center;
+ vertical-align: bottom;
+ margin-left: -0.5ex;
+ display: inline-table;
+ border: solid 0px #e5e5e5;
+ margin-bottom: -1ex;
+}
+
+.alternate_upload .btn-upload {
+ display: inline-table;
+ background: transparent;
+ border: none;
+}
+
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -2px;
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ z-index: 2;
+}
+
+.dropdown-header {
+ font-family: sans-serif !important;
+ font-size: 13pt !important;
+ color: #ff7823 !important;
+ border-bottom: none !important;
+ padding: 0px !important;
+ margin: 6px 6px 0px !important;
+}
+
+span#last-modified.btn.btn-xs.btn-default.sort-action,
+span#sort-name.btn.btn-xs.btn-default.sort-action,
+span#file-size.btn.btn-xs.btn-default.sort-action {
+ font-family: sans-serif;
+ font-size: 16px;
+ background-color: transparent;
+ background: transparent;
+ border: none;
+ color: #303030;
+ padding-bottom: 0px;
+ margin-bottom: 0px;
+ vertical-align: sub;
+}
+
+span#last-modified.btn.btn-xs.btn-default.sort-action {
+ margin-left: 19px;
+}
+
+button.close {
+ border: 0px none;
+ font-family: sans-serif;
+ font-size: 20pt;
+ font-weight: normal;
+}
+
+.dynamic-buttons {
+ padding-top: 0px;
+ display: inline-block;
+}
+
+.close {
+ color: #de143d;
+ opacity: 0.5;
+ text-shadow: none;
+ font-weight: normal;
+}
+
+.close:hover {
+ color: #de143d;
+ opacity: 1;
+ font-weight: normal;
+}
+
+div.nbext-enable-btns .btn[disabled],
+div.nbext-enable-btns .btn[disabled]:hover,
+.btn-default.disabled,
+.btn-default[disabled],
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus {
+ color: #4a4a4a;
+ background: #e2e2e2;
+ background-color: #e2e2e2;
+ border-color: #e2e2e2;
+ transition: 200ms ease;
+}
+
+.input-group-addon {
+ padding: 2px 5px;
+ font-size: 13pt;
+ font-weight: normal;
+ height: auto;
+ color: #303030;
+ text-align: center;
+ background-color: transparent;
+ border: 2px solid transparent !important;
+ text-transform: capitalize;
+}
+
+a.btn.btn-default.input-group-addon:hover {
+ background: transparent !important;
+ background-color: transparent !important;
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+ height: 100%;
+}
+
+.btn-group > .btn + .dropdown-toggle:hover {
+ background: #e0e0e0 !important;
+}
+
+.input-group-btn {
+ position: relative;
+ font-size: inherit;
+ white-space: nowrap;
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border: none;
+}
+
+.input-group-btn:hover {
+ background: #dfdfdf;
+ background-color: #dfdfdf;
+ border: none;
+}
+
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border: none;
+ margin-left: 2px;
+ margin-right: -1px;
+ font-size: inherit;
+}
+
+.input-group-btn:first-child > .btn:hover,
+.input-group-btn:first-child > .btn-group:hover {
+ background: #e0e0e0;
+ background-color: #e0e0e0;
+ border: none;
+ font-size: inherit;
+ transition: 200ms ease;
+}
+
+div.modal .btn-group > .btn:first-child {
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border: 1px solid #e1e1e1;
+ margin-top: 0px !important;
+ margin-left: 0px;
+ margin-bottom: 2px;
+}
+
+div.modal .btn-group > .btn:first-child:hover {
+ background: #dfdfdf;
+ background-color: #dfdfdf;
+ border: 1px solid #dfdfdf;
+ transition: 200ms ease;
+}
+
+div.modal > button,
+div.modal-footer > button {
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border-color: #e4e4e4;
+}
+
+div.modal > button:hover,
+div.modal-footer > button:hover {
+ background: #dfdfdf;
+ background-color: #dfdfdf;
+ border-color: #dfdfdf;
+ transition: 200ms ease;
+}
+
+.modal-content {
+ font-family: sans-serif;
+ font-size: 12pt;
+ position: relative;
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border: none;
+ border-radius: 1px;
+ background-clip: padding-box;
+ outline: none;
+}
+
+.modal-header {
+ font-family: sans-serif;
+ font-size: 13pt;
+ color: #303030;
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border-color: #dedede;
+ padding: 12px;
+ min-height: 16.4286px;
+}
+
+.modal-content h4 {
+ font-family: sans-serif;
+ font-size: 16pt;
+ color: #303030;
+ padding: 5px;
+}
+
+.modal-body {
+ background-color: #ffffff;
+ position: relative;
+ padding: 15px;
+}
+
+.modal-footer {
+ padding: 8px;
+ text-align: right;
+ background-color: #ffffff;
+ border-top: none;
+}
+
+.alert-info {
+ background-color: #fdfdfd;
+ border-color: #dedede;
+ color: #303030;
+}
+
+.modal-header .close {
+ margin-top: -5px;
+ font-size: 25pt;
+}
+
+.modal-backdrop,
+.modal-backdrop.in {
+ opacity: 0.85;
+ background-color: notebook-bg;
+}
+
+div.panel,
+div.panel-default,
+.panel,
+.panel-default {
+ font-family: sans-serif;
+ font-size: 13pt;
+ background-color: #f4f4f4;
+ color: #303030;
+ margin-bottom: 14px;
+ border: 0;
+ box-shadow: none;
+}
+
+div.panel > .panel-heading,
+div.panel-default > .panel-heading {
+ font-size: 14pt;
+ color: #303030;
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border: 0;
+}
+
+.modal .modal-dialog {
+ min-width: 950px;
+ margin: 50px auto;
+}
+
+div.container-fluid {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 0px;
+ padding-right: 5px;
+}
+
+div.form-control,
+.form-control {
+ font-family: sans-serif;
+ font-size: initial;
+ color: #303030;
+ background-color: #ffffff;
+ border: 1px solid #d0d0d0 !important;
+ margin-left: 2px;
+ box-shadow: none;
+ transition:
+ border-color 0.15s ease-in-out 0s,
+ box-shadow 0.15s ease-in-out 0s;
+}
+
+.form-control-static {
+ min-height: inherit;
+ height: inherit;
+}
+
+.form-group.list-group-item {
+ color: #303030;
+ background-color: #f4f4f4;
+ border-color: #dedede;
+ margin-bottom: 0px;
+}
+
+.form-group .input-group {
+ float: left;
+}
+
+input,
+button,
+select,
+textarea {
+ background-color: #ffffff;
+ font-weight: normal;
+ border: 1px solid #dedede;
+}
+
+select.form-control.select-xs {
+ height: 33px;
+ font-size: 13pt;
+}
+
+.toolbar select,
+.toolbar label {
+ width: auto;
+ vertical-align: middle;
+ margin-right: 0px;
+ margin-bottom: 0px;
+ display: inline;
+ font-size: 92%;
+ margin-left: 10px;
+ padding: 0px;
+ background: #e5e5e5 !important;
+ background-color: #e5e5e5 !important;
+ border: 2px solid #e5e5e5 !important;
+}
+
+.form-control:focus {
+ border-color: #ff7823;
+ outline: 2px solid rgba(240, 147, 43, 0.5);
+ -webkit-box-shadow: none;
+}
+
+::-webkit-input-placeholder {
+ color: #828892;
+}
+
+::-moz-placeholder {
+ color: #828892;
+}
+
+:-ms-input-placeholder {
+ color: #828892;
+}
+
+:-moz-placeholder {
+ color: #828892;
+}
+
+[dir="ltr"] #find-and-replace .input-group-btn + .form-control {
+ border: 2px solid #dedede !important;
+}
+
+[dir="ltr"] #find-and-replace .input-group-btn + .form-control:focus {
+ border-color: #ff7823;
+ outline: 2px solid rgba(240, 147, 43, 0.5);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+div.output.output_scroll {
+ box-shadow: none;
+}
+
+::-webkit-scrollbar {
+ width: 11px;
+ max-height: 9px;
+ background-color: #ebebeb;
+ border-radius: 3px;
+ border: none;
+}
+
+::-webkit-scrollbar-track {
+ background: #ebebeb;
+ border: none;
+ width: 11px;
+ max-height: 9px;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 2px;
+ border: none;
+ background: #909090;
+ background-clip: content-box;
+ width: 11px;
+}
+
+HTML,
+body,
+div,
+dl,
+dt,
+dd,
+ul,
+ol,
+li,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+pre,
+code,
+form,
+fieldset,
+legend,
+input,
+button,
+textarea,
+p,
+blockquote,
+th,
+td,
+span,
+a {
+ text-rendering: geometricPrecision;
+ -webkit-font-smoothing: subpixel-antialiased;
+ font-weight: 400;
+}
+
+div.input_area {
+ background-color: #ededed;
+ background: #ededed;
+ padding-right: 1.2em;
+ border: 0px;
+ border-radius: 0px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+div.cell {
+ padding: 0px;
+ background: #ededed;
+ background-color: #ededed;
+ border: medium solid #ffffff;
+ border-radius: 4px;
+ top: 0;
+}
+
+div.cell.selected {
+ background: #ededed;
+ background-color: #ededed;
+ border: medium solid #ffffff;
+ padding: 0px;
+ border-radius: 5px;
+}
+
+.edit_mode div.cell.selected {
+ padding: 0px;
+ background: #ededed;
+ background-color: #ededed;
+ border: medium solid #ffffff;
+ border-radius: 5px;
+}
+
+div.cell.edit_mode {
+ padding: 0px;
+ background: #ededed;
+ background-color: #ededed;
+}
+
+div.CodeMirror-sizer {
+ margin-left: 0px;
+ margin-bottom: -21px;
+ border-right-width: 16px;
+ min-height: 37px;
+ padding-right: 0px;
+ padding-bottom: 0px;
+ margin-top: 0px;
+}
+
+div.cell.selected:before,
+.edit_mode div.cell.selected:before,
+div.cell.selected:before,
+div.cell.selected.jupyter-soft-selected:before {
+ background: #ededed !important;
+ border: none;
+ border-radius: 3px;
+ position: absolute;
+ display: block;
+ top: 0px;
+ left: 0px;
+ width: 0px;
+ height: 100%;
+}
+
+div.cell.text_cell.selected::before,
+.edit_mode div.cell.text_cell.selected:before,
+div.cell.text_cell.selected:before,
+div.cell.text_cell.selected.jupyter-soft-selected:before {
+ background: #ffffff !important;
+ background-color: #ffffff !important;
+ border-color: #f2f2f2 !important;
+}
+
+div.cell.code_cell .input {
+ border-left: 5px solid #ededed !important;
+ border-radius: 3px;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+
+div.cell.code_cell.selected .input {
+ border-left: 5px solid #ff7823 !important;
+ border-radius: 3px;
+}
+
+.edit_mode div.cell.code_cell.selected .input {
+ border-left: 5px solid #ffd5bb !important;
+ border-radius: 3px;
+}
+
+.edit_mode div.cell.selected:before {
+ height: 100%;
+ border-left: 5px solid #ffd5bb !important;
+ border-radius: 3px;
+}
+
+div.cell.jupyter-soft-selected,
+div.cell.selected.jupyter-soft-selected {
+ border-left-color: #ffd5bb !important;
+ border-left-width: 0px !important;
+ padding-left: 7px !important;
+ border-right-color: #ffd5bb !important;
+ border-right-width: 0px !important;
+ background: #ffd5bb !important;
+ border-radius: 6px !important;
+}
+
+div.cell.selected.jupyter-soft-selected .input {
+ border-left: 5px solid #ededed !important;
+}
+
+div.cell.selected.jupyter-soft-selected {
+ border-left-color: #ff7823;
+ border-color: #ffffff;
+ padding-left: 7px;
+ border-radius: 6px;
+}
+
+div.cell.code_cell.selected .input {
+ border-left: none;
+ border-radius: 3px;
+}
+
+div.cell.selected.jupyter-soft-selected .prompt,
+div.cell.text_cell.selected.jupyter-soft-selected .prompt {
+ top: 0;
+ border-left: #ededed !important;
+ border-radius: 2px;
+}
+
+div.cell.text_cell.selected.jupyter-soft-selected .input_prompt {
+ border-left: none !important;
+}
+
+div.cell.text_cell.jupyter-soft-selected,
+div.cell.text_cell.selected.jupyter-soft-selected {
+ border-left-color: #f2f2f2 !important;
+ border-left-width: 0px !important;
+ padding-left: 26px !important;
+ border-right-color: #f2f2f2 !important;
+ border-right-width: 0px !important;
+ background: #f2f2f2 !important;
+ border-radius: 5px !important;
+}
+
+div.cell.jupyter-soft-selected .input,
+div.cell.selected.jupyter-soft-selected .input {
+ border-left-color: #ffd5bb !important;
+}
+
+div.prompt,
+.prompt {
+ font-family: monospace, monospace;
+ font-size: 9pt !important;
+ font-weight: normal;
+ color: #828892;
+ line-height: 170%;
+ padding: 0px;
+ padding-top: 4px;
+ padding-left: 0px;
+ padding-right: 1px;
+ text-align: right !important;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+}
+
+div.prompt.input_prompt {
+ font-size: 9pt !important;
+ background-color: #ededed;
+ border-top: 0px;
+ border-top-right-radius: 0px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ padding-right: 3px;
+ min-width: 11.5ex;
+ width: 11.5ex !important;
+}
+
+div.cell.code_cell .input_prompt {
+ border-right: 2px solid rgba(240, 147, 43, 0.5);
+}
+
+div.cell.selected .prompt {
+ top: 0;
+}
+
+.edit_mode div.cell.selected .prompt {
+ top: 0;
+}
+
+.edit_mode div.cell.selected .prompt {
+ top: 0;
+}
+
+.run_this_cell {
+ visibility: hidden;
+ color: transparent;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-left: 3px;
+ padding-right: 12px;
+ width: 1.5ex;
+ width: 0ex;
+ background: transparent;
+ background-color: transparent;
+}
+
+div.code_cell:hover div.input .run_this_cell {
+ visibility: visible;
+}
+
+div.cell.code_cell.rendered.selected .run_this_cell:hover {
+ background-color: #e3e3e3;
+ background: #e3e3e3;
+ color: #ff7823 !important;
+}
+
+div.cell.code_cell.rendered.unselected .run_this_cell:hover {
+ background-color: #e3e3e3;
+ background: #e3e3e3;
+ color: #ff7823 !important;
+}
+
+i.fa-step-forward.fa {
+ display: inline-block;
+ font: normal normal normal 9px "FontAwesome";
+}
+
+.fa-step-forward:before {
+ content: "\f04b";
+}
+
+div.cell.selected.jupyter-soft-selected .run_this_cell,
+div.cell.selected.jupyter-soft-selected .run_this_cell:hover,
+div.cell.unselected.jupyter-soft-selected .run_this_cell:hover,
+div.cell.code_cell.rendered.selected.jupyter-soft-selected .run_this_cell:hover,
+div.cell.code_cell.rendered.unselected.jupyter-soft-selected .run_this_cell:hover {
+ background-color: #ffd5bb !important;
+ background: #ffd5bb !important;
+ color: #ffd5bb !important;
+}
+
+div.output_wrapper {
+ background-color: #ffffff;
+ border: 0px;
+ left: 0px;
+ margin-bottom: 0em;
+ margin-top: 0em;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+}
+
+div.output_subarea.output_text.output_stream.output_stdout,
+div.output_subarea.output_text {
+ font-family: monospace, monospace;
+ font-size: 8.5pt !important;
+ line-height: 150% !important;
+ background-color: #ffffff;
+ color: #303030;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+ margin-left: 11.5px;
+}
+
+div.output_area pre {
+ font-family: monospace, monospace;
+ font-size: 8.5pt !important;
+ line-height: 151% !important;
+ color: #303030;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+}
+
+div.output_area {
+ display: -webkit-box;
+}
+
+div.output_html {
+ font-family: monospace, monospace;
+ font-size: 8.5pt;
+ color: #353535;
+ background-color: #ffffff;
+ background: #ffffff;
+}
+
+div.output_subarea {
+ overflow-x: auto;
+ padding: 1.2em !important;
+ -webkit-box-flex: 1;
+ -moz-box-flex: 1;
+ box-flex: 1;
+ flex: 1;
+}
+
+div.btn.btn-default.output_collapsed {
+ background: #d7d7d7;
+ background-color: #d7d7d7;
+ border-color: #d7d7d7;
+}
+
+div.btn.btn-default.output_collapsed:hover {
+ background: #d2d2d2;
+ background-color: #d2d2d2;
+ border-color: #d2d2d2;
+}
+
+div.prompt.output_prompt {
+ font-family: monospace, monospace;
+ font-weight: bold !important;
+ background-color: #ffffff;
+ color: transparent;
+ border-bottom-left-radius: 4px;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+ border-right: 2px solid transparent;
+}
+
+div.out_prompt_overlay.prompt {
+ font-family: monospace, monospace;
+ font-weight: bold !important;
+ background-color: #ffffff;
+ border-bottom-left-radius: 2px;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+ border-right: 2px solid transparent;
+ color: transparent;
+}
+
+div.out_prompt_overlay.prompt:hover {
+ background-color: #f7f7f7;
+ box-shadow: none !important;
+ border: none;
+ border-bottom-left-radius: 2px;
+ -webkit-border-: 2px;
+ -moz-border-radius: 2px;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+ border-right: 2px solid #f7f7f7 !important;
+}
+
+div.cell.code_cell .output_prompt {
+ border-right: 2px solid transparent;
+ color: transparent;
+}
+
+div.cell.selected .output_prompt,
+div.cell.selected .out_prompt_overlay.prompt {
+ border-left: 5px solid #f2f2f2;
+ border-right: 2px solid #ffffff;
+ border-radius: 0px !important;
+}
+
+.edit_mode div.cell.selected .output_prompt,
+.edit_mode div.cell.selected .out_prompt_overlay.prompt {
+ border-left: 5px solid #f2f2f2;
+ border-right: 2px solid #ffffff;
+ border-radius: 0px !important;
+}
+
+div.text_cell,
+div.text_cell_render pre,
+div.text_cell_render {
+ font-family: sans-serif;
+ font-size: 13pt;
+ line-height: 130% !important;
+ color: #353535;
+ background: #ffffff;
+ background-color: #ffffff;
+ border-radius: 0px;
+}
+
+div .text_cell_render {
+ padding: 0.4em 0.4em 0.4em 0.4em;
+}
+
+div.cell.text_cell .CodeMirror-lines {
+ padding-top: 0.7em !important;
+ padding-bottom: 0.4em !important;
+ padding-left: 0.5em !important;
+ padding-right: 0.5em !important;
+ margin-top: 0.4em;
+ margin-bottom: 0.3em;
+}
+
+div.cell.text_cell.unrendered div.input_area,
+div.cell.text_cell.rendered div.input_area {
+ background-color: #ffffff;
+ background: #ffffff;
+ border: 0px;
+ border-radius: 2px;
+}
+
+div.cell.text_cell .CodeMirror,
+div.cell.text_cell .CodeMirror pre {
+ line-height: 170% !important;
+}
+
+div.cell.text_cell.rendered.selected {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #ffffff;
+ background-color: #ffffff;
+ border-radius: 0px;
+}
+
+div.cell.text_cell.unrendered.selected {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #ffffff;
+ background-color: #ffffff;
+ border-radius: 0px;
+}
+
+div.cell.text_cell.selected {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #ffffff;
+ background-color: #ffffff;
+ border-radius: 0px;
+}
+
+.edit_mode div.cell.text_cell.selected {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #ffffff;
+ background-color: #ffffff;
+ border-radius: 0px;
+}
+
+div.text_cell.unrendered,
+div.text_cell.unrendered.selected,
+div.edit_mode div.text_cell.unrendered {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #ffffff;
+ background-color: #ffffff;
+ border-radius: 0px;
+}
+
+div.cell.text_cell .prompt {
+ border-right: 0;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+}
+
+div.cell.text_cell.rendered .prompt {
+ font-family: monospace, monospace;
+ font-size: 9.5pt !important;
+ font-weight: normal;
+ color: #828892 !important;
+ text-align: right !important;
+ min-width: 14.5ex !important;
+ width: 14.5ex !important;
+ background-color: #ffffff;
+ border-right: 2px solid transparent;
+ border-left: 4px solid #ffffff;
+}
+
+div.cell.text_cell.unrendered .prompt {
+ font-family: monospace, monospace;
+ font-size: 9.5pt !important;
+ font-weight: normal;
+ color: #828892 !important;
+ text-align: right !important;
+ min-width: 14.5ex !important;
+ width: 14.5ex !important;
+ border-right: 2px solid transparent;
+ border-left: 4px solid #ffffff;
+ background-color: #ffffff;
+}
+
+div.cell.text_cell.rendered .prompt {
+ border-right: 2px solid transparent;
+}
+
+div.cell.text_cell.rendered.selected .prompt {
+ top: 0;
+ border-left: 4px solid #f2f2f2;
+ border-right: 2px solid transparent;
+}
+
+div.text_cell.unrendered.selected .prompt,
+div.text_cell.rendered.selected .prompt {
+ top: 0;
+ background: #ffffff;
+ border-left: 4px solid #f2f2f2;
+ border-right: 2px solid transparent;
+}
+
+div.rendered_html code {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ padding-top: 3px;
+ padding-left: 2px;
+ color: #303030;
+ background: #efefef;
+ background-color: #efefef;
+}
+
+pre,
+code,
+kbd,
+samp {
+ white-space: pre-wrap;
+}
+
+.well code,
+code {
+ font-family: monospace, monospace;
+ font-size: 11pt !important;
+ line-height: 170% !important;
+ color: #353535;
+ background: #efefef;
+ background-color: #efefef;
+ border-color: #efefef;
+}
+
+kbd {
+ padding: 1px;
+ font-size: 11pt;
+ font-weight: 800;
+ color: #303030;
+ background-color: transparent !important;
+ border: 0;
+ box-shadow: none;
+}
+
+pre {
+ display: block;
+ padding: 8.5px;
+ margin: 0 0 9px;
+ font-size: 12pt;
+ line-height: 1.42857143;
+ color: #303030;
+ background-color: #efefef;
+ border: 1px solid #e7e7e7;
+ border-radius: 2px;
+}
+
+div.rendered_html {
+ color: #353535;
+}
+
+.rendered_html * + ul {
+ margin-top: 0.4em;
+ margin-bottom: 0.3em;
+}
+
+.rendered_html * + p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+div.rendered_html pre {
+ font-family: monospace, monospace;
+ font-size: 11pt !important;
+ line-height: 170% !important;
+ color: #353535 !important;
+ background: #efefef;
+ background-color: #efefef;
+ max-width: 80%;
+ border-radius: 0px;
+ border-left: 3px solid #efefef;
+ max-width: 80%;
+ border-radius: 0px;
+ padding-left: 5px;
+ margin-left: 6px;
+}
+
+div.text_cell_render pre,
+div.text_cell_render code {
+ font-family: monospace, monospace;
+ font-size: 11pt !important;
+ line-height: 170% !important;
+ color: #353535;
+ background: #ffffff;
+ background-color: #ffffff;
+ max-width: 80%;
+ border-radius: 0px;
+ border-left: none;
+}
+
+div.text_cell_render pre {
+ border-left: 3px solid rgba(240, 147, 43, 0.5) !important;
+ max-width: 80%;
+ border-radius: 0px;
+ padding-left: 5px;
+ margin-left: 6px;
+}
+
+div.text_cell_render h1,
+div.rendered_html h1,
+div.text_cell_render h2,
+div.rendered_html h2,
+div.text_cell_render h3,
+div.rendered_html h3,
+div.text_cell_render h4,
+div.rendered_html h4,
+div.text_cell_render h5,
+div.rendered_html h5 {
+ font-family: sans-serif;
+ margin: 0.4em 0.2em 0.3em 0.2em !important;
+}
+
+.rendered_html h1:first-child,
+.rendered_html h2:first-child,
+.rendered_html h3:first-child,
+.rendered_html h4:first-child,
+.rendered_html h5:first-child,
+.rendered_html h6:first-child {
+ margin-top: 0.2em !important;
+ margin-bottom: 0.2em !important;
+}
+
+.rendered_html h1,
+.text_cell_render h1 {
+ color: #126dce !important;
+ font-size: 200%;
+ text-align: left;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.rendered_html h2,
+.text_cell_render h2 {
+ color: #126dce !important;
+ font-size: 170%;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.rendered_html h3,
+.text_cell_render h3 {
+ color: #126dce !important;
+ font-size: 140%;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.rendered_html h4,
+.text_cell_render h4 {
+ color: #126dce !important;
+ font-size: 110%;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.rendered_html h5,
+.text_cell_render h5 {
+ color: #126dce !important;
+ font-size: 100%;
+ font-style: normal;
+ font-weight: normal;
+}
+
+hr {
+ margin-top: 8px;
+ margin-bottom: 10px;
+ border: 0;
+ border-top: 1px solid #126dce;
+}
+
+.rendered_html hr {
+ color: #126dce;
+ background-color: #126dce;
+ margin-right: 2em;
+}
+
+#complete > select > option:hover {
+ background: #d4d4d4;
+ background-color: #d4d4d4;
+}
+
+div#_vivaldi-spatnav-focus-indicator._vivaldi-spatnav-focus-indicator {
+ position: absolute;
+ z-index: 9999999999;
+ top: 0px;
+ left: 0px;
+ box-shadow: none;
+ pointer-events: none;
+ border-radius: 2px;
+}
+
+.rendered_html tr,
+.rendered_html th,
+.rendered_html td {
+ text-align: left;
+ vertical-align: middle;
+ padding: 0.42em 0.47em;
+ line-height: normal;
+ white-space: normal;
+ max-width: none;
+ border: none;
+}
+
+.rendered_html td {
+ font-family: sans-serif !important;
+ font-size: 9.3pt;
+}
+
+.rendered_html table {
+ font-family: sans-serif !important;
+ margin-left: 8px;
+ margin-right: auto;
+ border: none;
+ border-collapse: collapse;
+ border-spacing: 0;
+ color: #353535;
+ table-layout: fixed;
+}
+
+.rendered_html thead {
+ font-family: sans-serif !important;
+ font-size: 10.3pt !important;
+ background: #ebebeb;
+ color: #353535;
+ border-bottom: 1px solid #ebebeb;
+ vertical-align: bottom;
+}
+
+.rendered_html tbody tr:nth-child(odd) {
+ background: #fafafa;
+}
+
+.rendered_html tbody tr {
+ background: #f2f2f2;
+}
+
+.rendered_html tbody tr:hover:nth-child(odd) {
+ background: #f7f7f7;
+}
+
+.rendered_html tbody tr:hover {
+ background: #f0f0f0;
+}
+
+.rendered_html * + table {
+ margin-top: 0.05em;
+}
+
+div.widget-area {
+ background-color: #ffffff;
+ background: #ffffff;
+ color: #303030;
+}
+
+div.widget-area a {
+ font-family: sans-serif;
+ font-size: 12pt;
+ font-weight: normal;
+ font-style: normal;
+ color: #303030;
+ text-shadow: none !important;
+}
+
+div.widget-area a:hover,
+div.widget-area a:focus {
+ font-family: sans-serif;
+ font-size: 12pt;
+ font-weight: normal;
+ font-style: normal;
+ color: #2f2f2f;
+ background: rgba(180, 180, 180, 0.14);
+ background-color: rgba(180, 180, 180, 0.14);
+ border-color: transparent;
+ background-image: none;
+ text-shadow: none !important;
+}
+
+div.widget_item.btn-group > button.btn.btn-default.widget-combo-btn,
+div.widget_item.btn-group > button.btn.btn-default.widget-combo-btn:hover {
+ background: #e1e1e1;
+ background-color: #e1e1e1;
+ border: 2px solid #e1e1e1 !important;
+ font-size: inherit;
+ z-index: 0;
+}
+
+div.jupyter-widgets.widget-hprogress.widget-hbox {
+ display: inline-table !important;
+ width: 38% !important;
+ margin-left: 10px;
+}
+
+div.jupyter-widgets.widget-hprogress.widget-hbox .widget-label,
+div.widget-hbox .widget-label,
+.widget-hbox .widget-label,
+.widget-inline-hbox .widget-label,
+div.widget-label {
+ text-align: -webkit-auto !important;
+ margin-left: 15px !important;
+ max-width: 240px !important;
+ min-width: 100px !important;
+ vertical-align: text-top !important;
+ color: #303030 !important;
+ font-size: 14px !important;
+}
+
+.widget-hprogress .progress {
+ flex-grow: 1;
+ height: 20px;
+ margin-top: auto;
+ margin-left: 12px;
+ margin-bottom: auto;
+ width: 300px;
+}
+
+.progress {
+ overflow: hidden;
+ height: 22px;
+ margin-bottom: 10px;
+ padding-left: 10px;
+ background-color: #d6d6d6 !important;
+ border-radius: 2px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ z-index: 10;
+}
+
+.progress-bar-danger {
+ background-color: #e5344a !important;
+}
+
+.progress-bar-info {
+ background-color: #2980b9 !important;
+}
+
+.progress-bar-warning {
+ background-color: #f39c12 !important;
+}
+
+.progress-bar-success {
+ background-color: #5cb85c !important;
+}
+
+.widget-select select {
+ margin-left: 12px;
+}
+
+.rendered_html :link {
+ font-family: sans-serif;
+ font-size: 100%;
+ color: #ff7823;
+ text-decoration: underline;
+}
+
+.rendered_html :visited,
+.rendered_html :visited:active,
+.rendered_html :visited:focus {
+ color: #fa853d;
+}
+
+.rendered_html :visited:hover,
+.rendered_html :link:hover {
+ font-family: sans-serif;
+ font-size: 100%;
+ color: #f96000;
+}
+
+div.cell.text_cell a.anchor-link:link {
+ font-size: inherit;
+ text-decoration: none;
+ padding: 0px 20px;
+ visibility: none;
+ color: rgba(0, 0, 0, 0.32);
+}
+
+div.cell.text_cell a.anchor-link:link:hover {
+ font-size: inherit;
+ color: #de6d25;
+}
+
+.navbar-text {
+ margin-top: 4px;
+ margin-bottom: 0px;
+}
+
+#clusters > a {
+ color: #ef5c00;
+ text-decoration: underline;
+ cursor: auto;
+}
+
+#clusters > a:hover {
+ color: #126dce;
+ text-decoration: underline;
+ cursor: auto;
+}
+
+#nbextensions-configurator-container > div.row.container-fluid.nbext-selector > h3 {
+ font-size: 17px;
+ margin-top: 5px;
+ margin-bottom: 8px;
+ height: 24px;
+ padding: 4px 0 4px 0;
+}
+
+div#nbextensions-configurator-container.container,
+#nbextensions-configurator-container.container {
+ width: 100%;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+div.nbext-selector > nav > .nav > li > a {
+ font-family: sans-serif;
+ font-size: 10.5pt;
+ padding: 2px 5px;
+}
+
+div.nbext-selector > nav > .nav > li > a:hover {
+ background: transparent;
+}
+
+div.nbext-selector > nav > .nav > li:hover {
+ background-color: rgba(180, 180, 180, 0.14) !important;
+ background: rgba(180, 180, 180, 0.14) !important;
+}
+
+div.nbext-selector > nav > .nav > li.active:hover {
+ background: transparent !important;
+ background-color: transparent !important;
+}
+
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:active,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #1c1c1c;
+ background-color: rgba(180, 180, 180, 0.14) !important;
+ background: rgba(180, 180, 180, 0.14) !important;
+ -webkit-backface-visibility: hidden;
+ -webkit-font-smoothing: subpixel-antialiased !important;
+}
+
+div.nbext-readme > .nbext-readme-contents > .rendered_html {
+ font-family: sans-serif;
+ font-size: 11.5pt;
+ line-height: 145%;
+ padding: 1em 1em;
+ color: #353535;
+ background-color: #ffffff;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.nbext-icon,
+.nbext-desc,
+.nbext-compat-div,
+.nbext-enable-btns,
+.nbext-params {
+ margin-bottom: 8px;
+ font-size: 11.5pt;
+}
+
+div.nbext-readme > .nbext-readme-contents {
+ padding: 0;
+ overflow-y: hidden;
+}
+
+div.nbext-readme > .nbext-readme-contents:not(:empty) {
+ margin-top: 0.5em;
+ margin-bottom: 2em;
+ border: none;
+ border-top-color: #828892;
+}
+
+.nbext-showhide-incompat {
+ padding-bottom: 0.5em;
+ color: #4a4a4a;
+ font-size: 10.5pt;
+}
+
+.nbext-filter-menu.dropdown-menu > li > a:hover,
+.nbext-filter-menu.dropdown-menu > li > a:focus,
+.nbext-filter-menu.dropdown-menu > li > a.ui-state-focus {
+ color: #2f2f2f !important;
+ background-color: #d4d4d4 !important;
+ background: #d4d4d4 !important;
+ border-color: #d4d4d4 !important;
+}
+
+.nbext-filter-input-wrap > .nbext-filter-input-subwrap,
+.nbext-filter-input-wrap > .nbext-filter-input-subwrap > input {
+ border: none;
+ outline: none;
+ background-color: transparent;
+ padding: 0;
+ vertical-align: middle;
+ margin-top: -2px;
+}
+
+span.rendered_html code {
+ background-color: transparent;
+ color: #303030;
+}
+
+#nbextensions-configurator-container > div.row.container-fluid.nbext-selector {
+ padding-left: 0px;
+ padding-right: 0px;
+}
+
+.nbext-filter-menu {
+ max-height: 55vh !important;
+ overflow-y: auto;
+ outline: none;
+ border: none;
+}
+
+.nbext-filter-menu:hover {
+ border: none;
+}
+
+.alert-warning {
+ background-color: #f4f4f4;
+ border-color: #f4f4f4;
+ color: #303030;
+}
+
+.notification_widget.danger {
+ color: #ffffff;
+ background-color: #e5344a;
+ border-color: #e5344a;
+ padding-right: 5px;
+}
+
+#nbextensions-configurator-container > div.nbext-buttons.tree-buttons.no-padding.pull-right > span > button {
+ border: none !important;
+}
+
+button#refresh_running_list {
+ border: none !important;
+}
+
+mark,
+.mark {
+ background-color: #ffffff;
+ color: #353535;
+ padding: 0.15em;
+}
+
+a.text-warning,
+a.text-warning:hover {
+ color: #828892;
+}
+
+a.text-warning.bg-warning {
+ background-color: #ffffff;
+}
+
+span.bg-success.text-success {
+ background-color: transparent;
+ color: #009e07;
+}
+
+span.bg-danger.text-danger {
+ background-color: #ffffff;
+ color: #de143d;
+}
+
+.has-success .input-group-addon {
+ color: #009e07;
+ border-color: transparent;
+ background: inherit;
+ background-color: rgba(83, 180, 115, 0.1);
+}
+
+.has-success .form-control {
+ border-color: #009e07;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
+}
+
+.has-error .input-group-addon {
+ color: #de143d;
+ border-color: transparent;
+ background: inherit;
+ background-color: rgba(192, 57, 67, 0.1);
+}
+
+.has-error .form-control {
+ border-color: #de143d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
+}
+
+.kse-input-group-pretty > kbd {
+ font-family: monospace, monospace;
+ color: #303030;
+ font-weight: normal;
+ background: transparent;
+}
+
+.kse-input-group-pretty > kbd {
+ font-family: monospace, monospace;
+ color: #303030;
+ font-weight: normal;
+ background: transparent;
+}
+
+div.nbext-enable-btns .btn[disabled],
+div.nbext-enable-btns .btn[disabled]:hover,
+.btn-default.disabled,
+.btn-default[disabled] {
+ background: #e2e2e2;
+ background-color: #e2e2e2;
+ color: #282828;
+}
+
+label#Keyword-Filter {
+ display: none;
+}
+
+.input-group .nbext-list-btn-add,
+.input-group-btn:last-child > .btn-group > .btn {
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border-color: #e4e4e4;
+ border: 2px solid #e4e4e4;
+}
+
+.input-group .nbext-list-btn-add:hover,
+.input-group-btn:last-child > .btn-group > .btn:hover {
+ background: #dfdfdf;
+ background-color: #dfdfdf;
+ border-color: #dfdfdf;
+ border: 2px solid #dfdfdf;
+}
+
+#notebook-container
+ > div.cell.code_cell.rendered.selected
+ > div.widget-area
+ > div.widget-subarea
+ > div
+ > div.widget_item.btn-group
+ > button.btn.btn-default.dropdown-toggle.widget-combo-carrot-btn {
+ background: #e4e4e4;
+ background-color: #e4e4e4;
+ border-color: #e4e4e4;
+}
+
+#notebook-container
+ > div.cell.code_cell.rendered.selected
+ > div.widget-area
+ > div.widget-subarea
+ > div
+ > div.widget_item.btn-group
+ > button.btn.btn-default.dropdown-toggle.widget-combo-carrot-btn:hover {
+ background: #dfdfdf;
+ background-color: #dfdfdf;
+ border-color: #dfdfdf;
+}
+
+.ui-widget-content {
+ background: #e5e5e5;
+ background-color: #e5e5e5;
+ border: 2px solid #e5e5e5;
+ color: #303030;
+}
+
+div.collapsible_headings_toggle {
+ color: rgba(180, 180, 180, 0.3) !important;
+}
+
+div.collapsible_headings_toggle:hover {
+ color: #ff7823 !important;
+}
+
+.collapsible_headings_toggle .h1,
+.collapsible_headings_toggle .h2,
+.collapsible_headings_toggle .h3,
+.collapsible_headings_toggle .h4,
+.collapsible_headings_toggle .h5,
+.collapsible_headings_toggle .h6 {
+ margin: 0.3em 0.4em 0em 0em !important;
+ line-height: 1.2 !important;
+}
+
+div.collapsible_headings_toggle .fa-caret-down:before,
+div.collapsible_headings_toggle .fa-caret-right:before {
+ font-size: xx-large;
+ transition: transform 1000ms;
+ transform: none !important;
+}
+
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h1:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h2:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h3:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h4:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h5:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h6:after {
+ position: absolute;
+ right: 0;
+ bottom: 20% !important;
+ content: "[\002026]";
+ color: rgba(180, 180, 180, 0.3) !important;
+ padding: 0.5em 0em 0em 0em !important;
+}
+
+.collapsible_headings_ellipsis .rendered_html h1,
+.collapsible_headings_ellipsis .rendered_html h2,
+.collapsible_headings_ellipsis .rendered_html h3,
+.collapsible_headings_ellipsis .rendered_html h4,
+.collapsible_headings_ellipsis .rendered_html h5,
+.collapsible_headings_ellipsis .rendered_html h6,
+.collapsible_headings_toggle .fa {
+ transition: transform 1000ms !important;
+ -webkit-transform: inherit !important;
+ -moz-transform: inherit !important;
+ -ms-transform: inherit !important;
+ -o-transform: inherit !important;
+ transform: inherit !important;
+ padding-right: 0px !important;
+}
+
+#toc-wrapper {
+ z-index: 90;
+ position: fixed !important;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+ padding: 10px;
+ border-style: solid;
+ border-width: thin;
+ border-right-width: medium !important;
+ background-color: #ffffff !important;
+}
+
+#toc-wrapper.ui-draggable.ui-resizable.sidebar-wrapper {
+ border-color: rgba(180, 180, 180, 0.14) !important;
+}
+
+#toc a,
+#navigate_menu a,
+.toc {
+ color: #303030 !important;
+ font-size: 11pt !important;
+}
+
+#toc li > span:hover {
+ background-color: #d4d4d4 !important;
+}
+
+#toc a:hover,
+#navigate_menu a:hover,
+.toc {
+ color: #1c1c1c !important;
+ font-size: 11pt !important;
+}
+
+#toc-wrapper .toc-item-num {
+ color: #ff7823 !important;
+ font-size: 11pt !important;
+}
+
+input.raw_input {
+ font-family: monospace, monospace;
+ font-size: 11pt !important;
+ color: #303030;
+ background-color: #efefef;
+ border-color: #ececec;
+ background: #ececec;
+ width: auto;
+ vertical-align: baseline;
+ padding: 0em 0.25em;
+ margin: 0em 0.25em;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+audio,
+video {
+ display: inline;
+ vertical-align: middle;
+ align-content: center;
+ margin-left: 20%;
+}
+
+.cmd-palette .modal-body {
+ padding: 0px;
+ margin: 0px;
+}
+
+.cmd-palette form {
+ background: #e5e5e5;
+ background-color: #e5e5e5;
+}
+
+.typeahead-field input:last-child,
+.typeahead-hint {
+ background: #e5e5e5;
+ background-color: #e5e5e5;
+ z-index: 1;
+}
+
+.typeahead-field input {
+ font-family: sans-serif;
+ color: #303030;
+ border: none;
+ font-size: 28pt;
+ display: inline-block;
+ line-height: inherit;
+ padding: 3px 10px;
+ height: 70px;
+}
+
+.typeahead-select {
+ background-color: #e5e5e5;
+}
+
+body > div.modal.cmd-palette.typeahead-field {
+ display: table;
+ border-collapse: separate;
+ background-color: #f4f4f4;
+}
+
+.typeahead-container button {
+ font-family: sans-serif;
+ font-size: 28pt;
+ background-color: #e4e4e4;
+ border: none;
+ display: inline-block;
+ line-height: inherit;
+ padding: 3px 10px;
+ height: 70px;
+}
+
+.typeahead-search-icon {
+ min-width: 40px;
+ min-height: 55px;
+ display: block;
+ vertical-align: middle;
+ text-align: center;
+}
+
+.typeahead-container button:focus,
+.typeahead-container button:hover {
+ color: #2f2f2f;
+ background-color: #dfdfdf;
+ border-color: #e0e0e0;
+}
+
+.typeahead-list > li.typeahead-group.active > a,
+.typeahead-list > li.typeahead-group > a,
+.typeahead-list > li.typeahead-group > a:focus,
+.typeahead-list > li.typeahead-group > a:hover {
+ display: none;
+}
+
+.typeahead-dropdown > li > a,
+.typeahead-list > li > a {
+ color: #303030;
+ text-decoration: none;
+}
+
+.typeahead-dropdown,
+.typeahead-list {
+ font-family: sans-serif;
+ font-size: 13pt;
+ color: #303030;
+ background-color: #ffffff;
+ border: none;
+ background-clip: padding-box;
+ margin-top: 0px;
+ padding: 3px 2px 3px 0px;
+ line-height: 1.7;
+}
+
+.typeahead-dropdown > li.active > a,
+.typeahead-dropdown > li > a:focus,
+.typeahead-dropdown > li > a:hover,
+.typeahead-list > li.active > a,
+.typeahead-list > li > a:focus,
+.typeahead-list > li > a:hover {
+ color: #2f2f2f;
+ background-color: #f4f4f4;
+ border-color: #f4f4f4;
+}
+
+.command-shortcut:before {
+ content: "(command)";
+ padding-right: 3px;
+ color: #828892;
+}
+
+.edit-shortcut:before {
+ content: "(edit)";
+ padding-right: 3px;
+ color: #828892;
+}
+
+ul.typeahead-list i {
+ margin-left: 1px;
+ width: 18px;
+ margin-right: 10px;
+}
+
+ul.typeahead-list {
+ max-height: 50vh;
+ overflow: auto;
+}
+
+.typeahead-list > li {
+ position: relative;
+ border: none;
+}
+
+div.input.typeahead-hint,
+input.typeahead-hint,
+body > div.modal.cmd-palette.in > div > div > div > form > div > div.typeahead-field > span.typeahead-query > input.typeahead-hint {
+ color: #828892 !important;
+ background-color: transparent;
+ padding: 3px 10px;
+}
+
+.typeahead-dropdown > li > a,
+.typeahead-list > li > a {
+ display: block;
+ padding: 5px;
+ clear: both;
+ font-weight: 400;
+ line-height: 1.7;
+ border: 1px solid #ffffff;
+ border-bottom-color: rgba(180, 180, 180, 0.3);
+}
+
+body > div.modal.cmd-palette.in > div {
+ min-width: 750px;
+ margin: 150px auto;
+}
+
+.typeahead-container strong {
+ font-weight: bolder;
+ color: #ff7823;
+}
+
+#find-and-replace #replace-preview .match,
+#find-and-replace #replace-preview .insert {
+ color: #ffffff;
+ background-color: #ff7823;
+ border-color: #ff7823;
+ border-style: solid;
+ border-width: 1px;
+ border-radius: 0px;
+}
+
+#find-and-replace #replace-preview .replace .match {
+ background-color: #de143d;
+ border-color: #de143d;
+ border-radius: 0px;
+}
+
+#find-and-replace #replace-preview .replace .insert {
+ background-color: #009e07;
+ border-color: #009e07;
+ border-radius: 0px;
+}
+
+.jupyter-dashboard-menu-item.selected::before {
+ font-family: "FontAwesome" !important;
+ content: "\f00c" !important;
+ position: absolute !important;
+ color: #ff7823 !important;
+ left: 0px !important;
+ top: 13px !important;
+ font-size: 12px !important;
+}
+
+.shortcut_key,
+span.shortcut_key {
+ display: inline-block;
+ width: 16ex;
+ text-align: right;
+ font-family: monospace;
+}
+
+.jupyter-keybindings {
+ padding: 1px;
+ line-height: 24px;
+ border-bottom: 1px solid rgba(180, 180, 180, 0.14);
+}
+
+.jupyter-keybindings i {
+ background: #efefef;
+ font-size: small;
+ padding: 5px;
+ margin-left: 7px;
+}
+
+div#short-key-bindings-intro.well,
+.well {
+ background-color: #e4e4e4;
+ border: 1px solid #e4e4e4;
+ color: #303030;
+ border-radius: 2px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#texteditor-backdrop {
+ background: #ffffff;
+ background-color: #ffffff;
+}
+
+#texteditor-backdrop #texteditor-container .CodeMirror-gutter,
+#texteditor-backdrop #texteditor-container .CodeMirror-gutters {
+ background: #e0e1e3;
+ background-color: #e0e1e3;
+ color: #828892;
+}
+
+.edit_app #menubar .navbar {
+ margin-bottom: 0px;
+}
+
+#texteditor-backdrop #texteditor-container {
+ padding: 0px;
+ background-color: #ededed;
+ box-shadow: none;
+}
+
+.terminal-app {
+ background: #ffffff;
+}
+
+.terminal-app > #header {
+ background: #ffffff;
+}
+
+.terminal-app .terminal {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ line-height: 170%;
+ color: #303030;
+ background: #ededed;
+ padding: 0.4em;
+ border-radius: 2px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.terminal .xterm-viewport {
+ background-color: #ededed;
+ color: #303030;
+ overflow-y: auto;
+}
+
+.terminal .xterm-color-0 {
+ color: #ff7823;
+}
+
+.terminal .xterm-color-1 {
+ color: #de143d;
+}
+
+.terminal .xterm-color-2 {
+ color: #713bc5;
+}
+
+.terminal .xterm-color-3 {
+ color: #e22978;
+}
+
+.terminal .xterm-color-4 {
+ color: #ff8132;
+}
+
+.terminal .xterm-color-5 {
+ color: #009e07;
+}
+
+.terminal .xterm-color-6 {
+ color: #e22978;
+}
+
+.terminal .xterm-color-7 {
+ color: #e22978;
+}
+
+.terminal .xterm-color-8 {
+ color: #ef5c00;
+}
+
+.terminal .xterm-color-9 {
+ color: #009e07;
+}
+
+.terminal .xterm-color-10 {
+ color: #e22978;
+}
+
+.terminal .xterm-color-14 {
+ color: #e22978;
+}
+
+.terminal .xterm-bg-color-15 {
+ background-color: #ededed;
+}
+
+.terminal:not(.xterm-cursor-style-underline):not(.xterm-cursor-style-bar) .terminal-cursor {
+ background-color: #ff7823;
+ color: #ededed;
+}
+
+.terminal:not(.focus) .terminal-cursor {
+ outline: 1px solid #ff7823;
+ outline-offset: -1px;
+}
+
+.celltoolbar {
+ font-size: 100%;
+ padding-top: 3px;
+ border-color: transparent;
+ border-bottom: thin solid #828892;
+ background: transparent;
+}
+
+.cell-tag,
+.tags-input input,
+.tags-input button {
+ color: #303030;
+ background-color: #ffffff;
+ background-image: none;
+ border: 1px solid #303030;
+ border-radius: 1px;
+ box-shadow: none;
+ width: inherit;
+ font-size: inherit;
+ height: 22px;
+ line-height: 22px;
+}
+
+#notebook-container > div.cell.code_cell.rendered.selected > div.input > div.inner_cell > div.ctb_hideshow.ctb_show > div > div > button,
+#notebook-container > div.input > div.inner_cell > div.ctb_hideshow.ctb_show > div > div > button {
+ font-size: 10pt;
+ color: #303030;
+ background-color: #ffffff;
+ background-image: none;
+ border: 1px solid #303030;
+ border-radius: 1px;
+ box-shadow: none;
+ width: inherit;
+ font-size: inherit;
+ height: 22px;
+ line-height: 22px;
+}
+
+div#pager #pager-contents {
+ background: #ffffff !important;
+ background-color: #ffffff !important;
+}
+
+div#pager pre {
+ color: #303030 !important;
+ background: #ededed !important;
+ background-color: #ededed !important;
+ padding: 0.4em;
+}
+
+div#pager .ui-resizable-handle {
+ top: 0px;
+ height: 8px;
+ background: #ff7823 !important;
+ border-top: 1px solid #ff7823;
+ border-bottom: 1px solid #ff7823;
+}
+
+div.CodeMirror,
+div.CodeMirror pre {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ line-height: 170%;
+ color: #303030;
+}
+
+div.CodeMirror-lines {
+ padding-bottom: 0.9em;
+ padding-left: 0.5em;
+ padding-right: 1.5em;
+ padding-top: 0.7em;
+}
+
+span.ansiblack,
+.ansi-black-fg {
+ color: #e22978;
+}
+
+span.ansiblue,
+.ansi-blue-fg,
+.ansi-blue-intense-fg {
+ color: #009e07;
+}
+
+span.ansigray,
+.ansi-gray-fg,
+.ansi-gray-intense-fg {
+ color: #ff8132;
+}
+
+span.ansigreen,
+.ansi-green-fg {
+ color: #333333;
+}
+
+.ansi-green-intense-fg {
+ color: #ff8132;
+}
+
+span.ansipurple,
+.ansi-purple-fg,
+.ansi-purple-intense-fg {
+ color: #653bc5;
+}
+
+span.ansicyan,
+.ansi-cyan-fg,
+.ansi-cyan-intense-fg {
+ color: #653bc5;
+}
+
+span.ansiyellow,
+.ansi-yellow-fg,
+.ansi-yellow-intense-fg {
+ color: #ff8132;
+}
+
+span.ansired,
+.ansi-red-fg,
+.ansi-red-intense-fg {
+ color: #de143d;
+}
+
+div.output-stderr {
+ background-color: #ebb5b7;
+}
+
+div.output-stderr pre {
+ color: #000000;
+}
+
+div.js-error {
+ color: #de143d;
+}
+
+.ipython_tooltip {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ line-height: 170%;
+ border: 2px solid #dadada;
+ background: #eeeeee;
+ background-color: #eeeeee;
+ border-radius: 2px;
+ overflow-x: visible;
+ overflow-y: visible;
+ box-shadow: none;
+ position: absolute;
+ z-index: 1000;
+}
+
+.ipython_tooltip .tooltiptext pre {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ line-height: 170%;
+ background: #eeeeee;
+ background-color: #eeeeee;
+ color: #303030;
+ overflow-x: visible;
+ overflow-y: visible;
+ max-width: 900px;
+}
+
+div#tooltip.ipython_tooltip {
+ overflow-x: wrap;
+ overflow-y: visible;
+ max-width: 800px;
+}
+
+div.tooltiptext.bigtooltip {
+ overflow-x: visible;
+ overflow-y: scroll;
+ height: 400px;
+ max-width: 800px;
+}
+
+.cm-s-ipython.CodeMirror {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ background: #ededed;
+ color: #303030;
+ border-radius: 2px;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.cm-s-ipython div.CodeMirror-selected {
+ background: #e0e1e3;
+}
+
+.CodeMirror-gutters {
+ border: none;
+ border-right: 1px solid #e0e1e3 !important;
+ background-color: #e0e1e3 !important;
+ background: #e0e1e3 !important;
+ border-radius: 0px;
+ white-space: nowrap;
+}
+
+.cm-s-ipython .CodeMirror-gutters {
+ background: #e0e1e3;
+ border: none;
+ border-radius: 0px;
+ width: 36px;
+}
+
+.cm-s-ipython .CodeMirror-linenumber {
+ color: #828892;
+}
+
+.CodeMirror-sizer {
+ margin-left: 40px;
+}
+
+.CodeMirror-linenumber,
+div.CodeMirror-linenumber,
+.CodeMirror-gutter.CodeMirror-linenumberdiv.CodeMirror-gutter.CodeMirror-linenumber {
+ padding-right: 1px;
+ margin-left: 0px;
+ margin: 0px;
+ width: 26px !important;
+ padding: 0px;
+ text-align: right;
+}
+
+.CodeMirror-linenumber {
+ color: #828892;
+}
+
+.cm-s-ipython .CodeMirror-cursor {
+ border-left: 2px solid #ff711a !important;
+}
+
+.cm-s-ipython span.cm-comment {
+ color: #8d8d8d;
+ font-style: italic;
+}
+
+.cm-s-ipython span.cm-atom {
+ color: #055be0;
+}
+
+.cm-s-ipython span.cm-number {
+ color: #ff8132;
+}
+
+.cm-s-ipython span.cm-property {
+ color: #303030;
+}
+
+.cm-s-ipython span.cm-attribute {
+ color: #303030;
+}
+
+.cm-s-ipython span.cm-keyword {
+ color: #713bc5;
+ font-weight: normal;
+}
+
+.cm-s-ipython span.cm-string {
+ color: #009e07;
+}
+
+.cm-s-ipython span.cm-meta {
+ color: #aa22ff;
+}
+
+.cm-s-ipython span.cm-operator {
+ color: #055be0;
+}
+
+.cm-s-ipython span.cm-builtin {
+ color: #e22978;
+}
+
+.cm-s-ipython span.cm-variable {
+ color: #303030;
+}
+
+.cm-s-ipython span.cm-variable-2 {
+ color: #de143d;
+}
+
+.cm-s-ipython span.cm-variable-3 {
+ color: #aa22ff;
+}
+
+.cm-s-ipython span.cm-def {
+ color: #e22978;
+ font-weight: normal;
+}
+
+.cm-s-ipython span.cm-error {
+ background: rgba(191, 11, 55, 0.7);
+}
+
+.cm-s-ipython span.cm-tag {
+ color: #e22978;
+}
+
+.cm-s-ipython span.cm-link {
+ color: #ef5c00;
+}
+
+.cm-s-ipython span.cm-storage {
+ color: #055be0;
+}
+
+.cm-s-ipython span.cm-entity {
+ color: #e22978;
+}
+
+.cm-s-ipython span.cm-quote {
+ color: #009e07;
+}
+
+div.CodeMirror span.CodeMirror-matchingbracket {
+ color: #ffffff;
+ font-weight: bold;
+ background-color: #009e07;
+}
+
+div.CodeMirror span.CodeMirror-nonmatchingbracket {
+ color: #ffffff;
+ font-weight: bold;
+ background: rgba(191, 11, 55, 0.7) !important;
+}
+
+.cm-header-1 {
+ font-size: 215%;
+}
+
+.cm-header-2 {
+ font-size: 180%;
+}
+
+.cm-header-3 {
+ font-size: 150%;
+}
+
+.cm-header-4 {
+ font-size: 120%;
+}
+
+.cm-header-5 {
+ font-size: 100%;
+}
+
+.cm-s-default .cm-hr {
+ color: #055be0;
+}
+
+div.cell.text_cell .cm-s-default .cm-header {
+ font-family: sans-serif;
+ font-weight: normal;
+ color: #126dce !important;
+ margin-top: 0.3em !important;
+ margin-bottom: 0.3em !important;
+}
+
+div.cell.text_cell .cm-s-default span.cm-variable-2 {
+ color: #353535 !important;
+}
+
+div.cell.text_cell .cm-s-default span.cm-variable-3 {
+ color: #aa22ff !important;
+}
+
+.cm-s-default span.cm-comment {
+ color: #8d8d8d !important;
+}
+
+.cm-s-default .cm-tag {
+ color: #009fb7;
+}
+
+.cm-s-default .cm-builtin {
+ color: #e22978;
+}
+
+.cm-s-default .cm-string {
+ color: #009e07;
+}
+
+.cm-s-default .cm-keyword {
+ color: #713bc5;
+}
+
+.cm-s-default .cm-number {
+ color: #ff8132;
+}
+
+.cm-s-default .cm-error {
+ color: #055be0;
+}
+
+.cm-s-default .cm-link {
+ color: #ef5c00;
+}
+
+.cm-s-default .cm-atom {
+ color: #ff8132;
+}
+
+.cm-s-default .cm-def {
+ color: #e22978;
+}
+
+.CodeMirror-cursor {
+ border-left: 2px solid #ff711a !important;
+ border-right: none;
+ width: 0;
+}
+
+.cm-s-default div.CodeMirror-selected {
+ background: #e0e1e3;
+}
+
+.cm-s-default .cm-selected {
+ background: #e0e1e3;
+}
+
+.MathJax_Display,
+.MathJax {
+ border: 0 !important;
+ font-size: 100% !important;
+ text-align: center !important;
+ margin: 0em !important;
+ line-height: 2.25 !important;
+}
+
+.MathJax:focus,
+body :focus .MathJax {
+ display: inline-block !important;
+}
+
+.MathJax:focus,
+body :focus .MathJax {
+ display: inline-block !important;
+}
+
+.completions {
+ position: absolute;
+ z-index: 110;
+ overflow: hidden;
+ border: medium solid rgba(240, 147, 43, 0.5);
+ box-shadow: none;
+ line-height: 1;
+}
+
+.completions select {
+ background: #ededed;
+ background-color: #ededed;
+ outline: none;
+ border: none;
+ padding: 0px;
+ margin: 0px;
+ margin-left: 2px;
+ overflow: auto;
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ color: #303030;
+ width: auto;
+}
+
+div#maintoolbar {
+ display: none !important;
+}
+
+#header-container {
+ display: none !important;
+}
diff --git a/assets/css/jupyter-monokai.css b/assets/css/jupyter-monokai.css
index beabb558..a368754d 100644
--- a/assets/css/jupyter-monokai.css
+++ b/assets/css/jupyter-monokai.css
@@ -1,3758 +1,3758 @@
-/* Derived from https://github.com/dunovank/jupyter-themes/blob/master/jupyterthemes/styles/compiled/monokai.css */
-div#notebook {
- font-family: sans-serif;
- font-size: 13pt;
- line-height: 170%;
- color: #f8f8f0;
- -webkit-font-smoothing: antialiased !important;
- padding-top: 25px !important;
-}
-
-body,
-div.body {
- font-family: sans-serif;
- font-size: 13pt;
- color: #f8f8f0;
- background-color: #1e1e1e;
- background: #1e1e1e;
- -webkit-font-smoothing: antialiased !important;
-}
-
-body.notebook_app {
- padding: 0;
- background-color: #1e1e1e;
- background: #1e1e1e;
- padding-right: 0px !important;
- overflow-y: hidden;
-}
-
-a {
- font-family: sans-serif;
- color: #f8f8f0;
- -webkit-font-smoothing: antialiased !important;
-}
-
-a:hover,
-a:focus {
- color: #f8f8f0;
- -webkit-font-smoothing: antialiased !important;
-}
-
-div#maintoolbar {
- position: absolute;
- width: 90%;
- margin-left: -10%;
- padding-right: 8%;
- float: left;
- background: transparent !important;
-}
-
-#maintoolbar {
- margin-bottom: -3px;
- margin-top: 0px;
- border: 0px;
- min-height: 27px;
- padding-top: 2px;
- padding-bottom: 0px;
-}
-
-#maintoolbar .container {
- width: 75%;
- margin-right: auto;
- margin-left: auto;
-}
-
-.list_header,
-div#notebook_list_header.row.list_header {
- font-size: 14pt;
- color: #f8f8f0;
- background-color: transparent;
- height: 35px;
-}
-
-i.fa.fa-folder {
- display: inline-block;
- font: normal normal normal 14px "FontAwesome";
- font-family: "FontAwesome" !important;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- font-size: 18px;
- -moz-osx-font-smoothing: grayscale;
-}
-
-#running .panel-group .panel .panel-heading {
- font-size: 14pt;
- color: #f8f8f0;
- padding: 8px 8px;
- background: #2f2f2f;
- background-color: #2f2f2f;
-}
-
-#running .panel-group .panel .panel-heading a {
- font-size: 14pt;
- color: #f8f8f0;
-}
-
-#running .panel-group .panel .panel-heading a:focus,
-#running .panel-group .panel .panel-heading a:hover {
- font-size: 14pt;
- color: #f8f8f0;
-}
-
-#running .panel-group .panel .panel-body .list_container .list_item {
- background: #232323;
- background-color: #232323;
- padding: 2px;
- border-bottom: 2px solid rgba(93, 92, 82, 0.25);
-}
-
-#running .panel-group .panel .panel-body .list_container .list_item:hover {
- background: #232323;
- background-color: #232323;
-}
-
-#running .panel-group .panel .panel-body {
- padding: 2px;
-}
-
-button#refresh_running_list {
- border: none !important;
-}
-
-button#refresh_cluster_list {
- border: none !important;
-}
-
-div.running_list_info.toolbar_info {
- font-size: 15px;
- padding: 4px 0 4px 0;
- margin-top: 5px;
- margin-bottom: 8px;
- height: 24px;
- line-height: 24px;
- text-shadow: none;
-}
-
-.list_placeholder {
- font-weight: normal;
-}
-
-#tree-selector {
- padding: 0px;
- border-color: transparent;
-}
-
-#project_name > ul > li > a > i.fa.fa-home {
- color: #a6e22e;
- font-size: 17pt;
- display: inline-block;
- position: static;
- padding: 0px 0px;
- font-weight: normal;
- text-align: center;
- vertical-align: text-top;
-}
-
-.fa-folder:before {
- color: #ae81ff;
-}
-
-.fa-arrow-up:before {
- font-size: 14px;
-}
-
-.fa-arrow-down:before {
- font-size: 14px;
-}
-
-span#last-modified.btn.btn-xs.btn-default.sort-action:hover .fa,
-span#sort-name.btn.btn-xs.btn-default.sort-action:hover .fa {
- color: #a6e22e;
-}
-
-.folder_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f07b";
- color: #ae81ff;
-}
-
-.notebook_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f02d";
- position: relative;
- color: #a6e22e !important;
- top: 0px;
-}
-
-.file_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f15b";
- position: relative;
- top: 0px;
- color: #888888 !important;
-}
-
-#project_name a {
- display: inline-flex;
- padding-left: 7px;
- margin-left: -2px;
- text-align: -webkit-auto;
- vertical-align: baseline;
- font-size: 18px;
-}
-
-div#notebook_toolbar div.dynamic-instructions {
- font-family: sans-serif;
- font-size: 17px;
- color: #75715e;
-}
-
-span#login_widget > .button,
-#logout {
- font-family: "Proxima Nova", sans-serif;
- color: #f8f8f0;
- background: transparent;
- background-color: transparent;
- border: 2px solid #2f2f2f;
- font-weight: normal;
- box-shadow: none;
- text-shadow: none;
- border-radius: 3px;
- margin-right: 10px;
- padding: 2px 7px;
-}
-
-span#login_widget > .button:hover,
-#logout:hover {
- color: #a6e22e;
- background-color: transparent;
- background: transparent;
- border: 2px solid #a6e22e;
- background-image: none;
- box-shadow: none !important;
- border-radius: 3px;
-}
-
-span#login_widget > .button:focus,
-#logout:focus,
-span#login_widget > .button.focus,
-#logout.focus,
-span#login_widget > .button:active,
-#logout:active,
-span#login_widget > .button.active,
-#logout.active,
-.open > .dropdown-togglespan#login_widget > .button,
-.open > .dropdown-toggle#logout {
- color: #f8f8f2;
- background-color: #f8f8f0;
- background: #f8f8f0;
- border-color: #f8f8f0;
- background-image: none;
- box-shadow: none !important;
- border-radius: 2px;
-}
-
-body > #header #header-container {
- padding-bottom: 0px;
- padding-top: 4px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
-}
-
-body > #header {
- background: #1e1e1e;
- background-color: #1e1e1e;
- position: relative;
- z-index: 100;
-}
-
-.list_container {
- font-size: 13pt;
- color: #f8f8f0;
- border: none;
- text-shadow: none !important;
-}
-
-.list_container > div {
- border-bottom: 1px solid rgba(93, 92, 82, 0.25);
- font-size: 13pt;
-}
-
-.list_header > div,
-.list_item > div {
- padding-top: 6px;
- padding-bottom: 2px;
- padding-left: 0px;
-}
-
-.list_header > div .item_link,
-.list_item > div .item_link {
- margin-left: -1px;
- vertical-align: middle;
- line-height: 22px;
- font-size: 13pt;
-}
-
-.item_icon {
- color: #ae81ff;
- font-size: 13pt;
- vertical-align: middle;
-}
-
-.list_item input:not([type="checkbox"]) {
- padding-right: 0px;
- height: 1.75em;
- width: 25%;
- margin: 0px 0 0;
- margin-top: 0px;
-}
-
-.list_header > div .item_link,
-.list_item > div .item_link {
- margin-left: -1px;
- vertical-align: middle;
- line-height: 1.5em;
- font-size: 12pt;
- display: inline-table;
- position: static;
-}
-
-#button-select-all {
- height: 34px;
- min-width: 55px;
- z-index: 0;
- border: none !important;
- padding-top: 0px;
- padding-bottom: 0px;
- margin-bottom: 0px;
- margin-top: 0px;
- left: -3px;
- border-radius: 0px !important;
-}
-
-#button-select-all:focus,
-#button-select-all:active:focus,
-#button-select-all.active:focus,
-#button-select-all.focus,
-#button-select-all:active.focus,
-#button-select-all.active.focus {
- background-color: #2f2f2f !important;
- background: #2f2f2f !important;
-}
-
-button#tree-selector-btn {
- height: 34px;
- font-size: 12pt;
- border: none;
- left: 0px;
- border-radius: 0px !important;
-}
-
-input#select-all.pull-left.tree-selector {
- margin-left: 7px;
- margin-right: 2px;
- margin-top: 2px;
- top: 4px;
-}
-
-input[type="radio"],
-input[type="checkbox"] {
- margin-top: 1px;
- line-height: normal;
-}
-
-.delete-button {
- border: none !important;
-}
-
-i.fa.fa-trash {
- font-size: 13.5pt;
-}
-
-.list_container a {
- font-size: 16px;
- color: #f8f8f0;
- border: none;
- text-shadow: none !important;
- font-weight: normal;
- font-style: normal;
-}
-
-div.list_container a:hover {
- color: #f8f8f0;
-}
-
-.list_header > div input,
-.list_item > div input {
- margin-right: 7px;
- margin-left: 12px;
- vertical-align: baseline;
- line-height: 22px;
- position: relative;
- top: -1px;
-}
-
-div.list_item:hover {
- background-color: rgba(93, 92, 82, 0.1);
-}
-
-.breadcrumb > li {
- font-size: 12pt;
- color: #f8f8f0;
- border: none;
- text-shadow: none !important;
-}
-
-.breadcrumb > li + li:before {
- content: "/\00a0";
- padding: 0px;
- color: #f8f8f0;
- font-size: 18px;
-}
-
-#project_name > .breadcrumb {
- padding: 0px;
- margin-bottom: 0px;
- background-color: transparent;
- font-weight: normal;
- margin-top: -2px;
-}
-
-ul#tabs a {
- font-family: sans-serif;
- font-size: 13.5pt;
- font-weight: normal;
- font-style: normal;
- text-shadow: none !important;
-}
-
-.nav-tabs {
- font-family: sans-serif;
- font-size: 13.5pt;
- font-weight: normal;
- font-style: normal;
- background-color: transparent;
- border-color: transparent;
- text-shadow: none !important;
- border: 2px solid transparent;
-}
-
-.nav-tabs > li > a:active,
-.nav-tabs > li > a:focus,
-.nav-tabs > li > a:hover,
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:focus,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
- color: #a6e22e;
- background-color: transparent;
- border-color: transparent;
- border-bottom: 2px solid transparent;
-}
-
-.nav > li.disabled > a,
-.nav > li.disabled > a:hover {
- color: #75715e;
-}
-
-.nav-tabs > li > a:before {
- content: "";
- position: absolute;
- width: 100%;
- height: 2px;
- bottom: -2px;
- left: 0;
- background-color: #a6e22e;
- visibility: hidden;
- -webkit-transform: perspective(0) scaleX(0);
- transform: perspective(0) scaleX(0);
- -webkit-transition: ease 220ms;
- transition: ease 220ms;
- -webkit-font-smoothing: antialiased !important;
-}
-
-.nav-tabs > li > a:hover:before {
- visibility: visible;
- -webkit-transform: perspective(1) scaleX(1);
- transform: perspective(1) scaleX(1);
-}
-
-.nav-tabs > li.active > a:before {
- content: "";
- position: absolute;
- width: 100%;
- height: 2px;
- bottom: -2px;
- left: 0;
- background-color: #a6e22e;
- visibility: visible;
- -webkit-transform: perspective(1) scaleX(1);
- transform: perspective(1) scaleX(1);
- -webkit-font-smoothing: subpixel-antialiased !important;
-}
-
-div#notebook {
- font-family: sans-serif;
- font-size: 13pt;
- padding-top: 4px;
-}
-
-.notebook_app {
- background-color: #1e1e1e;
-}
-
-#notebook-container {
- padding: 13px 2px;
- background-color: #1e1e1e;
- min-height: 0px;
- box-shadow: none;
- width: 980px;
- margin-right: auto;
- margin-left: auto;
-}
-
-div#ipython-main-app.container {
- width: 980px;
- margin-right: auto;
- margin-left: auto;
- margin-right: auto;
- margin-left: auto;
-}
-
-.container {
- width: 980px;
- margin-right: auto;
- margin-left: auto;
-}
-
-div#menubar-container {
- width: 100%;
- width: 980px;
-}
-
-div#header-container {
- width: 980px;
-}
-
-.notebook_app #header,
-.edit_app #header {
- box-shadow: none !important;
- background-color: #1e1e1e;
- border-bottom: 2px solid rgba(93, 92, 82, 0.25);
-}
-
-#header,
-.edit_app #header {
- font-family: sans-serif;
- font-size: 13pt;
- box-shadow: none;
- background-color: #1e1e1e;
-}
-
-#header .header-bar,
-.edit_app #header .header-bar {
- background: #1e1e1e;
- background-color: #1e1e1e;
-}
-
-body > #header .header-bar {
- width: 100%;
- background: #1e1e1e;
-}
-
-span.checkpoint_status,
-span.autosave_status {
- font-size: small;
- display: none;
-}
-
-#menubar,
-div#menubar {
- background-color: #1e1e1e;
- padding-top: 0px !important;
-}
-
-#menubar .navbar,
-.navbar-default {
- background-color: #1e1e1e;
- margin-bottom: 0px;
- margin-top: 0px;
-}
-
-.navbar {
- border: none;
-}
-
-div.navbar-text,
-.navbar-text,
-.navbar-text.indicator_area,
-p.navbar-text.indicator_area {
- margin-top: 8px !important;
- margin-bottom: 0px;
- color: #a6e22e;
-}
-
-.navbar-default {
- font-family: sans-serif;
- font-size: 13pt;
- background-color: #1e1e1e;
- border-color: rgba(93, 92, 82, 0.25);
- line-height: 1.5em;
- padding-bottom: 0px;
-}
-
-.navbar-default .navbar-nav > li > a {
- font-family: sans-serif;
- font-size: 13pt;
- color: #f8f8f0;
- display: block;
- line-height: 1.5em;
- padding-top: 14px;
- padding-bottom: 11px;
-}
-
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
- color: #f8f8f0 !important;
- background-color: rgba(93, 92, 82, 0.25) !important;
- border-color: rgba(93, 92, 82, 0.25) !important;
- line-height: 1.5em;
- transition: 80ms ease;
-}
-
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
- color: #f8f8f2;
- background-color: #383838;
- border-color: #383838;
- line-height: 1.5em;
-}
-
-.navbar-nav > li > .dropdown-menu {
- margin-top: 0px;
-}
-
-.navbar-nav {
- margin: 0;
-}
-
-div.notification_widget.info,
-.notification_widget.info,
-.notification_widget:active:hover,
-.notification_widget.active:hover,
-.open > .dropdown-toggle.notification_widget:hover,
-.notification_widget:active:focus,
-.notification_widget.active:focus,
-.open > .dropdown-toggle.notification_widget:focus,
-.notification_widget:active.focus,
-.notification_widget.active.focus,
-.open > .dropdown-toggle.notification_widget.focus,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:hover,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:focus {
- color: #f8f8f0 !important;
- background-color: transparent !important;
- border-color: transparent !important;
- padding-bottom: 0px !important;
- margin-bottom: 0px !important;
- font-size: 9pt !important;
- z-index: 0;
-}
-
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn {
- font-size: 9pt !important;
- z-index: 0;
-}
-
-.notification_widget {
- color: #ae81ff;
- z-index: -500;
- font-size: 9pt;
- background: transparent;
- background-color: transparent;
- margin-right: 3px;
- border: none;
-}
-
-.notification_widget,
-div.notification_widget {
- margin-right: 0px;
- margin-left: 0px;
- padding-right: 0px;
- vertical-align: text-top !important;
- margin-top: 6px !important;
- background: transparent !important;
- background-color: transparent !important;
- font-size: 9pt !important;
- border: none;
-}
-
-.navbar-btn.btn-xs:hover {
- border: none !important;
- background: transparent !important;
- background-color: transparent !important;
- color: #f8f8f0 !important;
-}
-
-div.notification_widget.info,
-.notification_widget.info {
- display: none !important;
-}
-
-.edit_mode .modal_indicator:before {
- display: none;
-}
-
-.command_mode .modal_indicator:before {
- display: none;
-}
-
-.item_icon {
- color: #ae81ff;
-}
-
-.item_buttons .kernel-name {
- font-size: 13pt;
- color: #ae81ff;
-}
-
-.running_notebook_icon:before {
- color: #a6e22e !important;
- font: normal normal normal 15px/1 FontAwesome;
- font-size: 15px;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f10c";
- vertical-align: middle;
- position: static;
- display: inherit;
-}
-
-.item_buttons .running-indicator {
- padding-top: 4px;
- color: #a6e22e;
- font-family: sans-serif;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
-}
-
-#notification_trusted {
- font-family: sans-serif;
- border: none;
- background: transparent;
- background-color: transparent;
- margin-bottom: 0px !important;
- vertical-align: bottom !important;
- color: #75715e !important;
- cursor: default !important;
-}
-
-#notification_area,
-div.notification_area {
- float: right !important;
- position: static;
- cursor: pointer;
- padding-top: 6px;
- padding-right: 4px;
-}
-
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn {
- font-size: 9pt !important;
- z-index: 0;
- margin-top: -5px !important;
-}
-
-#modal_indicator {
- float: right !important;
- color: #4c8be2;
- background: #1e1e1e;
- background-color: #1e1e1e;
- margin-top: 8px !important;
- margin-left: 0px;
-}
-
-#kernel_indicator {
- float: right !important;
- color: #a6e22e;
- background: #1e1e1e;
- background-color: #1e1e1e;
- border-left: 2px solid #a6e22e;
- padding-top: 0px;
- padding-bottom: 4px;
- margin-top: 10px !important;
- margin-left: -2px;
- padding-left: 5px !important;
-}
-
-#kernel_indicator .kernel_indicator_name {
- font-size: 17px;
- color: #a6e22e;
- background: #1e1e1e;
- background-color: #1e1e1e;
- padding-left: 5px;
- padding-right: 5px;
- margin-top: 4px;
- vertical-align: text-top;
- padding-bottom: 0px;
-}
-
-.kernel_idle_icon:before {
- display: inline-block;
- font: normal normal normal 22px/1 FontAwesome;
- font-size: 22px;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- cursor: pointer;
- margin-left: 0px !important;
- opacity: 0.7;
- vertical-align: bottom;
- margin-top: 1px;
- content: "\f1db";
-}
-
-.kernel_busy_icon:before {
- display: inline-block;
- font: normal normal normal 22px/1 FontAwesome;
- font-size: 22px;
- -webkit-animation: pulsate 2s infinite ease-out;
- animation: pulsate 2s infinite ease-out;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- cursor: pointer;
- margin-left: 0px !important;
- vertical-align: bottom;
- margin-top: 1px;
- content: "\f111";
-}
-
-@-webkit-keyframes pulsate {
- 0% {
- -webkit-transform: scale(1, 1);
- opacity: 0.8;
- }
-
- 8% {
- -webkit-transform: scale(1, 1);
- opacity: 0.8;
- }
-
- 50% {
- -webkit-transform: scale(0.75, 0.75);
- opacity: 0.3;
- }
-
- 92% {
- -webkit-transform: scale(1, 1);
- opacity: 0.8;
- }
-
- 100% {
- -webkit-transform: scale(1, 1);
- opacity: 0.8;
- }
-}
-
-div.notification_widget.info,
-.notification_widget.info,
-.notification_widget:active:hover,
-.notification_widget.active:hover,
-.open > .dropdown-toggle.notification_widget:hover,
-.notification_widget:active:focus,
-.notification_widget.active:focus,
-.open > .dropdown-toggle.notification_widget:focus,
-.notification_widget:active.focus,
-.notification_widget.active.focus,
-.open > .dropdown-toggle.notification_widget.focus,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:hover,
-div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:focus {
- color: #f8f8f0;
- background-color: #1e1e1e;
- border-color: #1e1e1e;
-}
-
-#notification_area,
-div.notification_area {
- float: right !important;
- position: static;
-}
-
-.notification_widget,
-div.notification_widget {
- margin-right: 0px;
- margin-left: 0px;
- padding-right: 0px;
- vertical-align: text-top !important;
- margin-top: 6px !important;
- z-index: 1000;
-}
-
-#kernel_logo_widget,
-#kernel_logo_widget .current_kernel_logo {
- display: none;
-}
-
-div#ipython_notebook {
- display: none;
-}
-
-i.fa.fa-icon {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-rendering: auto;
-}
-
-.fa {
- display: inline-block;
- font:
- normal normal normal 10pt/1 "FontAwesome",
- sans-serif;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.dropdown-menu {
- font-family: sans-serif;
- font-size: 13pt;
- box-shadow: none;
- padding: 0px;
- text-align: left;
- border: none;
- background-color: #383838;
- background: #383838;
- line-height: 1;
-}
-
-.dropdown-menu:hover {
- font-family: sans-serif;
- font-size: 13pt;
- box-shadow: none;
- padding: 0px;
- text-align: left;
- border: none;
- background-color: #383838;
- box-shadow: none;
- line-height: 1;
-}
-
-.dropdown-menu > li > a {
- font-family: sans-serif;
- font-size: 12pt;
- display: block;
- padding: 10px 20px 9px 10px;
- color: #f8f8f0;
- background-color: #383838;
- background: #383838;
-}
-
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
- color: #f8f8f0;
- background-color: rgba(93, 92, 82, 0.25);
- background: rgba(93, 92, 82, 0.25);
- border-color: rgba(93, 92, 82, 0.25);
- transition: 200ms ease;
-}
-
-.dropdown-menu .divider {
- height: 1px;
- margin: 0px 0px;
- overflow: hidden;
- background-color: rgba(93, 92, 82, 0.5);
-}
-
-.dropdown-submenu > .dropdown-menu {
- display: none;
- top: 2px !important;
- left: 100%;
- margin-top: -2px;
- margin-left: 0px;
- padding-top: 0px;
- transition: 200ms ease;
-}
-
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- font-family: sans-serif;
- font-size: 12pt;
- font-weight: normal;
- color: #75715e;
- padding: none;
- display: block;
- clear: both;
- white-space: nowrap;
-}
-
-.dropdown-submenu > a:after {
- color: #f8f8f0;
- margin-right: -16px;
- margin-top: 0px;
- display: inline-block;
-}
-
-.dropdown-submenu:hover > a:after,
-.dropdown-submenu:active > a:after,
-.dropdown-submenu:focus > a:after,
-.dropdown-submenu:visited > a:after {
- color: #a6e22e;
- margin-right: -16px;
- display: inline-block !important;
-}
-
-div.kse-dropdown > .dropdown-menu,
-.kse-dropdown > .dropdown-menu {
- min-width: 0;
- top: 94%;
-}
-
-.btn,
-.btn-default {
- font-family: sans-serif;
- color: #f8f8f0;
- background: #2f2f2f;
- background-color: #2f2f2f;
- border: 2px solid #2f2f2f;
- font-weight: normal;
- box-shadow: none;
- text-shadow: none;
- border-radius: 3px;
- font-size: initial;
-}
-
-.btn:hover,
-.btn:active:hover,
-.btn.active:hover,
-.btn-default:hover,
-.open > .dropdown-toggle.btn-default:hover,
-.open > .dropdown-toggle.btn:hover {
- color: #a6e22e;
- border: 2px solid #2a2a2a;
- background-color: #2a2a2a;
- background: #2a2a2a;
- background-image: none;
- box-shadow: none !important;
- border-radius: 3px;
-}
-
-.btn:active,
-.btn.active,
-.btn:active:focus,
-.btn.active:focus,
-.btn:active.focus,
-.btn.active.focus,
-.btn-default:focus,
-.btn-default.focus,
-.btn-default:active,
-.btn-default.active,
-.btn-default:active:hover,
-.btn-default.active:hover,
-.btn-default:active:focus,
-.btn-default.active:focus,
-.btn-default:active.focus,
-.btn-default.active.focus,
-.open > .dropdown-toggle.btn:focus,
-.open > .dropdown-toggle.btn.focus,
-.open > .dropdown-toggle.btn-default:hover,
-.open > .dropdown-toggle.btn-default:focus,
-.open > .dropdown-toggle.btn-default.hover,
-.open > .dropdown-toggle.btn-default.focus {
- color: #a6e22e;
- border: 2px solid #2a2a2a;
- background-color: #2a2a2a !important;
- background: #2a2a2a !important;
- background-image: none;
- box-shadow: none !important;
- border-radius: 3px;
-}
-
-.btn-default:active:hover,
-.btn-default.active:hover,
-.btn-default:active:focus,
-.btn-default.active:focus,
-.btn-default:active.focus,
-.btn-default.active.focus {
- color: #a6e22e !important;
- background-color: #2f2f2f;
- border-color: #546745 !important;
- transition: 2000ms ease;
-}
-
-.btn:focus,
-.btn.focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn:active,
-.btn.active,
-.btn:active.focus,
-.btn.active.focus {
- color: #a6e22e !important;
- outline: none !important;
- outline-width: 0px !important;
- background: #546745 !important;
- background-color: #546745 !important;
- border-color: #546745 !important;
- transition: 200ms ease !important;
-}
-
-.item_buttons > .btn,
-.item_buttons > .btn-group,
-.item_buttons > .input-group {
- font-size: 13pt;
- background: transparent;
- background-color: transparent;
- border: 0px solid #2f2f2f;
- border-bottom: 2px solid transparent;
- margin-left: 5px;
- padding-top: 4px !important;
-}
-
-.item_buttons > .btn:hover,
-.item_buttons > .btn-group:hover,
-.item_buttons > .input-group:hover,
-.item_buttons > .btn.active,
-.item_buttons > .btn-group.active,
-.item_buttons > .input-group.active,
-.item_buttons > .btn.focus {
- margin-left: 5px;
- background: #2a2a2a;
- padding-top: 4px !important;
- background-color: transparent;
- border: 0px solid transparent;
- border-bottom: 2px solid #a6e22e;
- border-radius: 0px;
- transition: none;
-}
-
-.item_buttons {
- line-height: 1.5em !important;
-}
-
-.item_buttons .btn {
- min-width: 11ex;
-}
-
-.btn-group > .btn:first-child {
- margin-left: 3px;
-}
-
-.btn-group > .btn-mini,
-.btn-sm,
-.btn-group-sm > .btn,
-.btn-xs,
-.btn-group-xs > .btn,
-.alternate_upload .btn-upload,
-.btn-group,
-.btn-group-vertical {
- font-size: inherit;
- font-weight: normal;
- height: inherit;
- line-height: inherit;
-}
-
-.btn-xs,
-.btn-group-xs > .btn {
- font-size: initial !important;
- background-image: none;
- font-weight: normal;
- text-shadow: none;
- display: inline-table;
- padding: 2px 5px;
- line-height: 1.45;
-}
-
-.btn-group > .btn:first-child {
- margin-left: 3px;
-}
-
-div#new-buttons > button,
-#new-buttons > button,
-div#refresh_notebook_list,
-#refresh_notebook_list {
- background: transparent;
- background-color: transparent;
- border: none;
-}
-
-div#new-buttons > button:hover,
-#new-buttons > button:hover,
-div#refresh_notebook_list,
-#refresh_notebook_list,
-div.alternate_upload .btn-upload,
-.alternate_upload .btn-upload,
-div.dynamic-buttons > button,
-.dynamic-buttons > button,
-.dynamic-buttons > button:focus,
-.dynamic-buttons > button:active:focus,
-.dynamic-buttons > button.active:focus,
-.dynamic-buttons > button.focus,
-.dynamic-buttons > button:active.focus,
-.dynamic-buttons > button.active.focus,
-#new-buttons > button:focus,
-#new-buttons > button:active:focus,
-#new-buttons > button.active:focus,
-#new-buttons > button.focus,
-#new-buttons > button:active.focus,
-#new-buttons > button.active.focus,
-.alternate_upload .btn-upload:focus,
-.alternate_upload .btn-upload:active:focus,
-.alternate_upload .btn-upload.active:focus,
-.alternate_upload .btn-upload.focus,
-.alternate_upload .btn-upload:active.focus,
-.alternate_upload .btn-upload.active.focus {
- background: transparent !important;
- background-color: transparent !important;
- border: none !important;
-}
-
-.alternate_upload input.fileinput {
- text-align: center;
- vertical-align: bottom;
- margin-left: -0.5ex;
- display: inline-table;
- border: solid 0px #2f2f2f;
- margin-bottom: -1ex;
-}
-
-.alternate_upload .btn-upload {
- display: inline-table;
- background: transparent;
- border: none;
-}
-
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
- margin-left: -2px;
-}
-
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- z-index: 2;
-}
-
-.dropdown-header {
- font-family: sans-serif !important;
- font-size: 13pt !important;
- color: #a6e22e !important;
- border-bottom: none !important;
- padding: 0px !important;
- margin: 6px 6px 0px !important;
-}
-
-span#last-modified.btn.btn-xs.btn-default.sort-action,
-span#sort-name.btn.btn-xs.btn-default.sort-action,
-span#file-size.btn.btn-xs.btn-default.sort-action {
- font-family: sans-serif;
- font-size: 16px;
- background-color: transparent;
- background: transparent;
- border: none;
- color: #f8f8f0;
- padding-bottom: 0px;
- margin-bottom: 0px;
- vertical-align: sub;
-}
-
-span#last-modified.btn.btn-xs.btn-default.sort-action {
- margin-left: 19px;
-}
-
-button.close {
- border: 0px none;
- font-family: sans-serif;
- font-size: 20pt;
- font-weight: normal;
-}
-
-.dynamic-buttons {
- padding-top: 0px;
- display: inline-block;
-}
-
-.close {
- color: #f92672;
- opacity: 0.5;
- text-shadow: none;
- font-weight: normal;
-}
-
-.close:hover {
- color: #f92672;
- opacity: 1;
- font-weight: normal;
-}
-
-div.nbext-enable-btns .btn[disabled],
-div.nbext-enable-btns .btn[disabled]:hover,
-.btn-default.disabled,
-.btn-default[disabled],
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus {
- color: #888888;
- background: #2c2c2c;
- background-color: #2c2c2c;
- border-color: #2c2c2c;
- transition: 200ms ease;
-}
-
-.input-group-addon {
- padding: 2px 5px;
- font-size: 13pt;
- font-weight: normal;
- height: auto;
- color: #f8f8f0;
- text-align: center;
- background-color: transparent;
- border: 2px solid transparent !important;
- text-transform: capitalize;
-}
-
-a.btn.btn-default.input-group-addon:hover {
- background: transparent !important;
- background-color: transparent !important;
-}
-
-.btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
- height: 100%;
-}
-
-.btn-group > .btn + .dropdown-toggle:hover {
- background: #2a2a2a !important;
-}
-
-.input-group-btn {
- position: relative;
- font-size: inherit;
- white-space: nowrap;
- background: #2f2f2f;
- background-color: #2f2f2f;
- border: none;
-}
-
-.input-group-btn:hover {
- background: #2a2a2a;
- background-color: #2a2a2a;
- border: none;
-}
-
-.input-group-btn:first-child > .btn,
-.input-group-btn:first-child > .btn-group {
- background: #2f2f2f;
- background-color: #2f2f2f;
- border: none;
- margin-left: 2px;
- margin-right: -1px;
- font-size: inherit;
-}
-
-.input-group-btn:first-child > .btn:hover,
-.input-group-btn:first-child > .btn-group:hover {
- background: #2a2a2a;
- background-color: #2a2a2a;
- border: none;
- font-size: inherit;
- transition: 200ms ease;
-}
-
-div.modal .btn-group > .btn:first-child {
- background: #2f2f2f;
- background-color: #2f2f2f;
- border: 1px solid #2c2c2c;
- margin-top: 0px !important;
- margin-left: 0px;
- margin-bottom: 2px;
-}
-
-div.modal .btn-group > .btn:first-child:hover {
- background: #2a2a2a;
- background-color: #2a2a2a;
- border: 1px solid #2a2a2a;
- transition: 200ms ease;
-}
-
-div.modal > button,
-div.modal-footer > button {
- background: #2f2f2f;
- background-color: #2f2f2f;
- border-color: #2f2f2f;
-}
-
-div.modal > button:hover,
-div.modal-footer > button:hover {
- background: #2a2a2a;
- background-color: #2a2a2a;
- border-color: #2a2a2a;
- transition: 200ms ease;
-}
-
-.modal-content {
- font-family: sans-serif;
- font-size: 12pt;
- position: relative;
- background: #2f2f2f;
- background-color: #2f2f2f;
- border: none;
- border-radius: 1px;
- background-clip: padding-box;
- outline: none;
-}
-
-.modal-header {
- font-family: sans-serif;
- font-size: 13pt;
- color: #f8f8f0;
- background: #2f2f2f;
- background-color: #2f2f2f;
- border-color: rgba(93, 92, 82, 0.25);
- padding: 12px;
- min-height: 16.4286px;
-}
-
-.modal-content h4 {
- font-family: sans-serif;
- font-size: 16pt;
- color: #f8f8f0;
- padding: 5px;
-}
-
-.modal-body {
- background-color: #232323;
- position: relative;
- padding: 15px;
-}
-
-.modal-footer {
- padding: 8px;
- text-align: right;
- background-color: #232323;
- border-top: none;
-}
-
-.alert-info {
- background-color: #2f2f2f;
- border-color: rgba(93, 92, 82, 0.25);
- color: #f8f8f0;
-}
-
-.modal-header .close {
- margin-top: -5px;
- font-size: 25pt;
-}
-
-.modal-backdrop,
-.modal-backdrop.in {
- opacity: 0.85;
- background-color: notebook-bg;
-}
-
-div.panel,
-div.panel-default,
-.panel,
-.panel-default {
- font-family: sans-serif;
- font-size: 13pt;
- background-color: #232323;
- color: #f8f8f0;
- margin-bottom: 14px;
- border: 0;
- box-shadow: none;
-}
-
-div.panel > .panel-heading,
-div.panel-default > .panel-heading {
- font-size: 14pt;
- color: #f8f8f0;
- background: #2f2f2f;
- background-color: #2f2f2f;
- border: 0;
-}
-
-.modal .modal-dialog {
- min-width: 950px;
- margin: 50px auto;
-}
-
-div.container-fluid {
- margin-right: auto;
- margin-left: auto;
- padding-left: 0px;
- padding-right: 5px;
-}
-
-div.form-control,
-.form-control {
- font-family: sans-serif;
- font-size: initial;
- color: #f8f8f0;
- background-color: #282828;
- border: 1px solid #282828 !important;
- margin-left: 2px;
- box-shadow: none;
- transition:
- border-color 0.15s ease-in-out 0s,
- box-shadow 0.15s ease-in-out 0s;
-}
-
-.form-control-static {
- min-height: inherit;
- height: inherit;
-}
-
-.form-group.list-group-item {
- color: #f8f8f0;
- background-color: #232323;
- border-color: rgba(93, 92, 82, 0.25);
- margin-bottom: 0px;
-}
-
-.form-group .input-group {
- float: left;
-}
-
-input,
-button,
-select,
-textarea {
- background-color: #282828;
- font-weight: normal;
- border: 1px solid rgba(93, 92, 82, 0.25);
-}
-
-select.form-control.select-xs {
- height: 33px;
- font-size: 13pt;
-}
-
-.toolbar select,
-.toolbar label {
- width: auto;
- vertical-align: middle;
- margin-right: 0px;
- margin-bottom: 0px;
- display: inline;
- font-size: 92%;
- margin-left: 10px;
- padding: 0px;
- background: #2f2f2f !important;
- background-color: #2f2f2f !important;
- border: 2px solid #2f2f2f !important;
-}
-
-.form-control:focus {
- border-color: #a6e22e;
- outline: 2px solid #49483e;
- -webkit-box-shadow: none;
-}
-
-::-webkit-input-placeholder {
- color: #75715e;
-}
-
-::-moz-placeholder {
- color: #75715e;
-}
-
-:-ms-input-placeholder {
- color: #75715e;
-}
-
-:-moz-placeholder {
- color: #75715e;
-}
-
-[dir="ltr"] #find-and-replace .input-group-btn + .form-control {
- border: 2px solid rgba(93, 92, 82, 0.25) !important;
-}
-
-[dir="ltr"] #find-and-replace .input-group-btn + .form-control:focus {
- border-color: #a6e22e;
- outline: 2px solid #49483e;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-div.output.output_scroll {
- box-shadow: none;
-}
-
-::-webkit-scrollbar {
- width: 11px;
- max-height: 9px;
- background-color: #2d2d2d;
- border-radius: 3px;
- border: none;
-}
-
-::-webkit-scrollbar-track {
- background: #2d2d2d;
- border: none;
- width: 11px;
- max-height: 9px;
-}
-
-::-webkit-scrollbar-thumb {
- border-radius: 2px;
- border: none;
- background: #49483e;
- background-clip: content-box;
- width: 11px;
-}
-
-HTML,
-body,
-div,
-dl,
-dt,
-dd,
-ul,
-ol,
-li,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-pre,
-code,
-form,
-fieldset,
-legend,
-input,
-button,
-textarea,
-p,
-blockquote,
-th,
-td,
-span,
-a {
- text-rendering: geometricPrecision;
- -webkit-font-smoothing: subpixel-antialiased;
- font-weight: 400;
-}
-
-div.input_area {
- background-color: #282828;
- background: #282828;
- padding-right: 1.2em;
- border: 0px;
- border-radius: 0px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-
-div.cell {
- padding: 0px;
- background: #282828;
- background-color: #282828;
- border: medium solid #1e1e1e;
- border-radius: 4px;
- top: 0;
-}
-
-div.cell.selected {
- background: #282828;
- background-color: #282828;
- border: medium solid #1e1e1e;
- padding: 0px;
- border-radius: 5px;
-}
-
-.edit_mode div.cell.selected {
- padding: 0px;
- background: #282828;
- background-color: #282828;
- border: medium solid #1e1e1e;
- border-radius: 5px;
-}
-
-div.cell.edit_mode {
- padding: 0px;
- background: #282828;
- background-color: #282828;
-}
-
-div.CodeMirror-sizer {
- margin-left: 0px;
- margin-bottom: -21px;
- border-right-width: 16px;
- min-height: 37px;
- padding-right: 0px;
- padding-bottom: 0px;
- margin-top: 0px;
-}
-
-div.cell.selected:before,
-.edit_mode div.cell.selected:before,
-div.cell.selected:before,
-div.cell.selected.jupyter-soft-selected:before {
- background: #282828 !important;
- border: none;
- border-radius: 3px;
- position: absolute;
- display: block;
- top: 0px;
- left: 0px;
- width: 0px;
- height: 100%;
-}
-
-div.cell.text_cell.selected::before,
-.edit_mode div.cell.text_cell.selected:before,
-div.cell.text_cell.selected:before,
-div.cell.text_cell.selected.jupyter-soft-selected:before {
- background: #282828 !important;
- background-color: #282828 !important;
- border-color: #57564b !important;
-}
-
-div.cell.code_cell .input {
- border-left: 5px solid #282828 !important;
- border-radius: 3px;
- border-bottom-left-radius: 3px;
- border-top-left-radius: 3px;
-}
-
-div.cell.code_cell.selected .input {
- border-left: 5px solid #57564b !important;
- border-radius: 3px;
-}
-
-.edit_mode div.cell.code_cell.selected .input {
- border-left: 5px solid #33322b !important;
- border-radius: 3px;
-}
-
-.edit_mode div.cell.selected:before {
- height: 100%;
- border-left: 5px solid #33322b !important;
- border-radius: 3px;
-}
-
-div.cell.jupyter-soft-selected,
-div.cell.selected.jupyter-soft-selected {
- border-left-color: #33322b !important;
- border-left-width: 0px !important;
- padding-left: 7px !important;
- border-right-color: #33322b !important;
- border-right-width: 0px !important;
- background: #33322b !important;
- border-radius: 6px !important;
-}
-
-div.cell.selected.jupyter-soft-selected .input {
- border-left: 5px solid #282828 !important;
-}
-
-div.cell.selected.jupyter-soft-selected {
- border-left-color: #57564b;
- border-color: #1e1e1e;
- padding-left: 7px;
- border-radius: 6px;
-}
-
-div.cell.code_cell.selected .input {
- border-left: none;
- border-radius: 3px;
-}
-
-div.cell.selected.jupyter-soft-selected .prompt,
-div.cell.text_cell.selected.jupyter-soft-selected .prompt {
- top: 0;
- border-left: #282828 !important;
- border-radius: 2px;
-}
-
-div.cell.text_cell.selected.jupyter-soft-selected .input_prompt {
- border-left: none !important;
-}
-
-div.cell.text_cell.jupyter-soft-selected,
-div.cell.text_cell.selected.jupyter-soft-selected {
- border-left-color: #33322b !important;
- border-left-width: 0px !important;
- padding-left: 26px !important;
- border-right-color: #33322b !important;
- border-right-width: 0px !important;
- background: #33322b !important;
- border-radius: 5px !important;
-}
-
-div.cell.jupyter-soft-selected .input,
-div.cell.selected.jupyter-soft-selected .input {
- border-left-color: #33322b !important;
-}
-
-div.prompt,
-.prompt {
- font-family: monospace, monospace;
- font-size: 9pt !important;
- font-weight: normal;
- color: #75715e;
- line-height: 170%;
- padding: 0px;
- padding-top: 4px;
- padding-left: 0px;
- padding-right: 1px;
- text-align: right !important;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
-}
-
-div.prompt.input_prompt {
- font-size: 9pt !important;
- background-color: #282828;
- border-top: 0px;
- border-top-right-radius: 0px;
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
- padding-right: 3px;
- min-width: 11.5ex;
- width: 11.5ex !important;
-}
-
-div.cell.code_cell .input_prompt {
- border-right: 2px solid #49483e;
-}
-
-div.cell.selected .prompt {
- top: 0;
-}
-
-.edit_mode div.cell.selected .prompt {
- top: 0;
-}
-
-.edit_mode div.cell.selected .prompt {
- top: 0;
-}
-
-.run_this_cell {
- visibility: hidden;
- color: transparent;
- padding-top: 0px;
- padding-bottom: 0px;
- padding-left: 3px;
- padding-right: 12px;
- width: 1.5ex;
- width: 0ex;
- background: transparent;
- background-color: transparent;
-}
-
-div.code_cell:hover div.input .run_this_cell {
- visibility: visible;
-}
-
-div.cell.code_cell.rendered.selected .run_this_cell:hover {
- background-color: #1e1e1e;
- background: #1e1e1e;
- color: #57564b !important;
-}
-
-div.cell.code_cell.rendered.unselected .run_this_cell:hover {
- background-color: #1e1e1e;
- background: #1e1e1e;
- color: #57564b !important;
-}
-
-i.fa-step-forward.fa {
- display: inline-block;
- font: normal normal normal 9px "FontAwesome";
-}
-
-.fa-step-forward:before {
- content: "\f04b";
-}
-
-div.cell.selected.jupyter-soft-selected .run_this_cell,
-div.cell.selected.jupyter-soft-selected .run_this_cell:hover,
-div.cell.unselected.jupyter-soft-selected .run_this_cell:hover,
-div.cell.code_cell.rendered.selected.jupyter-soft-selected .run_this_cell:hover,
-div.cell.code_cell.rendered.unselected.jupyter-soft-selected .run_this_cell:hover {
- background-color: #33322b !important;
- background: #33322b !important;
- color: #33322b !important;
-}
-
-div.output_wrapper {
- background-color: #232323;
- border: 0px;
- left: 0px;
- margin-bottom: 0em;
- margin-top: 0em;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
-}
-
-div.output_subarea.output_text.output_stream.output_stdout,
-div.output_subarea.output_text {
- font-family: monospace, monospace;
- font-size: 8.5pt !important;
- line-height: 150% !important;
- background-color: #232323;
- color: #cccccc;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- margin-left: 11.5px;
-}
-
-div.output_area pre {
- font-family: monospace, monospace;
- font-size: 8.5pt !important;
- line-height: 151% !important;
- color: #cccccc;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
-}
-
-div.output_area {
- display: -webkit-box;
-}
-
-div.output_html {
- font-family: monospace, monospace;
- font-size: 8.5pt;
- color: #cccccc;
- background-color: #232323;
- background: #232323;
-}
-
-div.output_subarea {
- overflow-x: auto;
- padding: 1.2em !important;
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- flex: 1;
-}
-
-div.btn.btn-default.output_collapsed {
- background: #222222;
- background-color: #222222;
- border-color: #222222;
-}
-
-div.btn.btn-default.output_collapsed:hover {
- background: #1d1d1d;
- background-color: #1d1d1d;
- border-color: #1d1d1d;
-}
-
-div.prompt.output_prompt {
- font-family: monospace, monospace;
- font-weight: bold !important;
- background-color: #232323;
- color: transparent;
- border-bottom-left-radius: 4px;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- border-bottom-right-radius: 0px;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
- border-right: 2px solid transparent;
-}
-
-div.out_prompt_overlay.prompt {
- font-family: monospace, monospace;
- font-weight: bold !important;
- background-color: #232323;
- border-bottom-left-radius: 2px;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- border-bottom-right-radius: 0px;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
- border-right: 2px solid transparent;
- color: transparent;
-}
-
-div.out_prompt_overlay.prompt:hover {
- background-color: #49483e;
- box-shadow: none !important;
- border: none;
- border-bottom-left-radius: 2px;
- -webkit-border-: 2px;
- -moz-border-radius: 2px;
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
- border-right: 2px solid #49483e !important;
-}
-
-div.cell.code_cell .output_prompt {
- border-right: 2px solid transparent;
- color: transparent;
-}
-
-div.cell.selected .output_prompt,
-div.cell.selected .out_prompt_overlay.prompt {
- border-left: 5px solid #33322b;
- border-right: 2px solid #232323;
- border-radius: 0px !important;
-}
-
-.edit_mode div.cell.selected .output_prompt,
-.edit_mode div.cell.selected .out_prompt_overlay.prompt {
- border-left: 5px solid #33322b;
- border-right: 2px solid #232323;
- border-radius: 0px !important;
-}
-
-div.text_cell,
-div.text_cell_render pre,
-div.text_cell_render {
- font-family: sans-serif;
- font-size: 13pt;
- line-height: 130% !important;
- color: #f8f8f0;
- background: #282828;
- background-color: #282828;
- border-radius: 0px;
-}
-
-div .text_cell_render {
- padding: 0.4em 0.4em 0.4em 0.4em;
-}
-
-div.cell.text_cell .CodeMirror-lines {
- padding-top: 0.7em !important;
- padding-bottom: 0.4em !important;
- padding-left: 0.5em !important;
- padding-right: 0.5em !important;
- margin-top: 0.4em;
- margin-bottom: 0.3em;
-}
-
-div.cell.text_cell.unrendered div.input_area,
-div.cell.text_cell.rendered div.input_area {
- background-color: #282828;
- background: #282828;
- border: 0px;
- border-radius: 2px;
-}
-
-div.cell.text_cell .CodeMirror,
-div.cell.text_cell .CodeMirror pre {
- line-height: 170% !important;
-}
-
-div.cell.text_cell.rendered.selected {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #282828;
- background-color: #282828;
- border-radius: 0px;
-}
-
-div.cell.text_cell.unrendered.selected {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #282828;
- background-color: #282828;
- border-radius: 0px;
-}
-
-div.cell.text_cell.selected {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #282828;
- background-color: #282828;
- border-radius: 0px;
-}
-
-.edit_mode div.cell.text_cell.selected {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #282828;
- background-color: #282828;
- border-radius: 0px;
-}
-
-div.text_cell.unrendered,
-div.text_cell.unrendered.selected,
-div.edit_mode div.text_cell.unrendered {
- font-family: sans-serif;
- line-height: 170% !important;
- background: #282828;
- background-color: #282828;
- border-radius: 0px;
-}
-
-div.cell.text_cell .prompt {
- border-right: 0;
- min-width: 11.5ex !important;
- width: 11.5ex !important;
-}
-
-div.cell.text_cell.rendered .prompt {
- font-family: monospace, monospace;
- font-size: 9.5pt !important;
- font-weight: normal;
- color: #75715e !important;
- text-align: right !important;
- min-width: 14.5ex !important;
- width: 14.5ex !important;
- background-color: #282828;
- border-right: 2px solid #49483e;
- border-left: 4px solid #282828;
-}
-
-div.cell.text_cell.unrendered .prompt {
- font-family: monospace, monospace;
- font-size: 9.5pt !important;
- font-weight: normal;
- color: #75715e !important;
- text-align: right !important;
- min-width: 14.5ex !important;
- width: 14.5ex !important;
- border-right: 2px solid #49483e;
- border-left: 4px solid #282828;
- background-color: #282828;
-}
-
-div.cell.text_cell.rendered .prompt {
- border-right: 2px solid #49483e;
-}
-
-div.cell.text_cell.rendered.selected .prompt {
- top: 0;
- border-left: 4px solid #57564b;
- border-right: 2px solid #49483e;
-}
-
-div.text_cell.unrendered.selected .prompt,
-div.text_cell.rendered.selected .prompt {
- top: 0;
- background: #282828;
- border-left: 4px solid #33322b;
- border-right: 2px solid #49483e;
-}
-
-div.rendered_html code {
- font-family: monospace, monospace;
- font-size: 11pt;
- padding-top: 3px;
- padding-left: 2px;
- color: #f8f8f0;
- background: #282828;
- background-color: #282828;
-}
-
-pre,
-code,
-kbd,
-samp {
- white-space: pre-wrap;
-}
-
-.well code,
-code {
- font-family: monospace, monospace;
- font-size: 11pt !important;
- line-height: 170% !important;
- color: #f8f8f0;
- background: #282828;
- background-color: #282828;
- border-color: #282828;
-}
-
-kbd {
- padding: 1px;
- font-size: 11pt;
- font-weight: 800;
- color: #f8f8f0;
- background-color: transparent !important;
- border: 0;
- box-shadow: none;
-}
-
-pre {
- display: block;
- padding: 8.5px;
- margin: 0 0 9px;
- font-size: 12pt;
- line-height: 1.42857143;
- color: #f8f8f0;
- background-color: #282828;
- border: 1px solid #282828;
- border-radius: 2px;
-}
-
-div.rendered_html {
- color: #f8f8f0;
-}
-
-.rendered_html * + ul {
- margin-top: 0.4em;
- margin-bottom: 0.3em;
-}
-
-.rendered_html * + p {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
-}
-
-div.rendered_html pre {
- font-family: monospace, monospace;
- font-size: 11pt !important;
- line-height: 170% !important;
- color: #f8f8f0 !important;
- background: #282828;
- background-color: #282828;
- max-width: 80%;
- border-radius: 0px;
- border-left: 3px solid #282828;
- max-width: 80%;
- border-radius: 0px;
- padding-left: 5px;
- margin-left: 6px;
-}
-
-div.text_cell_render pre,
-div.text_cell_render code {
- font-family: monospace, monospace;
- font-size: 11pt !important;
- line-height: 170% !important;
- color: #f8f8f0;
- background: #1e1e1e;
- background-color: #1e1e1e;
- max-width: 80%;
- border-radius: 0px;
- border-left: none;
-}
-
-div.text_cell_render pre {
- border-left: 3px solid #49483e !important;
- max-width: 80%;
- border-radius: 0px;
- padding-left: 5px;
- margin-left: 6px;
-}
-
-div.text_cell_render h1,
-div.rendered_html h1,
-div.text_cell_render h2,
-div.rendered_html h2,
-div.text_cell_render h3,
-div.rendered_html h3,
-div.text_cell_render h4,
-div.rendered_html h4,
-div.text_cell_render h5,
-div.rendered_html h5 {
- font-family: sans-serif;
- margin: 0.4em 0.2em 0.3em 0.2em !important;
-}
-
-.rendered_html h1:first-child,
-.rendered_html h2:first-child,
-.rendered_html h3:first-child,
-.rendered_html h4:first-child,
-.rendered_html h5:first-child,
-.rendered_html h6:first-child {
- margin-top: 0.2em !important;
- margin-bottom: 0.2em !important;
-}
-
-.rendered_html h1,
-.text_cell_render h1 {
- color: #a6e22e !important;
- font-size: 200%;
- text-align: left;
- font-style: normal;
- font-weight: normal;
-}
-
-.rendered_html h2,
-.text_cell_render h2 {
- color: #a6e22e !important;
- font-size: 170%;
- font-style: normal;
- font-weight: normal;
-}
-
-.rendered_html h3,
-.text_cell_render h3 {
- color: #a6e22e !important;
- font-size: 140%;
- font-style: normal;
- font-weight: normal;
-}
-
-.rendered_html h4,
-.text_cell_render h4 {
- color: #a6e22e !important;
- font-size: 110%;
- font-style: normal;
- font-weight: normal;
-}
-
-.rendered_html h5,
-.text_cell_render h5 {
- color: #a6e22e !important;
- font-size: 100%;
- font-style: normal;
- font-weight: normal;
-}
-
-hr {
- margin-top: 8px;
- margin-bottom: 10px;
- border: 0;
- border-top: 1px solid #a6e22e;
-}
-
-.rendered_html hr {
- color: #a6e22e;
- background-color: #a6e22e;
- margin-right: 2em;
-}
-
-#complete > select > option:hover {
- background: rgba(93, 92, 82, 0.25);
- background-color: rgba(93, 92, 82, 0.25);
-}
-
-div#_vivaldi-spatnav-focus-indicator._vivaldi-spatnav-focus-indicator {
- position: absolute;
- z-index: 9999999999;
- top: 0px;
- left: 0px;
- box-shadow: none;
- pointer-events: none;
- border-radius: 2px;
-}
-
-.rendered_html tr,
-.rendered_html th,
-.rendered_html td {
- text-align: left;
- vertical-align: middle;
- padding: 0.42em 0.47em;
- line-height: normal;
- white-space: normal;
- max-width: none;
- border: none;
-}
-
-.rendered_html td {
- font-family: sans-serif !important;
- font-size: 9.3pt;
-}
-
-.rendered_html table {
- font-family: sans-serif !important;
- margin-left: 8px;
- margin-right: auto;
- border: none;
- border-collapse: collapse;
- border-spacing: 0;
- color: #cccccc;
- table-layout: fixed;
-}
-
-.rendered_html thead {
- font-family: sans-serif !important;
- font-size: 10.3pt !important;
- background: #1e1e1e;
- color: #cccccc;
- border-bottom: 1px solid #1e1e1e;
- vertical-align: bottom;
-}
-
-.rendered_html tbody tr:nth-child(odd) {
- background: #282828;
-}
-
-.rendered_html tbody tr {
- background: #202020;
-}
-
-.rendered_html tbody tr:hover:nth-child(odd) {
- background: #252525;
-}
-
-.rendered_html tbody tr:hover {
- background: #1e1e1e;
-}
-
-.rendered_html * + table {
- margin-top: 0.05em;
-}
-
-div.widget-area {
- background-color: #232323;
- background: #232323;
- color: #cccccc;
-}
-
-div.widget-area a {
- font-family: sans-serif;
- font-size: 12pt;
- font-weight: normal;
- font-style: normal;
- color: #f8f8f0;
- text-shadow: none !important;
-}
-
-div.widget-area a:hover,
-div.widget-area a:focus {
- font-family: sans-serif;
- font-size: 12pt;
- font-weight: normal;
- font-style: normal;
- color: #f8f8f0;
- background: rgba(93, 92, 82, 0.25);
- background-color: rgba(93, 92, 82, 0.25);
- border-color: transparent;
- background-image: none;
- text-shadow: none !important;
-}
-
-div.widget_item.btn-group > button.btn.btn-default.widget-combo-btn,
-div.widget_item.btn-group > button.btn.btn-default.widget-combo-btn:hover {
- background: #2c2c2c;
- background-color: #2c2c2c;
- border: 2px solid #2c2c2c !important;
- font-size: inherit;
- z-index: 0;
-}
-
-div.jupyter-widgets.widget-hprogress.widget-hbox {
- display: inline-table !important;
- width: 38% !important;
- margin-left: 10px;
-}
-
-div.jupyter-widgets.widget-hprogress.widget-hbox .widget-label,
-div.widget-hbox .widget-label,
-.widget-hbox .widget-label,
-.widget-inline-hbox .widget-label,
-div.widget-label {
- text-align: -webkit-auto !important;
- margin-left: 15px !important;
- max-width: 240px !important;
- min-width: 100px !important;
- vertical-align: text-top !important;
- color: #cccccc !important;
- font-size: 14px !important;
-}
-
-.widget-hprogress .progress {
- flex-grow: 1;
- height: 20px;
- margin-top: auto;
- margin-left: 12px;
- margin-bottom: auto;
- width: 300px;
-}
-
-.progress {
- overflow: hidden;
- height: 22px;
- margin-bottom: 10px;
- padding-left: 10px;
- background-color: #49483e !important;
- border-radius: 2px;
- -webkit-box-shadow: none;
- box-shadow: none;
- z-index: 10;
-}
-
-.progress-bar-danger {
- background-color: #e74c3c !important;
-}
-
-.progress-bar-info {
- background-color: #3498db !important;
-}
-
-.progress-bar-warning {
- background-color: #ff914d !important;
-}
-
-.progress-bar-success {
- background-color: #83a83b !important;
-}
-
-.widget-select select {
- margin-left: 12px;
-}
-
-.rendered_html :link {
- font-family: sans-serif;
- font-size: 100%;
- color: #a6e22e;
- text-decoration: underline;
-}
-
-.rendered_html :visited,
-.rendered_html :visited:active,
-.rendered_html :visited:focus {
- color: #acdf45;
-}
-
-.rendered_html :visited:hover,
-.rendered_html :link:hover {
- font-family: sans-serif;
- font-size: 100%;
- color: #97dc0b;
-}
-
-div.cell.text_cell a.anchor-link:link {
- font-size: inherit;
- text-decoration: none;
- padding: 0px 20px;
- visibility: none;
- color: rgba(0, 0, 0, 0.32);
-}
-
-div.cell.text_cell a.anchor-link:link:hover {
- font-size: inherit;
- color: #a6e22e;
-}
-
-.navbar-text {
- margin-top: 4px;
- margin-bottom: 0px;
-}
-
-#clusters > a {
- color: #a6e22e;
- text-decoration: underline;
- cursor: auto;
-}
-
-#clusters > a:hover {
- color: #ae81ff;
- text-decoration: underline;
- cursor: auto;
-}
-
-#nbextensions-configurator-container > div.row.container-fluid.nbext-selector > h3 {
- font-size: 17px;
- margin-top: 5px;
- margin-bottom: 8px;
- height: 24px;
- padding: 4px 0 4px 0;
-}
-
-div#nbextensions-configurator-container.container,
-#nbextensions-configurator-container.container {
- width: 100%;
- margin-right: auto;
- margin-left: auto;
-}
-
-div.nbext-selector > nav > .nav > li > a {
- font-family: sans-serif;
- font-size: 10.5pt;
- padding: 2px 5px;
-}
-
-div.nbext-selector > nav > .nav > li > a:hover {
- background: transparent;
-}
-
-div.nbext-selector > nav > .nav > li:hover {
- background-color: rgba(93, 92, 82, 0.25) !important;
- background: rgba(93, 92, 82, 0.25) !important;
-}
-
-div.nbext-selector > nav > .nav > li.active:hover {
- background: transparent !important;
- background-color: transparent !important;
-}
-
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:active,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
- color: #f8f8f2;
- background-color: rgba(93, 92, 82, 0.25) !important;
- background: rgba(93, 92, 82, 0.25) !important;
- -webkit-backface-visibility: hidden;
- -webkit-font-smoothing: subpixel-antialiased !important;
-}
-
-div.nbext-readme > .nbext-readme-contents > .rendered_html {
- font-family: sans-serif;
- font-size: 11.5pt;
- line-height: 145%;
- padding: 1em 1em;
- color: #f8f8f0;
- background-color: #282828;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-
-.nbext-icon,
-.nbext-desc,
-.nbext-compat-div,
-.nbext-enable-btns,
-.nbext-params {
- margin-bottom: 8px;
- font-size: 11.5pt;
-}
-
-div.nbext-readme > .nbext-readme-contents {
- padding: 0;
- overflow-y: hidden;
-}
-
-div.nbext-readme > .nbext-readme-contents:not(:empty) {
- margin-top: 0.5em;
- margin-bottom: 2em;
- border: none;
- border-top-color: rgba(148, 204, 114, 0.2);
-}
-
-.nbext-showhide-incompat {
- padding-bottom: 0.5em;
- color: #888888;
- font-size: 10.5pt;
-}
-
-.nbext-filter-menu.dropdown-menu > li > a:hover,
-.nbext-filter-menu.dropdown-menu > li > a:focus,
-.nbext-filter-menu.dropdown-menu > li > a.ui-state-focus {
- color: #f8f8f0 !important;
- background-color: rgba(93, 92, 82, 0.25) !important;
- background: rgba(93, 92, 82, 0.25) !important;
- border-color: rgba(93, 92, 82, 0.25) !important;
-}
-
-.nbext-filter-input-wrap > .nbext-filter-input-subwrap,
-.nbext-filter-input-wrap > .nbext-filter-input-subwrap > input {
- border: none;
- outline: none;
- background-color: transparent;
- padding: 0;
- vertical-align: middle;
- margin-top: -2px;
-}
-
-span.rendered_html code {
- background-color: transparent;
- color: #f8f8f0;
-}
-
-#nbextensions-configurator-container > div.row.container-fluid.nbext-selector {
- padding-left: 0px;
- padding-right: 0px;
-}
-
-.nbext-filter-menu {
- max-height: 55vh !important;
- overflow-y: auto;
- outline: none;
- border: none;
-}
-
-.nbext-filter-menu:hover {
- border: none;
-}
-
-.alert-warning {
- background-color: #232323;
- border-color: #232323;
- color: #f8f8f0;
-}
-
-.notification_widget.danger {
- color: #ffffff;
- background-color: #e74c3c;
- border-color: #e74c3c;
- padding-right: 5px;
-}
-
-#nbextensions-configurator-container > div.nbext-buttons.tree-buttons.no-padding.pull-right > span > button {
- border: none !important;
-}
-
-button#refresh_running_list {
- border: none !important;
-}
-
-mark,
-.mark {
- background-color: #282828;
- color: #f8f8f0;
- padding: 0.15em;
-}
-
-a.text-warning,
-a.text-warning:hover {
- color: #75715e;
-}
-
-a.text-warning.bg-warning {
- background-color: #1e1e1e;
-}
-
-span.bg-success.text-success {
- background-color: transparent;
- color: #a6e22e;
-}
-
-span.bg-danger.text-danger {
- background-color: #1e1e1e;
- color: #f92672;
-}
-
-.has-success .input-group-addon {
- color: #a6e22e;
- border-color: transparent;
- background: inherit;
- background-color: rgba(83, 180, 115, 0.1);
-}
-
-.has-success .form-control {
- border-color: #a6e22e;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
-}
-
-.has-error .input-group-addon {
- color: #f92672;
- border-color: transparent;
- background: inherit;
- background-color: rgba(192, 57, 67, 0.1);
-}
-
-.has-error .form-control {
- border-color: #f92672;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
-}
-
-.kse-input-group-pretty > kbd {
- font-family: monospace, monospace;
- color: #f8f8f0;
- font-weight: normal;
- background: transparent;
-}
-
-.kse-input-group-pretty > kbd {
- font-family: monospace, monospace;
- color: #f8f8f0;
- font-weight: normal;
- background: transparent;
-}
-
-div.nbext-enable-btns .btn[disabled],
-div.nbext-enable-btns .btn[disabled]:hover,
-.btn-default.disabled,
-.btn-default[disabled] {
- background: #2c2c2c;
- background-color: #2c2c2c;
- color: #f3f3e6;
-}
-
-label#Keyword-Filter {
- display: none;
-}
-
-.input-group .nbext-list-btn-add,
-.input-group-btn:last-child > .btn-group > .btn {
- background: #2f2f2f;
- background-color: #2f2f2f;
- border-color: #2f2f2f;
- border: 2px solid #2f2f2f;
-}
-
-.input-group .nbext-list-btn-add:hover,
-.input-group-btn:last-child > .btn-group > .btn:hover {
- background: #2a2a2a;
- background-color: #2a2a2a;
- border-color: #2a2a2a;
- border: 2px solid #2a2a2a;
-}
-
-#notebook-container
- > div.cell.code_cell.rendered.selected
- > div.widget-area
- > div.widget-subarea
- > div
- > div.widget_item.btn-group
- > button.btn.btn-default.dropdown-toggle.widget-combo-carrot-btn {
- background: #2f2f2f;
- background-color: #2f2f2f;
- border-color: #2f2f2f;
-}
-
-#notebook-container
- > div.cell.code_cell.rendered.selected
- > div.widget-area
- > div.widget-subarea
- > div
- > div.widget_item.btn-group
- > button.btn.btn-default.dropdown-toggle.widget-combo-carrot-btn:hover {
- background: #2a2a2a;
- background-color: #2a2a2a;
- border-color: #2a2a2a;
-}
-
-.ui-widget-content {
- background: #2f2f2f;
- background-color: #2f2f2f;
- border: 2px solid #2f2f2f;
- color: #f8f8f0;
-}
-
-div.collapsible_headings_toggle {
- color: rgba(93, 92, 82, 0.5) !important;
-}
-
-div.collapsible_headings_toggle:hover {
- color: #a6e22e !important;
-}
-
-.collapsible_headings_toggle .h1,
-.collapsible_headings_toggle .h2,
-.collapsible_headings_toggle .h3,
-.collapsible_headings_toggle .h4,
-.collapsible_headings_toggle .h5,
-.collapsible_headings_toggle .h6 {
- margin: 0.3em 0.4em 0em 0em !important;
- line-height: 1.2 !important;
-}
-
-div.collapsible_headings_toggle .fa-caret-down:before,
-div.collapsible_headings_toggle .fa-caret-right:before {
- font-size: xx-large;
- transition: transform 1000ms;
- transform: none !important;
-}
-
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h1:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h2:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h3:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h4:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h5:after,
-.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h6:after {
- position: absolute;
- right: 0;
- bottom: 20% !important;
- content: "[\002026]";
- color: rgba(93, 92, 82, 0.5) !important;
- padding: 0.5em 0em 0em 0em !important;
-}
-
-.collapsible_headings_ellipsis .rendered_html h1,
-.collapsible_headings_ellipsis .rendered_html h2,
-.collapsible_headings_ellipsis .rendered_html h3,
-.collapsible_headings_ellipsis .rendered_html h4,
-.collapsible_headings_ellipsis .rendered_html h5,
-.collapsible_headings_ellipsis .rendered_html h6,
-.collapsible_headings_toggle .fa {
- transition: transform 1000ms !important;
- -webkit-transform: inherit !important;
- -moz-transform: inherit !important;
- -ms-transform: inherit !important;
- -o-transform: inherit !important;
- transform: inherit !important;
- padding-right: 0px !important;
-}
-
-#toc-wrapper {
- z-index: 90;
- position: fixed !important;
- display: flex;
- flex-direction: column;
- overflow: hidden;
- padding: 10px;
- border-style: solid;
- border-width: thin;
- border-right-width: medium !important;
- background-color: #1e1e1e !important;
-}
-
-#toc-wrapper.ui-draggable.ui-resizable.sidebar-wrapper {
- border-color: rgba(93, 92, 82, 0.25) !important;
-}
-
-#toc a,
-#navigate_menu a,
-.toc {
- color: #f8f8f0 !important;
- font-size: 11pt !important;
-}
-
-#toc li > span:hover {
- background-color: rgba(93, 92, 82, 0.25) !important;
-}
-
-#toc a:hover,
-#navigate_menu a:hover,
-.toc {
- color: #f8f8f2 !important;
- font-size: 11pt !important;
-}
-
-#toc-wrapper .toc-item-num {
- color: #a6e22e !important;
- font-size: 11pt !important;
-}
-
-input.raw_input {
- font-family: monospace, monospace;
- font-size: 11pt !important;
- color: #f8f8f0;
- background-color: #282828;
- border-color: #252525;
- background: #252525;
- width: auto;
- vertical-align: baseline;
- padding: 0em 0.25em;
- margin: 0em 0.25em;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-audio,
-video {
- display: inline;
- vertical-align: middle;
- align-content: center;
- margin-left: 20%;
-}
-
-.cmd-palette .modal-body {
- padding: 0px;
- margin: 0px;
-}
-
-.cmd-palette form {
- background: #293547;
- background-color: #293547;
-}
-
-.typeahead-field input:last-child,
-.typeahead-hint {
- background: #293547;
- background-color: #293547;
- z-index: 1;
-}
-
-.typeahead-field input {
- font-family: sans-serif;
- color: #f8f8f0;
- border: none;
- font-size: 28pt;
- display: inline-block;
- line-height: inherit;
- padding: 3px 10px;
- height: 70px;
-}
-
-.typeahead-select {
- background-color: #293547;
-}
-
-body > div.modal.cmd-palette.typeahead-field {
- display: table;
- border-collapse: separate;
- background-color: #2b3850;
-}
-
-.typeahead-container button {
- font-family: sans-serif;
- font-size: 28pt;
- background-color: #2f2f2f;
- border: none;
- display: inline-block;
- line-height: inherit;
- padding: 3px 10px;
- height: 70px;
-}
-
-.typeahead-search-icon {
- min-width: 40px;
- min-height: 55px;
- display: block;
- vertical-align: middle;
- text-align: center;
-}
-
-.typeahead-container button:focus,
-.typeahead-container button:hover {
- color: #f8f8f0;
- background-color: #2a2a2a;
- border-color: #2a2a2a;
-}
-
-.typeahead-list > li.typeahead-group.active > a,
-.typeahead-list > li.typeahead-group > a,
-.typeahead-list > li.typeahead-group > a:focus,
-.typeahead-list > li.typeahead-group > a:hover {
- display: none;
-}
-
-.typeahead-dropdown > li > a,
-.typeahead-list > li > a {
- color: #f8f8f0;
- text-decoration: none;
-}
-
-.typeahead-dropdown,
-.typeahead-list {
- font-family: sans-serif;
- font-size: 13pt;
- color: #f8f8f0;
- background-color: #202937;
- border: none;
- background-clip: padding-box;
- margin-top: 0px;
- padding: 3px 2px 3px 0px;
- line-height: 1.7;
-}
-
-.typeahead-dropdown > li.active > a,
-.typeahead-dropdown > li > a:focus,
-.typeahead-dropdown > li > a:hover,
-.typeahead-list > li.active > a,
-.typeahead-list > li > a:focus,
-.typeahead-list > li > a:hover {
- color: #f8f8f0;
- background-color: #2b3850;
- border-color: #2b3850;
-}
-
-.command-shortcut:before {
- content: "(command)";
- padding-right: 3px;
- color: #75715e;
-}
-
-.edit-shortcut:before {
- content: "(edit)";
- padding-right: 3px;
- color: #75715e;
-}
-
-ul.typeahead-list i {
- margin-left: 1px;
- width: 18px;
- margin-right: 10px;
-}
-
-ul.typeahead-list {
- max-height: 50vh;
- overflow: auto;
-}
-
-.typeahead-list > li {
- position: relative;
- border: none;
-}
-
-div.input.typeahead-hint,
-input.typeahead-hint,
-body > div.modal.cmd-palette.in > div > div > div > form > div > div.typeahead-field > span.typeahead-query > input.typeahead-hint {
- color: #75715e !important;
- background-color: transparent;
- padding: 3px 10px;
-}
-
-.typeahead-dropdown > li > a,
-.typeahead-list > li > a {
- display: block;
- padding: 5px;
- clear: both;
- font-weight: 400;
- line-height: 1.7;
- border: 1px solid #202937;
- border-bottom-color: rgba(93, 92, 82, 0.5);
-}
-
-body > div.modal.cmd-palette.in > div {
- min-width: 750px;
- margin: 150px auto;
-}
-
-.typeahead-container strong {
- font-weight: bolder;
- color: #a6e22e;
-}
-
-#find-and-replace #replace-preview .match,
-#find-and-replace #replace-preview .insert {
- color: #ffffff;
- background-color: #57564b;
- border-color: #57564b;
- border-style: solid;
- border-width: 1px;
- border-radius: 0px;
-}
-
-#find-and-replace #replace-preview .replace .match {
- background-color: #f92672;
- border-color: #f92672;
- border-radius: 0px;
-}
-
-#find-and-replace #replace-preview .replace .insert {
- background-color: #a6e22e;
- border-color: #a6e22e;
- border-radius: 0px;
-}
-
-.jupyter-dashboard-menu-item.selected::before {
- font-family: "FontAwesome" !important;
- content: "\f00c" !important;
- position: absolute !important;
- color: #a6e22e !important;
- left: 0px !important;
- top: 13px !important;
- font-size: 12px !important;
-}
-
-.shortcut_key,
-span.shortcut_key {
- display: inline-block;
- width: 16ex;
- text-align: right;
- font-family: monospace;
-}
-
-.jupyter-keybindings {
- padding: 1px;
- line-height: 24px;
- border-bottom: 1px solid rgba(93, 92, 82, 0.25);
-}
-
-.jupyter-keybindings i {
- background: #282828;
- font-size: small;
- padding: 5px;
- margin-left: 7px;
-}
-
-div#short-key-bindings-intro.well,
-.well {
- background-color: #2f2f2f;
- border: 1px solid #2f2f2f;
- color: #f8f8f0;
- border-radius: 2px;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-#texteditor-backdrop {
- background: #1e1e1e;
- background-color: #1e1e1e;
-}
-
-#texteditor-backdrop #texteditor-container .CodeMirror-gutter,
-#texteditor-backdrop #texteditor-container .CodeMirror-gutters {
- background: #49483e;
- background-color: #49483e;
- color: #75715e;
-}
-
-.edit_app #menubar .navbar {
- margin-bottom: 0px;
-}
-
-#texteditor-backdrop #texteditor-container {
- padding: 0px;
- background-color: #282828;
- box-shadow: none;
-}
-
-.terminal-app {
- background: #1e1e1e;
-}
-
-.terminal-app > #header {
- background: #1e1e1e;
-}
-
-.terminal-app .terminal {
- font-family: monospace, monospace;
- font-size: 11pt;
- line-height: 170%;
- color: #f8f8f0;
- background: #282828;
- padding: 0.4em;
- border-radius: 2px;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-.terminal .xterm-viewport {
- background-color: #282828;
- color: #f8f8f0;
- overflow-y: auto;
-}
-
-.terminal .xterm-color-0 {
- color: #a6e22e;
-}
-
-.terminal .xterm-color-1 {
- color: #a6e22e;
-}
-
-.terminal .xterm-color-2 {
- color: #f92672;
-}
-
-.terminal .xterm-color-3 {
- color: #a6e22e;
-}
-
-.terminal .xterm-color-4 {
- color: #ae81ff;
-}
-
-.terminal .xterm-color-5 {
- color: #e6db74;
-}
-
-.terminal .xterm-color-6 {
- color: #a6e22e;
-}
-
-.terminal .xterm-color-7 {
- color: #a6e22e;
-}
-
-.terminal .xterm-color-8 {
- color: #a6e22e;
-}
-
-.terminal .xterm-color-9 {
- color: #e6db74;
-}
-
-.terminal .xterm-color-10 {
- color: #a6e22e;
-}
-
-.terminal .xterm-color-14 {
- color: #a6e22e;
-}
-
-.terminal .xterm-bg-color-15 {
- background-color: #282828;
-}
-
-.terminal:not(.xterm-cursor-style-underline):not(.xterm-cursor-style-bar) .terminal-cursor {
- background-color: #a6e22e;
- color: #282828;
-}
-
-.terminal:not(.focus) .terminal-cursor {
- outline: 1px solid #a6e22e;
- outline-offset: -1px;
-}
-
-.celltoolbar {
- font-size: 100%;
- padding-top: 3px;
- border-color: transparent;
- border-bottom: thin solid rgba(148, 204, 114, 0.2);
- background: transparent;
-}
-
-.cell-tag,
-.tags-input input,
-.tags-input button {
- color: #f8f8f0;
- background-color: #1e1e1e;
- background-image: none;
- border: 1px solid #f8f8f0;
- border-radius: 1px;
- box-shadow: none;
- width: inherit;
- font-size: inherit;
- height: 22px;
- line-height: 22px;
-}
-
-#notebook-container > div.cell.code_cell.rendered.selected > div.input > div.inner_cell > div.ctb_hideshow.ctb_show > div > div > button,
-#notebook-container > div.input > div.inner_cell > div.ctb_hideshow.ctb_show > div > div > button {
- font-size: 10pt;
- color: #f8f8f0;
- background-color: #1e1e1e;
- background-image: none;
- border: 1px solid #f8f8f0;
- border-radius: 1px;
- box-shadow: none;
- width: inherit;
- font-size: inherit;
- height: 22px;
- line-height: 22px;
-}
-
-div#pager #pager-contents {
- background: #1e1e1e !important;
- background-color: #1e1e1e !important;
-}
-
-div#pager pre {
- color: #f8f8f0 !important;
- background: #282828 !important;
- background-color: #282828 !important;
- padding: 0.4em;
-}
-
-div#pager .ui-resizable-handle {
- top: 0px;
- height: 8px;
- background: #a6e22e !important;
- border-top: 1px solid #a6e22e;
- border-bottom: 1px solid #a6e22e;
-}
-
-div.CodeMirror,
-div.CodeMirror pre {
- font-family: monospace, monospace;
- font-size: 11pt;
- line-height: 170%;
- color: #f8f8f0;
-}
-
-div.CodeMirror-lines {
- padding-bottom: 0.9em;
- padding-left: 0.5em;
- padding-right: 1.5em;
- padding-top: 0.7em;
-}
-
-span.ansiblack,
-.ansi-black-fg {
- color: #282828;
-}
-
-span.ansiblue,
-.ansi-blue-fg,
-.ansi-blue-intense-fg {
- color: #66d9ef;
-}
-
-span.ansigray,
-.ansi-gray-fg,
-.ansi-gray-intense-fg {
- color: #888888;
-}
-
-span.ansigreen,
-.ansi-green-fg {
- color: #a6e22e;
-}
-
-.ansi-green-intense-fg {
- color: #888888;
-}
-
-span.ansipurple,
-.ansi-purple-fg,
-.ansi-purple-intense-fg {
- color: #ae81ff;
-}
-
-span.ansicyan,
-.ansi-cyan-fg,
-.ansi-cyan-intense-fg {
- color: #ae81ff;
-}
-
-span.ansiyellow,
-.ansi-yellow-fg,
-.ansi-yellow-intense-fg {
- color: #e6db74;
-}
-
-span.ansired,
-.ansi-red-fg,
-.ansi-red-intense-fg {
- color: #f92672;
-}
-
-div.output-stderr {
- background-color: #f92672;
-}
-
-div.output-stderr pre {
- color: #f8f8f2;
-}
-
-div.js-error {
- color: #f92672;
-}
-
-.ipython_tooltip {
- font-family: monospace, monospace;
- font-size: 11pt;
- line-height: 170%;
- border: 2px solid #141414;
- background: #282828;
- background-color: #282828;
- border-radius: 2px;
- overflow-x: visible;
- overflow-y: visible;
- box-shadow: none;
- position: absolute;
- z-index: 1000;
-}
-
-.ipython_tooltip .tooltiptext pre {
- font-family: monospace, monospace;
- font-size: 11pt;
- line-height: 170%;
- background: #282828;
- background-color: #282828;
- color: #f8f8f0;
- overflow-x: visible;
- overflow-y: visible;
- max-width: 900px;
-}
-
-div#tooltip.ipython_tooltip {
- overflow-x: wrap;
- overflow-y: visible;
- max-width: 800px;
-}
-
-div.tooltiptext.bigtooltip {
- overflow-x: visible;
- overflow-y: scroll;
- height: 400px;
- max-width: 800px;
-}
-
-.cm-s-ipython.CodeMirror {
- font-family: monospace, monospace;
- font-size: 11pt;
- background: #282828;
- color: #f8f8f0;
- border-radius: 2px;
- font-style: normal;
- font-weight: normal;
-}
-
-.cm-s-ipython div.CodeMirror-selected {
- background: #49483e;
-}
-
-.CodeMirror-gutters {
- border: none;
- border-right: 1px solid #49483e !important;
- background-color: #49483e !important;
- background: #49483e !important;
- border-radius: 0px;
- white-space: nowrap;
-}
-
-.cm-s-ipython .CodeMirror-gutters {
- background: #49483e;
- border: none;
- border-radius: 0px;
- width: 36px;
-}
-
-.cm-s-ipython .CodeMirror-linenumber {
- color: #75715e;
-}
-
-.CodeMirror-sizer {
- margin-left: 40px;
-}
-
-.CodeMirror-linenumber,
-div.CodeMirror-linenumber,
-.CodeMirror-gutter.CodeMirror-linenumberdiv.CodeMirror-gutter.CodeMirror-linenumber {
- padding-right: 1px;
- margin-left: 0px;
- margin: 0px;
- width: 26px !important;
- padding: 0px;
- text-align: right;
-}
-
-.CodeMirror-linenumber {
- color: #75715e;
-}
-
-.cm-s-ipython .CodeMirror-cursor {
- border-left: 2px solid #0095ff !important;
-}
-
-.cm-s-ipython span.cm-comment {
- color: #75715e;
- font-style: italic;
-}
-
-.cm-s-ipython span.cm-atom {
- color: #ae81ff;
-}
-
-.cm-s-ipython span.cm-number {
- color: #ae81ff;
-}
-
-.cm-s-ipython span.cm-property {
- color: #f8f8f0;
-}
-
-.cm-s-ipython span.cm-attribute {
- color: #f8f8f0;
-}
-
-.cm-s-ipython span.cm-keyword {
- color: #f92672;
- font-weight: normal;
-}
-
-.cm-s-ipython span.cm-string {
- color: #e6db74;
-}
-
-.cm-s-ipython span.cm-meta {
- color: #fd971f;
-}
-
-.cm-s-ipython span.cm-operator {
- color: #a6e22e;
-}
-
-.cm-s-ipython span.cm-builtin {
- color: #a6e22e;
-}
-
-.cm-s-ipython span.cm-variable {
- color: #f8f8f0;
-}
-
-.cm-s-ipython span.cm-variable-2 {
- color: #a6e22e;
-}
-
-.cm-s-ipython span.cm-variable-3 {
- color: #fd971f;
-}
-
-.cm-s-ipython span.cm-def {
- color: #a6e22e;
- font-weight: normal;
-}
-
-.cm-s-ipython span.cm-error {
- background: rgba(249, 38, 114, 0.4);
-}
-
-.cm-s-ipython span.cm-tag {
- color: #ae81ff;
-}
-
-.cm-s-ipython span.cm-link {
- color: #a6e22e;
-}
-
-.cm-s-ipython span.cm-storage {
- color: #ae81ff;
-}
-
-.cm-s-ipython span.cm-entity {
- color: #a6e22e;
-}
-
-.cm-s-ipython span.cm-quote {
- color: #e6db74;
-}
-
-div.CodeMirror span.CodeMirror-matchingbracket {
- color: #ffffff;
- font-weight: bold;
- background-color: #49483e;
-}
-
-div.CodeMirror span.CodeMirror-nonmatchingbracket {
- color: #ffffff;
- font-weight: bold;
- background: rgba(249, 38, 114, 0.4) !important;
-}
-
-.cm-header-1 {
- font-size: 215%;
-}
-
-.cm-header-2 {
- font-size: 180%;
-}
-
-.cm-header-3 {
- font-size: 150%;
-}
-
-.cm-header-4 {
- font-size: 120%;
-}
-
-.cm-header-5 {
- font-size: 100%;
-}
-
-.cm-s-default .cm-hr {
- color: #a6e22e;
-}
-
-div.cell.text_cell .cm-s-default .cm-header {
- font-family: sans-serif;
- font-weight: normal;
- color: #a6e22e !important;
- margin-top: 0.3em !important;
- margin-bottom: 0.3em !important;
-}
-
-div.cell.text_cell .cm-s-default span.cm-variable-2 {
- color: #f8f8f0 !important;
-}
-
-div.cell.text_cell .cm-s-default span.cm-variable-3 {
- color: #fd971f !important;
-}
-
-.cm-s-default span.cm-comment {
- color: #75715e !important;
-}
-
-.cm-s-default .cm-tag {
- color: #529b2f;
-}
-
-.cm-s-default .cm-builtin {
- color: #a6e22e;
-}
-
-.cm-s-default .cm-string {
- color: #e6db74;
-}
-
-.cm-s-default .cm-keyword {
- color: #f92672;
-}
-
-.cm-s-default .cm-number {
- color: #ae81ff;
-}
-
-.cm-s-default .cm-error {
- color: #ae81ff;
-}
-
-.cm-s-default .cm-link {
- color: #a6e22e;
-}
-
-.cm-s-default .cm-atom {
- color: #ae81ff;
-}
-
-.cm-s-default .cm-def {
- color: #a6e22e;
-}
-
-.CodeMirror-cursor {
- border-left: 2px solid #0095ff !important;
- border-right: none;
- width: 0;
-}
-
-.cm-s-default div.CodeMirror-selected {
- background: #49483e;
-}
-
-.cm-s-default .cm-selected {
- background: #49483e;
-}
-
-.MathJax_Display,
-.MathJax {
- border: 0 !important;
- font-size: 100% !important;
- text-align: center !important;
- margin: 0em !important;
- line-height: 2.25 !important;
-}
-
-.MathJax:focus,
-body :focus .MathJax {
- display: inline-block !important;
-}
-
-.MathJax:focus,
-body :focus .MathJax {
- display: inline-block !important;
-}
-
-.completions {
- position: absolute;
- z-index: 110;
- overflow: hidden;
- border: medium solid #49483e;
- box-shadow: none;
- line-height: 1;
-}
-
-.completions select {
- background: #282828;
- background-color: #282828;
- outline: none;
- border: none;
- padding: 0px;
- margin: 0px;
- margin-left: 2px;
- overflow: auto;
- font-family: monospace, monospace;
- font-size: 11pt;
- color: #f8f8f0;
- width: auto;
-}
-
-div#maintoolbar {
- display: none !important;
-}
-
-#header-container {
- display: none !important;
-}
+/* Derived from https://github.com/dunovank/jupyter-themes/blob/master/jupyterthemes/styles/compiled/monokai.css */
+div#notebook {
+ font-family: sans-serif;
+ font-size: 13pt;
+ line-height: 170%;
+ color: #f8f8f0;
+ -webkit-font-smoothing: antialiased !important;
+ padding-top: 25px !important;
+}
+
+body,
+div.body {
+ font-family: sans-serif;
+ font-size: 13pt;
+ color: #f8f8f0;
+ background-color: #1e1e1e;
+ background: #1e1e1e;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+body.notebook_app {
+ padding: 0;
+ background-color: #1e1e1e;
+ background: #1e1e1e;
+ padding-right: 0px !important;
+ overflow-y: hidden;
+}
+
+a {
+ font-family: sans-serif;
+ color: #f8f8f0;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+a:hover,
+a:focus {
+ color: #f8f8f0;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+div#maintoolbar {
+ position: absolute;
+ width: 90%;
+ margin-left: -10%;
+ padding-right: 8%;
+ float: left;
+ background: transparent !important;
+}
+
+#maintoolbar {
+ margin-bottom: -3px;
+ margin-top: 0px;
+ border: 0px;
+ min-height: 27px;
+ padding-top: 2px;
+ padding-bottom: 0px;
+}
+
+#maintoolbar .container {
+ width: 75%;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.list_header,
+div#notebook_list_header.row.list_header {
+ font-size: 14pt;
+ color: #f8f8f0;
+ background-color: transparent;
+ height: 35px;
+}
+
+i.fa.fa-folder {
+ display: inline-block;
+ font: normal normal normal 14px "FontAwesome";
+ font-family: "FontAwesome" !important;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ font-size: 18px;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+#running .panel-group .panel .panel-heading {
+ font-size: 14pt;
+ color: #f8f8f0;
+ padding: 8px 8px;
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+}
+
+#running .panel-group .panel .panel-heading a {
+ font-size: 14pt;
+ color: #f8f8f0;
+}
+
+#running .panel-group .panel .panel-heading a:focus,
+#running .panel-group .panel .panel-heading a:hover {
+ font-size: 14pt;
+ color: #f8f8f0;
+}
+
+#running .panel-group .panel .panel-body .list_container .list_item {
+ background: #232323;
+ background-color: #232323;
+ padding: 2px;
+ border-bottom: 2px solid rgba(93, 92, 82, 0.25);
+}
+
+#running .panel-group .panel .panel-body .list_container .list_item:hover {
+ background: #232323;
+ background-color: #232323;
+}
+
+#running .panel-group .panel .panel-body {
+ padding: 2px;
+}
+
+button#refresh_running_list {
+ border: none !important;
+}
+
+button#refresh_cluster_list {
+ border: none !important;
+}
+
+div.running_list_info.toolbar_info {
+ font-size: 15px;
+ padding: 4px 0 4px 0;
+ margin-top: 5px;
+ margin-bottom: 8px;
+ height: 24px;
+ line-height: 24px;
+ text-shadow: none;
+}
+
+.list_placeholder {
+ font-weight: normal;
+}
+
+#tree-selector {
+ padding: 0px;
+ border-color: transparent;
+}
+
+#project_name > ul > li > a > i.fa.fa-home {
+ color: #a6e22e;
+ font-size: 17pt;
+ display: inline-block;
+ position: static;
+ padding: 0px 0px;
+ font-weight: normal;
+ text-align: center;
+ vertical-align: text-top;
+}
+
+.fa-folder:before {
+ color: #ae81ff;
+}
+
+.fa-arrow-up:before {
+ font-size: 14px;
+}
+
+.fa-arrow-down:before {
+ font-size: 14px;
+}
+
+span#last-modified.btn.btn-xs.btn-default.sort-action:hover .fa,
+span#sort-name.btn.btn-xs.btn-default.sort-action:hover .fa {
+ color: #a6e22e;
+}
+
+.folder_icon:before {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f07b";
+ color: #ae81ff;
+}
+
+.notebook_icon:before {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f02d";
+ position: relative;
+ color: #a6e22e !important;
+ top: 0px;
+}
+
+.file_icon:before {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f15b";
+ position: relative;
+ top: 0px;
+ color: #888888 !important;
+}
+
+#project_name a {
+ display: inline-flex;
+ padding-left: 7px;
+ margin-left: -2px;
+ text-align: -webkit-auto;
+ vertical-align: baseline;
+ font-size: 18px;
+}
+
+div#notebook_toolbar div.dynamic-instructions {
+ font-family: sans-serif;
+ font-size: 17px;
+ color: #75715e;
+}
+
+span#login_widget > .button,
+#logout {
+ font-family: "Proxima Nova", sans-serif;
+ color: #f8f8f0;
+ background: transparent;
+ background-color: transparent;
+ border: 2px solid #2f2f2f;
+ font-weight: normal;
+ box-shadow: none;
+ text-shadow: none;
+ border-radius: 3px;
+ margin-right: 10px;
+ padding: 2px 7px;
+}
+
+span#login_widget > .button:hover,
+#logout:hover {
+ color: #a6e22e;
+ background-color: transparent;
+ background: transparent;
+ border: 2px solid #a6e22e;
+ background-image: none;
+ box-shadow: none !important;
+ border-radius: 3px;
+}
+
+span#login_widget > .button:focus,
+#logout:focus,
+span#login_widget > .button.focus,
+#logout.focus,
+span#login_widget > .button:active,
+#logout:active,
+span#login_widget > .button.active,
+#logout.active,
+.open > .dropdown-togglespan#login_widget > .button,
+.open > .dropdown-toggle#logout {
+ color: #f8f8f2;
+ background-color: #f8f8f0;
+ background: #f8f8f0;
+ border-color: #f8f8f0;
+ background-image: none;
+ box-shadow: none !important;
+ border-radius: 2px;
+}
+
+body > #header #header-container {
+ padding-bottom: 0px;
+ padding-top: 4px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+}
+
+body > #header {
+ background: #1e1e1e;
+ background-color: #1e1e1e;
+ position: relative;
+ z-index: 100;
+}
+
+.list_container {
+ font-size: 13pt;
+ color: #f8f8f0;
+ border: none;
+ text-shadow: none !important;
+}
+
+.list_container > div {
+ border-bottom: 1px solid rgba(93, 92, 82, 0.25);
+ font-size: 13pt;
+}
+
+.list_header > div,
+.list_item > div {
+ padding-top: 6px;
+ padding-bottom: 2px;
+ padding-left: 0px;
+}
+
+.list_header > div .item_link,
+.list_item > div .item_link {
+ margin-left: -1px;
+ vertical-align: middle;
+ line-height: 22px;
+ font-size: 13pt;
+}
+
+.item_icon {
+ color: #ae81ff;
+ font-size: 13pt;
+ vertical-align: middle;
+}
+
+.list_item input:not([type="checkbox"]) {
+ padding-right: 0px;
+ height: 1.75em;
+ width: 25%;
+ margin: 0px 0 0;
+ margin-top: 0px;
+}
+
+.list_header > div .item_link,
+.list_item > div .item_link {
+ margin-left: -1px;
+ vertical-align: middle;
+ line-height: 1.5em;
+ font-size: 12pt;
+ display: inline-table;
+ position: static;
+}
+
+#button-select-all {
+ height: 34px;
+ min-width: 55px;
+ z-index: 0;
+ border: none !important;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ margin-bottom: 0px;
+ margin-top: 0px;
+ left: -3px;
+ border-radius: 0px !important;
+}
+
+#button-select-all:focus,
+#button-select-all:active:focus,
+#button-select-all.active:focus,
+#button-select-all.focus,
+#button-select-all:active.focus,
+#button-select-all.active.focus {
+ background-color: #2f2f2f !important;
+ background: #2f2f2f !important;
+}
+
+button#tree-selector-btn {
+ height: 34px;
+ font-size: 12pt;
+ border: none;
+ left: 0px;
+ border-radius: 0px !important;
+}
+
+input#select-all.pull-left.tree-selector {
+ margin-left: 7px;
+ margin-right: 2px;
+ margin-top: 2px;
+ top: 4px;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ margin-top: 1px;
+ line-height: normal;
+}
+
+.delete-button {
+ border: none !important;
+}
+
+i.fa.fa-trash {
+ font-size: 13.5pt;
+}
+
+.list_container a {
+ font-size: 16px;
+ color: #f8f8f0;
+ border: none;
+ text-shadow: none !important;
+ font-weight: normal;
+ font-style: normal;
+}
+
+div.list_container a:hover {
+ color: #f8f8f0;
+}
+
+.list_header > div input,
+.list_item > div input {
+ margin-right: 7px;
+ margin-left: 12px;
+ vertical-align: baseline;
+ line-height: 22px;
+ position: relative;
+ top: -1px;
+}
+
+div.list_item:hover {
+ background-color: rgba(93, 92, 82, 0.1);
+}
+
+.breadcrumb > li {
+ font-size: 12pt;
+ color: #f8f8f0;
+ border: none;
+ text-shadow: none !important;
+}
+
+.breadcrumb > li + li:before {
+ content: "/\00a0";
+ padding: 0px;
+ color: #f8f8f0;
+ font-size: 18px;
+}
+
+#project_name > .breadcrumb {
+ padding: 0px;
+ margin-bottom: 0px;
+ background-color: transparent;
+ font-weight: normal;
+ margin-top: -2px;
+}
+
+ul#tabs a {
+ font-family: sans-serif;
+ font-size: 13.5pt;
+ font-weight: normal;
+ font-style: normal;
+ text-shadow: none !important;
+}
+
+.nav-tabs {
+ font-family: sans-serif;
+ font-size: 13.5pt;
+ font-weight: normal;
+ font-style: normal;
+ background-color: transparent;
+ border-color: transparent;
+ text-shadow: none !important;
+ border: 2px solid transparent;
+}
+
+.nav-tabs > li > a:active,
+.nav-tabs > li > a:focus,
+.nav-tabs > li > a:hover,
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:focus,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #a6e22e;
+ background-color: transparent;
+ border-color: transparent;
+ border-bottom: 2px solid transparent;
+}
+
+.nav > li.disabled > a,
+.nav > li.disabled > a:hover {
+ color: #75715e;
+}
+
+.nav-tabs > li > a:before {
+ content: "";
+ position: absolute;
+ width: 100%;
+ height: 2px;
+ bottom: -2px;
+ left: 0;
+ background-color: #a6e22e;
+ visibility: hidden;
+ -webkit-transform: perspective(0) scaleX(0);
+ transform: perspective(0) scaleX(0);
+ -webkit-transition: ease 220ms;
+ transition: ease 220ms;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+.nav-tabs > li > a:hover:before {
+ visibility: visible;
+ -webkit-transform: perspective(1) scaleX(1);
+ transform: perspective(1) scaleX(1);
+}
+
+.nav-tabs > li.active > a:before {
+ content: "";
+ position: absolute;
+ width: 100%;
+ height: 2px;
+ bottom: -2px;
+ left: 0;
+ background-color: #a6e22e;
+ visibility: visible;
+ -webkit-transform: perspective(1) scaleX(1);
+ transform: perspective(1) scaleX(1);
+ -webkit-font-smoothing: subpixel-antialiased !important;
+}
+
+div#notebook {
+ font-family: sans-serif;
+ font-size: 13pt;
+ padding-top: 4px;
+}
+
+.notebook_app {
+ background-color: #1e1e1e;
+}
+
+#notebook-container {
+ padding: 13px 2px;
+ background-color: #1e1e1e;
+ min-height: 0px;
+ box-shadow: none;
+ width: 980px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+div#ipython-main-app.container {
+ width: 980px;
+ margin-right: auto;
+ margin-left: auto;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.container {
+ width: 980px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+div#menubar-container {
+ width: 100%;
+ width: 980px;
+}
+
+div#header-container {
+ width: 980px;
+}
+
+.notebook_app #header,
+.edit_app #header {
+ box-shadow: none !important;
+ background-color: #1e1e1e;
+ border-bottom: 2px solid rgba(93, 92, 82, 0.25);
+}
+
+#header,
+.edit_app #header {
+ font-family: sans-serif;
+ font-size: 13pt;
+ box-shadow: none;
+ background-color: #1e1e1e;
+}
+
+#header .header-bar,
+.edit_app #header .header-bar {
+ background: #1e1e1e;
+ background-color: #1e1e1e;
+}
+
+body > #header .header-bar {
+ width: 100%;
+ background: #1e1e1e;
+}
+
+span.checkpoint_status,
+span.autosave_status {
+ font-size: small;
+ display: none;
+}
+
+#menubar,
+div#menubar {
+ background-color: #1e1e1e;
+ padding-top: 0px !important;
+}
+
+#menubar .navbar,
+.navbar-default {
+ background-color: #1e1e1e;
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+.navbar {
+ border: none;
+}
+
+div.navbar-text,
+.navbar-text,
+.navbar-text.indicator_area,
+p.navbar-text.indicator_area {
+ margin-top: 8px !important;
+ margin-bottom: 0px;
+ color: #a6e22e;
+}
+
+.navbar-default {
+ font-family: sans-serif;
+ font-size: 13pt;
+ background-color: #1e1e1e;
+ border-color: rgba(93, 92, 82, 0.25);
+ line-height: 1.5em;
+ padding-bottom: 0px;
+}
+
+.navbar-default .navbar-nav > li > a {
+ font-family: sans-serif;
+ font-size: 13pt;
+ color: #f8f8f0;
+ display: block;
+ line-height: 1.5em;
+ padding-top: 14px;
+ padding-bottom: 11px;
+}
+
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #f8f8f0 !important;
+ background-color: rgba(93, 92, 82, 0.25) !important;
+ border-color: rgba(93, 92, 82, 0.25) !important;
+ line-height: 1.5em;
+ transition: 80ms ease;
+}
+
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #f8f8f2;
+ background-color: #383838;
+ border-color: #383838;
+ line-height: 1.5em;
+}
+
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0px;
+}
+
+.navbar-nav {
+ margin: 0;
+}
+
+div.notification_widget.info,
+.notification_widget.info,
+.notification_widget:active:hover,
+.notification_widget.active:hover,
+.open > .dropdown-toggle.notification_widget:hover,
+.notification_widget:active:focus,
+.notification_widget.active:focus,
+.open > .dropdown-toggle.notification_widget:focus,
+.notification_widget:active.focus,
+.notification_widget.active.focus,
+.open > .dropdown-toggle.notification_widget.focus,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:hover,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:focus {
+ color: #f8f8f0 !important;
+ background-color: transparent !important;
+ border-color: transparent !important;
+ padding-bottom: 0px !important;
+ margin-bottom: 0px !important;
+ font-size: 9pt !important;
+ z-index: 0;
+}
+
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn {
+ font-size: 9pt !important;
+ z-index: 0;
+}
+
+.notification_widget {
+ color: #ae81ff;
+ z-index: -500;
+ font-size: 9pt;
+ background: transparent;
+ background-color: transparent;
+ margin-right: 3px;
+ border: none;
+}
+
+.notification_widget,
+div.notification_widget {
+ margin-right: 0px;
+ margin-left: 0px;
+ padding-right: 0px;
+ vertical-align: text-top !important;
+ margin-top: 6px !important;
+ background: transparent !important;
+ background-color: transparent !important;
+ font-size: 9pt !important;
+ border: none;
+}
+
+.navbar-btn.btn-xs:hover {
+ border: none !important;
+ background: transparent !important;
+ background-color: transparent !important;
+ color: #f8f8f0 !important;
+}
+
+div.notification_widget.info,
+.notification_widget.info {
+ display: none !important;
+}
+
+.edit_mode .modal_indicator:before {
+ display: none;
+}
+
+.command_mode .modal_indicator:before {
+ display: none;
+}
+
+.item_icon {
+ color: #ae81ff;
+}
+
+.item_buttons .kernel-name {
+ font-size: 13pt;
+ color: #ae81ff;
+}
+
+.running_notebook_icon:before {
+ color: #a6e22e !important;
+ font: normal normal normal 15px/1 FontAwesome;
+ font-size: 15px;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\f10c";
+ vertical-align: middle;
+ position: static;
+ display: inherit;
+}
+
+.item_buttons .running-indicator {
+ padding-top: 4px;
+ color: #a6e22e;
+ font-family: sans-serif;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+}
+
+#notification_trusted {
+ font-family: sans-serif;
+ border: none;
+ background: transparent;
+ background-color: transparent;
+ margin-bottom: 0px !important;
+ vertical-align: bottom !important;
+ color: #75715e !important;
+ cursor: default !important;
+}
+
+#notification_area,
+div.notification_area {
+ float: right !important;
+ position: static;
+ cursor: pointer;
+ padding-top: 6px;
+ padding-right: 4px;
+}
+
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn {
+ font-size: 9pt !important;
+ z-index: 0;
+ margin-top: -5px !important;
+}
+
+#modal_indicator {
+ float: right !important;
+ color: #4c8be2;
+ background: #1e1e1e;
+ background-color: #1e1e1e;
+ margin-top: 8px !important;
+ margin-left: 0px;
+}
+
+#kernel_indicator {
+ float: right !important;
+ color: #a6e22e;
+ background: #1e1e1e;
+ background-color: #1e1e1e;
+ border-left: 2px solid #a6e22e;
+ padding-top: 0px;
+ padding-bottom: 4px;
+ margin-top: 10px !important;
+ margin-left: -2px;
+ padding-left: 5px !important;
+}
+
+#kernel_indicator .kernel_indicator_name {
+ font-size: 17px;
+ color: #a6e22e;
+ background: #1e1e1e;
+ background-color: #1e1e1e;
+ padding-left: 5px;
+ padding-right: 5px;
+ margin-top: 4px;
+ vertical-align: text-top;
+ padding-bottom: 0px;
+}
+
+.kernel_idle_icon:before {
+ display: inline-block;
+ font: normal normal normal 22px/1 FontAwesome;
+ font-size: 22px;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ cursor: pointer;
+ margin-left: 0px !important;
+ opacity: 0.7;
+ vertical-align: bottom;
+ margin-top: 1px;
+ content: "\f1db";
+}
+
+.kernel_busy_icon:before {
+ display: inline-block;
+ font: normal normal normal 22px/1 FontAwesome;
+ font-size: 22px;
+ -webkit-animation: pulsate 2s infinite ease-out;
+ animation: pulsate 2s infinite ease-out;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ cursor: pointer;
+ margin-left: 0px !important;
+ vertical-align: bottom;
+ margin-top: 1px;
+ content: "\f111";
+}
+
+@-webkit-keyframes pulsate {
+ 0% {
+ -webkit-transform: scale(1, 1);
+ opacity: 0.8;
+ }
+
+ 8% {
+ -webkit-transform: scale(1, 1);
+ opacity: 0.8;
+ }
+
+ 50% {
+ -webkit-transform: scale(0.75, 0.75);
+ opacity: 0.3;
+ }
+
+ 92% {
+ -webkit-transform: scale(1, 1);
+ opacity: 0.8;
+ }
+
+ 100% {
+ -webkit-transform: scale(1, 1);
+ opacity: 0.8;
+ }
+}
+
+div.notification_widget.info,
+.notification_widget.info,
+.notification_widget:active:hover,
+.notification_widget.active:hover,
+.open > .dropdown-toggle.notification_widget:hover,
+.notification_widget:active:focus,
+.notification_widget.active:focus,
+.open > .dropdown-toggle.notification_widget:focus,
+.notification_widget:active.focus,
+.notification_widget.active.focus,
+.open > .dropdown-toggle.notification_widget.focus,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:hover,
+div#notification_notebook.notification_widget.btn.btn-xs.navbar-btn:focus {
+ color: #f8f8f0;
+ background-color: #1e1e1e;
+ border-color: #1e1e1e;
+}
+
+#notification_area,
+div.notification_area {
+ float: right !important;
+ position: static;
+}
+
+.notification_widget,
+div.notification_widget {
+ margin-right: 0px;
+ margin-left: 0px;
+ padding-right: 0px;
+ vertical-align: text-top !important;
+ margin-top: 6px !important;
+ z-index: 1000;
+}
+
+#kernel_logo_widget,
+#kernel_logo_widget .current_kernel_logo {
+ display: none;
+}
+
+div#ipython_notebook {
+ display: none;
+}
+
+i.fa.fa-icon {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-rendering: auto;
+}
+
+.fa {
+ display: inline-block;
+ font:
+ normal normal normal 10pt/1 "FontAwesome",
+ sans-serif;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.dropdown-menu {
+ font-family: sans-serif;
+ font-size: 13pt;
+ box-shadow: none;
+ padding: 0px;
+ text-align: left;
+ border: none;
+ background-color: #383838;
+ background: #383838;
+ line-height: 1;
+}
+
+.dropdown-menu:hover {
+ font-family: sans-serif;
+ font-size: 13pt;
+ box-shadow: none;
+ padding: 0px;
+ text-align: left;
+ border: none;
+ background-color: #383838;
+ box-shadow: none;
+ line-height: 1;
+}
+
+.dropdown-menu > li > a {
+ font-family: sans-serif;
+ font-size: 12pt;
+ display: block;
+ padding: 10px 20px 9px 10px;
+ color: #f8f8f0;
+ background-color: #383838;
+ background: #383838;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #f8f8f0;
+ background-color: rgba(93, 92, 82, 0.25);
+ background: rgba(93, 92, 82, 0.25);
+ border-color: rgba(93, 92, 82, 0.25);
+ transition: 200ms ease;
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 0px 0px;
+ overflow: hidden;
+ background-color: rgba(93, 92, 82, 0.5);
+}
+
+.dropdown-submenu > .dropdown-menu {
+ display: none;
+ top: 2px !important;
+ left: 100%;
+ margin-top: -2px;
+ margin-left: 0px;
+ padding-top: 0px;
+ transition: 200ms ease;
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ font-family: sans-serif;
+ font-size: 12pt;
+ font-weight: normal;
+ color: #75715e;
+ padding: none;
+ display: block;
+ clear: both;
+ white-space: nowrap;
+}
+
+.dropdown-submenu > a:after {
+ color: #f8f8f0;
+ margin-right: -16px;
+ margin-top: 0px;
+ display: inline-block;
+}
+
+.dropdown-submenu:hover > a:after,
+.dropdown-submenu:active > a:after,
+.dropdown-submenu:focus > a:after,
+.dropdown-submenu:visited > a:after {
+ color: #a6e22e;
+ margin-right: -16px;
+ display: inline-block !important;
+}
+
+div.kse-dropdown > .dropdown-menu,
+.kse-dropdown > .dropdown-menu {
+ min-width: 0;
+ top: 94%;
+}
+
+.btn,
+.btn-default {
+ font-family: sans-serif;
+ color: #f8f8f0;
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border: 2px solid #2f2f2f;
+ font-weight: normal;
+ box-shadow: none;
+ text-shadow: none;
+ border-radius: 3px;
+ font-size: initial;
+}
+
+.btn:hover,
+.btn:active:hover,
+.btn.active:hover,
+.btn-default:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.open > .dropdown-toggle.btn:hover {
+ color: #a6e22e;
+ border: 2px solid #2a2a2a;
+ background-color: #2a2a2a;
+ background: #2a2a2a;
+ background-image: none;
+ box-shadow: none !important;
+ border-radius: 3px;
+}
+
+.btn:active,
+.btn.active,
+.btn:active:focus,
+.btn.active:focus,
+.btn:active.focus,
+.btn.active.focus,
+.btn-default:focus,
+.btn-default.focus,
+.btn-default:active,
+.btn-default.active,
+.btn-default:active:hover,
+.btn-default.active:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn:focus,
+.open > .dropdown-toggle.btn.focus,
+.open > .dropdown-toggle.btn-default:hover,
+.open > .dropdown-toggle.btn-default:focus,
+.open > .dropdown-toggle.btn-default.hover,
+.open > .dropdown-toggle.btn-default.focus {
+ color: #a6e22e;
+ border: 2px solid #2a2a2a;
+ background-color: #2a2a2a !important;
+ background: #2a2a2a !important;
+ background-image: none;
+ box-shadow: none !important;
+ border-radius: 3px;
+}
+
+.btn-default:active:hover,
+.btn-default.active:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.btn-default:active.focus,
+.btn-default.active.focus {
+ color: #a6e22e !important;
+ background-color: #2f2f2f;
+ border-color: #546745 !important;
+ transition: 2000ms ease;
+}
+
+.btn:focus,
+.btn.focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn:active,
+.btn.active,
+.btn:active.focus,
+.btn.active.focus {
+ color: #a6e22e !important;
+ outline: none !important;
+ outline-width: 0px !important;
+ background: #546745 !important;
+ background-color: #546745 !important;
+ border-color: #546745 !important;
+ transition: 200ms ease !important;
+}
+
+.item_buttons > .btn,
+.item_buttons > .btn-group,
+.item_buttons > .input-group {
+ font-size: 13pt;
+ background: transparent;
+ background-color: transparent;
+ border: 0px solid #2f2f2f;
+ border-bottom: 2px solid transparent;
+ margin-left: 5px;
+ padding-top: 4px !important;
+}
+
+.item_buttons > .btn:hover,
+.item_buttons > .btn-group:hover,
+.item_buttons > .input-group:hover,
+.item_buttons > .btn.active,
+.item_buttons > .btn-group.active,
+.item_buttons > .input-group.active,
+.item_buttons > .btn.focus {
+ margin-left: 5px;
+ background: #2a2a2a;
+ padding-top: 4px !important;
+ background-color: transparent;
+ border: 0px solid transparent;
+ border-bottom: 2px solid #a6e22e;
+ border-radius: 0px;
+ transition: none;
+}
+
+.item_buttons {
+ line-height: 1.5em !important;
+}
+
+.item_buttons .btn {
+ min-width: 11ex;
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 3px;
+}
+
+.btn-group > .btn-mini,
+.btn-sm,
+.btn-group-sm > .btn,
+.btn-xs,
+.btn-group-xs > .btn,
+.alternate_upload .btn-upload,
+.btn-group,
+.btn-group-vertical {
+ font-size: inherit;
+ font-weight: normal;
+ height: inherit;
+ line-height: inherit;
+}
+
+.btn-xs,
+.btn-group-xs > .btn {
+ font-size: initial !important;
+ background-image: none;
+ font-weight: normal;
+ text-shadow: none;
+ display: inline-table;
+ padding: 2px 5px;
+ line-height: 1.45;
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 3px;
+}
+
+div#new-buttons > button,
+#new-buttons > button,
+div#refresh_notebook_list,
+#refresh_notebook_list {
+ background: transparent;
+ background-color: transparent;
+ border: none;
+}
+
+div#new-buttons > button:hover,
+#new-buttons > button:hover,
+div#refresh_notebook_list,
+#refresh_notebook_list,
+div.alternate_upload .btn-upload,
+.alternate_upload .btn-upload,
+div.dynamic-buttons > button,
+.dynamic-buttons > button,
+.dynamic-buttons > button:focus,
+.dynamic-buttons > button:active:focus,
+.dynamic-buttons > button.active:focus,
+.dynamic-buttons > button.focus,
+.dynamic-buttons > button:active.focus,
+.dynamic-buttons > button.active.focus,
+#new-buttons > button:focus,
+#new-buttons > button:active:focus,
+#new-buttons > button.active:focus,
+#new-buttons > button.focus,
+#new-buttons > button:active.focus,
+#new-buttons > button.active.focus,
+.alternate_upload .btn-upload:focus,
+.alternate_upload .btn-upload:active:focus,
+.alternate_upload .btn-upload.active:focus,
+.alternate_upload .btn-upload.focus,
+.alternate_upload .btn-upload:active.focus,
+.alternate_upload .btn-upload.active.focus {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: none !important;
+}
+
+.alternate_upload input.fileinput {
+ text-align: center;
+ vertical-align: bottom;
+ margin-left: -0.5ex;
+ display: inline-table;
+ border: solid 0px #2f2f2f;
+ margin-bottom: -1ex;
+}
+
+.alternate_upload .btn-upload {
+ display: inline-table;
+ background: transparent;
+ border: none;
+}
+
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -2px;
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ z-index: 2;
+}
+
+.dropdown-header {
+ font-family: sans-serif !important;
+ font-size: 13pt !important;
+ color: #a6e22e !important;
+ border-bottom: none !important;
+ padding: 0px !important;
+ margin: 6px 6px 0px !important;
+}
+
+span#last-modified.btn.btn-xs.btn-default.sort-action,
+span#sort-name.btn.btn-xs.btn-default.sort-action,
+span#file-size.btn.btn-xs.btn-default.sort-action {
+ font-family: sans-serif;
+ font-size: 16px;
+ background-color: transparent;
+ background: transparent;
+ border: none;
+ color: #f8f8f0;
+ padding-bottom: 0px;
+ margin-bottom: 0px;
+ vertical-align: sub;
+}
+
+span#last-modified.btn.btn-xs.btn-default.sort-action {
+ margin-left: 19px;
+}
+
+button.close {
+ border: 0px none;
+ font-family: sans-serif;
+ font-size: 20pt;
+ font-weight: normal;
+}
+
+.dynamic-buttons {
+ padding-top: 0px;
+ display: inline-block;
+}
+
+.close {
+ color: #f92672;
+ opacity: 0.5;
+ text-shadow: none;
+ font-weight: normal;
+}
+
+.close:hover {
+ color: #f92672;
+ opacity: 1;
+ font-weight: normal;
+}
+
+div.nbext-enable-btns .btn[disabled],
+div.nbext-enable-btns .btn[disabled]:hover,
+.btn-default.disabled,
+.btn-default[disabled],
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus {
+ color: #888888;
+ background: #2c2c2c;
+ background-color: #2c2c2c;
+ border-color: #2c2c2c;
+ transition: 200ms ease;
+}
+
+.input-group-addon {
+ padding: 2px 5px;
+ font-size: 13pt;
+ font-weight: normal;
+ height: auto;
+ color: #f8f8f0;
+ text-align: center;
+ background-color: transparent;
+ border: 2px solid transparent !important;
+ text-transform: capitalize;
+}
+
+a.btn.btn-default.input-group-addon:hover {
+ background: transparent !important;
+ background-color: transparent !important;
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+ height: 100%;
+}
+
+.btn-group > .btn + .dropdown-toggle:hover {
+ background: #2a2a2a !important;
+}
+
+.input-group-btn {
+ position: relative;
+ font-size: inherit;
+ white-space: nowrap;
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border: none;
+}
+
+.input-group-btn:hover {
+ background: #2a2a2a;
+ background-color: #2a2a2a;
+ border: none;
+}
+
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border: none;
+ margin-left: 2px;
+ margin-right: -1px;
+ font-size: inherit;
+}
+
+.input-group-btn:first-child > .btn:hover,
+.input-group-btn:first-child > .btn-group:hover {
+ background: #2a2a2a;
+ background-color: #2a2a2a;
+ border: none;
+ font-size: inherit;
+ transition: 200ms ease;
+}
+
+div.modal .btn-group > .btn:first-child {
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border: 1px solid #2c2c2c;
+ margin-top: 0px !important;
+ margin-left: 0px;
+ margin-bottom: 2px;
+}
+
+div.modal .btn-group > .btn:first-child:hover {
+ background: #2a2a2a;
+ background-color: #2a2a2a;
+ border: 1px solid #2a2a2a;
+ transition: 200ms ease;
+}
+
+div.modal > button,
+div.modal-footer > button {
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border-color: #2f2f2f;
+}
+
+div.modal > button:hover,
+div.modal-footer > button:hover {
+ background: #2a2a2a;
+ background-color: #2a2a2a;
+ border-color: #2a2a2a;
+ transition: 200ms ease;
+}
+
+.modal-content {
+ font-family: sans-serif;
+ font-size: 12pt;
+ position: relative;
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border: none;
+ border-radius: 1px;
+ background-clip: padding-box;
+ outline: none;
+}
+
+.modal-header {
+ font-family: sans-serif;
+ font-size: 13pt;
+ color: #f8f8f0;
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border-color: rgba(93, 92, 82, 0.25);
+ padding: 12px;
+ min-height: 16.4286px;
+}
+
+.modal-content h4 {
+ font-family: sans-serif;
+ font-size: 16pt;
+ color: #f8f8f0;
+ padding: 5px;
+}
+
+.modal-body {
+ background-color: #232323;
+ position: relative;
+ padding: 15px;
+}
+
+.modal-footer {
+ padding: 8px;
+ text-align: right;
+ background-color: #232323;
+ border-top: none;
+}
+
+.alert-info {
+ background-color: #2f2f2f;
+ border-color: rgba(93, 92, 82, 0.25);
+ color: #f8f8f0;
+}
+
+.modal-header .close {
+ margin-top: -5px;
+ font-size: 25pt;
+}
+
+.modal-backdrop,
+.modal-backdrop.in {
+ opacity: 0.85;
+ background-color: notebook-bg;
+}
+
+div.panel,
+div.panel-default,
+.panel,
+.panel-default {
+ font-family: sans-serif;
+ font-size: 13pt;
+ background-color: #232323;
+ color: #f8f8f0;
+ margin-bottom: 14px;
+ border: 0;
+ box-shadow: none;
+}
+
+div.panel > .panel-heading,
+div.panel-default > .panel-heading {
+ font-size: 14pt;
+ color: #f8f8f0;
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border: 0;
+}
+
+.modal .modal-dialog {
+ min-width: 950px;
+ margin: 50px auto;
+}
+
+div.container-fluid {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 0px;
+ padding-right: 5px;
+}
+
+div.form-control,
+.form-control {
+ font-family: sans-serif;
+ font-size: initial;
+ color: #f8f8f0;
+ background-color: #282828;
+ border: 1px solid #282828 !important;
+ margin-left: 2px;
+ box-shadow: none;
+ transition:
+ border-color 0.15s ease-in-out 0s,
+ box-shadow 0.15s ease-in-out 0s;
+}
+
+.form-control-static {
+ min-height: inherit;
+ height: inherit;
+}
+
+.form-group.list-group-item {
+ color: #f8f8f0;
+ background-color: #232323;
+ border-color: rgba(93, 92, 82, 0.25);
+ margin-bottom: 0px;
+}
+
+.form-group .input-group {
+ float: left;
+}
+
+input,
+button,
+select,
+textarea {
+ background-color: #282828;
+ font-weight: normal;
+ border: 1px solid rgba(93, 92, 82, 0.25);
+}
+
+select.form-control.select-xs {
+ height: 33px;
+ font-size: 13pt;
+}
+
+.toolbar select,
+.toolbar label {
+ width: auto;
+ vertical-align: middle;
+ margin-right: 0px;
+ margin-bottom: 0px;
+ display: inline;
+ font-size: 92%;
+ margin-left: 10px;
+ padding: 0px;
+ background: #2f2f2f !important;
+ background-color: #2f2f2f !important;
+ border: 2px solid #2f2f2f !important;
+}
+
+.form-control:focus {
+ border-color: #a6e22e;
+ outline: 2px solid #49483e;
+ -webkit-box-shadow: none;
+}
+
+::-webkit-input-placeholder {
+ color: #75715e;
+}
+
+::-moz-placeholder {
+ color: #75715e;
+}
+
+:-ms-input-placeholder {
+ color: #75715e;
+}
+
+:-moz-placeholder {
+ color: #75715e;
+}
+
+[dir="ltr"] #find-and-replace .input-group-btn + .form-control {
+ border: 2px solid rgba(93, 92, 82, 0.25) !important;
+}
+
+[dir="ltr"] #find-and-replace .input-group-btn + .form-control:focus {
+ border-color: #a6e22e;
+ outline: 2px solid #49483e;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+div.output.output_scroll {
+ box-shadow: none;
+}
+
+::-webkit-scrollbar {
+ width: 11px;
+ max-height: 9px;
+ background-color: #2d2d2d;
+ border-radius: 3px;
+ border: none;
+}
+
+::-webkit-scrollbar-track {
+ background: #2d2d2d;
+ border: none;
+ width: 11px;
+ max-height: 9px;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 2px;
+ border: none;
+ background: #49483e;
+ background-clip: content-box;
+ width: 11px;
+}
+
+HTML,
+body,
+div,
+dl,
+dt,
+dd,
+ul,
+ol,
+li,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+pre,
+code,
+form,
+fieldset,
+legend,
+input,
+button,
+textarea,
+p,
+blockquote,
+th,
+td,
+span,
+a {
+ text-rendering: geometricPrecision;
+ -webkit-font-smoothing: subpixel-antialiased;
+ font-weight: 400;
+}
+
+div.input_area {
+ background-color: #282828;
+ background: #282828;
+ padding-right: 1.2em;
+ border: 0px;
+ border-radius: 0px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+div.cell {
+ padding: 0px;
+ background: #282828;
+ background-color: #282828;
+ border: medium solid #1e1e1e;
+ border-radius: 4px;
+ top: 0;
+}
+
+div.cell.selected {
+ background: #282828;
+ background-color: #282828;
+ border: medium solid #1e1e1e;
+ padding: 0px;
+ border-radius: 5px;
+}
+
+.edit_mode div.cell.selected {
+ padding: 0px;
+ background: #282828;
+ background-color: #282828;
+ border: medium solid #1e1e1e;
+ border-radius: 5px;
+}
+
+div.cell.edit_mode {
+ padding: 0px;
+ background: #282828;
+ background-color: #282828;
+}
+
+div.CodeMirror-sizer {
+ margin-left: 0px;
+ margin-bottom: -21px;
+ border-right-width: 16px;
+ min-height: 37px;
+ padding-right: 0px;
+ padding-bottom: 0px;
+ margin-top: 0px;
+}
+
+div.cell.selected:before,
+.edit_mode div.cell.selected:before,
+div.cell.selected:before,
+div.cell.selected.jupyter-soft-selected:before {
+ background: #282828 !important;
+ border: none;
+ border-radius: 3px;
+ position: absolute;
+ display: block;
+ top: 0px;
+ left: 0px;
+ width: 0px;
+ height: 100%;
+}
+
+div.cell.text_cell.selected::before,
+.edit_mode div.cell.text_cell.selected:before,
+div.cell.text_cell.selected:before,
+div.cell.text_cell.selected.jupyter-soft-selected:before {
+ background: #282828 !important;
+ background-color: #282828 !important;
+ border-color: #57564b !important;
+}
+
+div.cell.code_cell .input {
+ border-left: 5px solid #282828 !important;
+ border-radius: 3px;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+
+div.cell.code_cell.selected .input {
+ border-left: 5px solid #57564b !important;
+ border-radius: 3px;
+}
+
+.edit_mode div.cell.code_cell.selected .input {
+ border-left: 5px solid #33322b !important;
+ border-radius: 3px;
+}
+
+.edit_mode div.cell.selected:before {
+ height: 100%;
+ border-left: 5px solid #33322b !important;
+ border-radius: 3px;
+}
+
+div.cell.jupyter-soft-selected,
+div.cell.selected.jupyter-soft-selected {
+ border-left-color: #33322b !important;
+ border-left-width: 0px !important;
+ padding-left: 7px !important;
+ border-right-color: #33322b !important;
+ border-right-width: 0px !important;
+ background: #33322b !important;
+ border-radius: 6px !important;
+}
+
+div.cell.selected.jupyter-soft-selected .input {
+ border-left: 5px solid #282828 !important;
+}
+
+div.cell.selected.jupyter-soft-selected {
+ border-left-color: #57564b;
+ border-color: #1e1e1e;
+ padding-left: 7px;
+ border-radius: 6px;
+}
+
+div.cell.code_cell.selected .input {
+ border-left: none;
+ border-radius: 3px;
+}
+
+div.cell.selected.jupyter-soft-selected .prompt,
+div.cell.text_cell.selected.jupyter-soft-selected .prompt {
+ top: 0;
+ border-left: #282828 !important;
+ border-radius: 2px;
+}
+
+div.cell.text_cell.selected.jupyter-soft-selected .input_prompt {
+ border-left: none !important;
+}
+
+div.cell.text_cell.jupyter-soft-selected,
+div.cell.text_cell.selected.jupyter-soft-selected {
+ border-left-color: #33322b !important;
+ border-left-width: 0px !important;
+ padding-left: 26px !important;
+ border-right-color: #33322b !important;
+ border-right-width: 0px !important;
+ background: #33322b !important;
+ border-radius: 5px !important;
+}
+
+div.cell.jupyter-soft-selected .input,
+div.cell.selected.jupyter-soft-selected .input {
+ border-left-color: #33322b !important;
+}
+
+div.prompt,
+.prompt {
+ font-family: monospace, monospace;
+ font-size: 9pt !important;
+ font-weight: normal;
+ color: #75715e;
+ line-height: 170%;
+ padding: 0px;
+ padding-top: 4px;
+ padding-left: 0px;
+ padding-right: 1px;
+ text-align: right !important;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+}
+
+div.prompt.input_prompt {
+ font-size: 9pt !important;
+ background-color: #282828;
+ border-top: 0px;
+ border-top-right-radius: 0px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ padding-right: 3px;
+ min-width: 11.5ex;
+ width: 11.5ex !important;
+}
+
+div.cell.code_cell .input_prompt {
+ border-right: 2px solid #49483e;
+}
+
+div.cell.selected .prompt {
+ top: 0;
+}
+
+.edit_mode div.cell.selected .prompt {
+ top: 0;
+}
+
+.edit_mode div.cell.selected .prompt {
+ top: 0;
+}
+
+.run_this_cell {
+ visibility: hidden;
+ color: transparent;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-left: 3px;
+ padding-right: 12px;
+ width: 1.5ex;
+ width: 0ex;
+ background: transparent;
+ background-color: transparent;
+}
+
+div.code_cell:hover div.input .run_this_cell {
+ visibility: visible;
+}
+
+div.cell.code_cell.rendered.selected .run_this_cell:hover {
+ background-color: #1e1e1e;
+ background: #1e1e1e;
+ color: #57564b !important;
+}
+
+div.cell.code_cell.rendered.unselected .run_this_cell:hover {
+ background-color: #1e1e1e;
+ background: #1e1e1e;
+ color: #57564b !important;
+}
+
+i.fa-step-forward.fa {
+ display: inline-block;
+ font: normal normal normal 9px "FontAwesome";
+}
+
+.fa-step-forward:before {
+ content: "\f04b";
+}
+
+div.cell.selected.jupyter-soft-selected .run_this_cell,
+div.cell.selected.jupyter-soft-selected .run_this_cell:hover,
+div.cell.unselected.jupyter-soft-selected .run_this_cell:hover,
+div.cell.code_cell.rendered.selected.jupyter-soft-selected .run_this_cell:hover,
+div.cell.code_cell.rendered.unselected.jupyter-soft-selected .run_this_cell:hover {
+ background-color: #33322b !important;
+ background: #33322b !important;
+ color: #33322b !important;
+}
+
+div.output_wrapper {
+ background-color: #232323;
+ border: 0px;
+ left: 0px;
+ margin-bottom: 0em;
+ margin-top: 0em;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+}
+
+div.output_subarea.output_text.output_stream.output_stdout,
+div.output_subarea.output_text {
+ font-family: monospace, monospace;
+ font-size: 8.5pt !important;
+ line-height: 150% !important;
+ background-color: #232323;
+ color: #cccccc;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+ margin-left: 11.5px;
+}
+
+div.output_area pre {
+ font-family: monospace, monospace;
+ font-size: 8.5pt !important;
+ line-height: 151% !important;
+ color: #cccccc;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+}
+
+div.output_area {
+ display: -webkit-box;
+}
+
+div.output_html {
+ font-family: monospace, monospace;
+ font-size: 8.5pt;
+ color: #cccccc;
+ background-color: #232323;
+ background: #232323;
+}
+
+div.output_subarea {
+ overflow-x: auto;
+ padding: 1.2em !important;
+ -webkit-box-flex: 1;
+ -moz-box-flex: 1;
+ box-flex: 1;
+ flex: 1;
+}
+
+div.btn.btn-default.output_collapsed {
+ background: #222222;
+ background-color: #222222;
+ border-color: #222222;
+}
+
+div.btn.btn-default.output_collapsed:hover {
+ background: #1d1d1d;
+ background-color: #1d1d1d;
+ border-color: #1d1d1d;
+}
+
+div.prompt.output_prompt {
+ font-family: monospace, monospace;
+ font-weight: bold !important;
+ background-color: #232323;
+ color: transparent;
+ border-bottom-left-radius: 4px;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+ border-right: 2px solid transparent;
+}
+
+div.out_prompt_overlay.prompt {
+ font-family: monospace, monospace;
+ font-weight: bold !important;
+ background-color: #232323;
+ border-bottom-left-radius: 2px;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+ border-right: 2px solid transparent;
+ color: transparent;
+}
+
+div.out_prompt_overlay.prompt:hover {
+ background-color: #49483e;
+ box-shadow: none !important;
+ border: none;
+ border-bottom-left-radius: 2px;
+ -webkit-border-: 2px;
+ -moz-border-radius: 2px;
+ border-top-right-radius: 0px;
+ border-top-left-radius: 0px;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+ border-right: 2px solid #49483e !important;
+}
+
+div.cell.code_cell .output_prompt {
+ border-right: 2px solid transparent;
+ color: transparent;
+}
+
+div.cell.selected .output_prompt,
+div.cell.selected .out_prompt_overlay.prompt {
+ border-left: 5px solid #33322b;
+ border-right: 2px solid #232323;
+ border-radius: 0px !important;
+}
+
+.edit_mode div.cell.selected .output_prompt,
+.edit_mode div.cell.selected .out_prompt_overlay.prompt {
+ border-left: 5px solid #33322b;
+ border-right: 2px solid #232323;
+ border-radius: 0px !important;
+}
+
+div.text_cell,
+div.text_cell_render pre,
+div.text_cell_render {
+ font-family: sans-serif;
+ font-size: 13pt;
+ line-height: 130% !important;
+ color: #f8f8f0;
+ background: #282828;
+ background-color: #282828;
+ border-radius: 0px;
+}
+
+div .text_cell_render {
+ padding: 0.4em 0.4em 0.4em 0.4em;
+}
+
+div.cell.text_cell .CodeMirror-lines {
+ padding-top: 0.7em !important;
+ padding-bottom: 0.4em !important;
+ padding-left: 0.5em !important;
+ padding-right: 0.5em !important;
+ margin-top: 0.4em;
+ margin-bottom: 0.3em;
+}
+
+div.cell.text_cell.unrendered div.input_area,
+div.cell.text_cell.rendered div.input_area {
+ background-color: #282828;
+ background: #282828;
+ border: 0px;
+ border-radius: 2px;
+}
+
+div.cell.text_cell .CodeMirror,
+div.cell.text_cell .CodeMirror pre {
+ line-height: 170% !important;
+}
+
+div.cell.text_cell.rendered.selected {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #282828;
+ background-color: #282828;
+ border-radius: 0px;
+}
+
+div.cell.text_cell.unrendered.selected {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #282828;
+ background-color: #282828;
+ border-radius: 0px;
+}
+
+div.cell.text_cell.selected {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #282828;
+ background-color: #282828;
+ border-radius: 0px;
+}
+
+.edit_mode div.cell.text_cell.selected {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #282828;
+ background-color: #282828;
+ border-radius: 0px;
+}
+
+div.text_cell.unrendered,
+div.text_cell.unrendered.selected,
+div.edit_mode div.text_cell.unrendered {
+ font-family: sans-serif;
+ line-height: 170% !important;
+ background: #282828;
+ background-color: #282828;
+ border-radius: 0px;
+}
+
+div.cell.text_cell .prompt {
+ border-right: 0;
+ min-width: 11.5ex !important;
+ width: 11.5ex !important;
+}
+
+div.cell.text_cell.rendered .prompt {
+ font-family: monospace, monospace;
+ font-size: 9.5pt !important;
+ font-weight: normal;
+ color: #75715e !important;
+ text-align: right !important;
+ min-width: 14.5ex !important;
+ width: 14.5ex !important;
+ background-color: #282828;
+ border-right: 2px solid #49483e;
+ border-left: 4px solid #282828;
+}
+
+div.cell.text_cell.unrendered .prompt {
+ font-family: monospace, monospace;
+ font-size: 9.5pt !important;
+ font-weight: normal;
+ color: #75715e !important;
+ text-align: right !important;
+ min-width: 14.5ex !important;
+ width: 14.5ex !important;
+ border-right: 2px solid #49483e;
+ border-left: 4px solid #282828;
+ background-color: #282828;
+}
+
+div.cell.text_cell.rendered .prompt {
+ border-right: 2px solid #49483e;
+}
+
+div.cell.text_cell.rendered.selected .prompt {
+ top: 0;
+ border-left: 4px solid #57564b;
+ border-right: 2px solid #49483e;
+}
+
+div.text_cell.unrendered.selected .prompt,
+div.text_cell.rendered.selected .prompt {
+ top: 0;
+ background: #282828;
+ border-left: 4px solid #33322b;
+ border-right: 2px solid #49483e;
+}
+
+div.rendered_html code {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ padding-top: 3px;
+ padding-left: 2px;
+ color: #f8f8f0;
+ background: #282828;
+ background-color: #282828;
+}
+
+pre,
+code,
+kbd,
+samp {
+ white-space: pre-wrap;
+}
+
+.well code,
+code {
+ font-family: monospace, monospace;
+ font-size: 11pt !important;
+ line-height: 170% !important;
+ color: #f8f8f0;
+ background: #282828;
+ background-color: #282828;
+ border-color: #282828;
+}
+
+kbd {
+ padding: 1px;
+ font-size: 11pt;
+ font-weight: 800;
+ color: #f8f8f0;
+ background-color: transparent !important;
+ border: 0;
+ box-shadow: none;
+}
+
+pre {
+ display: block;
+ padding: 8.5px;
+ margin: 0 0 9px;
+ font-size: 12pt;
+ line-height: 1.42857143;
+ color: #f8f8f0;
+ background-color: #282828;
+ border: 1px solid #282828;
+ border-radius: 2px;
+}
+
+div.rendered_html {
+ color: #f8f8f0;
+}
+
+.rendered_html * + ul {
+ margin-top: 0.4em;
+ margin-bottom: 0.3em;
+}
+
+.rendered_html * + p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+div.rendered_html pre {
+ font-family: monospace, monospace;
+ font-size: 11pt !important;
+ line-height: 170% !important;
+ color: #f8f8f0 !important;
+ background: #282828;
+ background-color: #282828;
+ max-width: 80%;
+ border-radius: 0px;
+ border-left: 3px solid #282828;
+ max-width: 80%;
+ border-radius: 0px;
+ padding-left: 5px;
+ margin-left: 6px;
+}
+
+div.text_cell_render pre,
+div.text_cell_render code {
+ font-family: monospace, monospace;
+ font-size: 11pt !important;
+ line-height: 170% !important;
+ color: #f8f8f0;
+ background: #1e1e1e;
+ background-color: #1e1e1e;
+ max-width: 80%;
+ border-radius: 0px;
+ border-left: none;
+}
+
+div.text_cell_render pre {
+ border-left: 3px solid #49483e !important;
+ max-width: 80%;
+ border-radius: 0px;
+ padding-left: 5px;
+ margin-left: 6px;
+}
+
+div.text_cell_render h1,
+div.rendered_html h1,
+div.text_cell_render h2,
+div.rendered_html h2,
+div.text_cell_render h3,
+div.rendered_html h3,
+div.text_cell_render h4,
+div.rendered_html h4,
+div.text_cell_render h5,
+div.rendered_html h5 {
+ font-family: sans-serif;
+ margin: 0.4em 0.2em 0.3em 0.2em !important;
+}
+
+.rendered_html h1:first-child,
+.rendered_html h2:first-child,
+.rendered_html h3:first-child,
+.rendered_html h4:first-child,
+.rendered_html h5:first-child,
+.rendered_html h6:first-child {
+ margin-top: 0.2em !important;
+ margin-bottom: 0.2em !important;
+}
+
+.rendered_html h1,
+.text_cell_render h1 {
+ color: #a6e22e !important;
+ font-size: 200%;
+ text-align: left;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.rendered_html h2,
+.text_cell_render h2 {
+ color: #a6e22e !important;
+ font-size: 170%;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.rendered_html h3,
+.text_cell_render h3 {
+ color: #a6e22e !important;
+ font-size: 140%;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.rendered_html h4,
+.text_cell_render h4 {
+ color: #a6e22e !important;
+ font-size: 110%;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.rendered_html h5,
+.text_cell_render h5 {
+ color: #a6e22e !important;
+ font-size: 100%;
+ font-style: normal;
+ font-weight: normal;
+}
+
+hr {
+ margin-top: 8px;
+ margin-bottom: 10px;
+ border: 0;
+ border-top: 1px solid #a6e22e;
+}
+
+.rendered_html hr {
+ color: #a6e22e;
+ background-color: #a6e22e;
+ margin-right: 2em;
+}
+
+#complete > select > option:hover {
+ background: rgba(93, 92, 82, 0.25);
+ background-color: rgba(93, 92, 82, 0.25);
+}
+
+div#_vivaldi-spatnav-focus-indicator._vivaldi-spatnav-focus-indicator {
+ position: absolute;
+ z-index: 9999999999;
+ top: 0px;
+ left: 0px;
+ box-shadow: none;
+ pointer-events: none;
+ border-radius: 2px;
+}
+
+.rendered_html tr,
+.rendered_html th,
+.rendered_html td {
+ text-align: left;
+ vertical-align: middle;
+ padding: 0.42em 0.47em;
+ line-height: normal;
+ white-space: normal;
+ max-width: none;
+ border: none;
+}
+
+.rendered_html td {
+ font-family: sans-serif !important;
+ font-size: 9.3pt;
+}
+
+.rendered_html table {
+ font-family: sans-serif !important;
+ margin-left: 8px;
+ margin-right: auto;
+ border: none;
+ border-collapse: collapse;
+ border-spacing: 0;
+ color: #cccccc;
+ table-layout: fixed;
+}
+
+.rendered_html thead {
+ font-family: sans-serif !important;
+ font-size: 10.3pt !important;
+ background: #1e1e1e;
+ color: #cccccc;
+ border-bottom: 1px solid #1e1e1e;
+ vertical-align: bottom;
+}
+
+.rendered_html tbody tr:nth-child(odd) {
+ background: #282828;
+}
+
+.rendered_html tbody tr {
+ background: #202020;
+}
+
+.rendered_html tbody tr:hover:nth-child(odd) {
+ background: #252525;
+}
+
+.rendered_html tbody tr:hover {
+ background: #1e1e1e;
+}
+
+.rendered_html * + table {
+ margin-top: 0.05em;
+}
+
+div.widget-area {
+ background-color: #232323;
+ background: #232323;
+ color: #cccccc;
+}
+
+div.widget-area a {
+ font-family: sans-serif;
+ font-size: 12pt;
+ font-weight: normal;
+ font-style: normal;
+ color: #f8f8f0;
+ text-shadow: none !important;
+}
+
+div.widget-area a:hover,
+div.widget-area a:focus {
+ font-family: sans-serif;
+ font-size: 12pt;
+ font-weight: normal;
+ font-style: normal;
+ color: #f8f8f0;
+ background: rgba(93, 92, 82, 0.25);
+ background-color: rgba(93, 92, 82, 0.25);
+ border-color: transparent;
+ background-image: none;
+ text-shadow: none !important;
+}
+
+div.widget_item.btn-group > button.btn.btn-default.widget-combo-btn,
+div.widget_item.btn-group > button.btn.btn-default.widget-combo-btn:hover {
+ background: #2c2c2c;
+ background-color: #2c2c2c;
+ border: 2px solid #2c2c2c !important;
+ font-size: inherit;
+ z-index: 0;
+}
+
+div.jupyter-widgets.widget-hprogress.widget-hbox {
+ display: inline-table !important;
+ width: 38% !important;
+ margin-left: 10px;
+}
+
+div.jupyter-widgets.widget-hprogress.widget-hbox .widget-label,
+div.widget-hbox .widget-label,
+.widget-hbox .widget-label,
+.widget-inline-hbox .widget-label,
+div.widget-label {
+ text-align: -webkit-auto !important;
+ margin-left: 15px !important;
+ max-width: 240px !important;
+ min-width: 100px !important;
+ vertical-align: text-top !important;
+ color: #cccccc !important;
+ font-size: 14px !important;
+}
+
+.widget-hprogress .progress {
+ flex-grow: 1;
+ height: 20px;
+ margin-top: auto;
+ margin-left: 12px;
+ margin-bottom: auto;
+ width: 300px;
+}
+
+.progress {
+ overflow: hidden;
+ height: 22px;
+ margin-bottom: 10px;
+ padding-left: 10px;
+ background-color: #49483e !important;
+ border-radius: 2px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ z-index: 10;
+}
+
+.progress-bar-danger {
+ background-color: #e74c3c !important;
+}
+
+.progress-bar-info {
+ background-color: #3498db !important;
+}
+
+.progress-bar-warning {
+ background-color: #ff914d !important;
+}
+
+.progress-bar-success {
+ background-color: #83a83b !important;
+}
+
+.widget-select select {
+ margin-left: 12px;
+}
+
+.rendered_html :link {
+ font-family: sans-serif;
+ font-size: 100%;
+ color: #a6e22e;
+ text-decoration: underline;
+}
+
+.rendered_html :visited,
+.rendered_html :visited:active,
+.rendered_html :visited:focus {
+ color: #acdf45;
+}
+
+.rendered_html :visited:hover,
+.rendered_html :link:hover {
+ font-family: sans-serif;
+ font-size: 100%;
+ color: #97dc0b;
+}
+
+div.cell.text_cell a.anchor-link:link {
+ font-size: inherit;
+ text-decoration: none;
+ padding: 0px 20px;
+ visibility: none;
+ color: rgba(0, 0, 0, 0.32);
+}
+
+div.cell.text_cell a.anchor-link:link:hover {
+ font-size: inherit;
+ color: #a6e22e;
+}
+
+.navbar-text {
+ margin-top: 4px;
+ margin-bottom: 0px;
+}
+
+#clusters > a {
+ color: #a6e22e;
+ text-decoration: underline;
+ cursor: auto;
+}
+
+#clusters > a:hover {
+ color: #ae81ff;
+ text-decoration: underline;
+ cursor: auto;
+}
+
+#nbextensions-configurator-container > div.row.container-fluid.nbext-selector > h3 {
+ font-size: 17px;
+ margin-top: 5px;
+ margin-bottom: 8px;
+ height: 24px;
+ padding: 4px 0 4px 0;
+}
+
+div#nbextensions-configurator-container.container,
+#nbextensions-configurator-container.container {
+ width: 100%;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+div.nbext-selector > nav > .nav > li > a {
+ font-family: sans-serif;
+ font-size: 10.5pt;
+ padding: 2px 5px;
+}
+
+div.nbext-selector > nav > .nav > li > a:hover {
+ background: transparent;
+}
+
+div.nbext-selector > nav > .nav > li:hover {
+ background-color: rgba(93, 92, 82, 0.25) !important;
+ background: rgba(93, 92, 82, 0.25) !important;
+}
+
+div.nbext-selector > nav > .nav > li.active:hover {
+ background: transparent !important;
+ background-color: transparent !important;
+}
+
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:active,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #f8f8f2;
+ background-color: rgba(93, 92, 82, 0.25) !important;
+ background: rgba(93, 92, 82, 0.25) !important;
+ -webkit-backface-visibility: hidden;
+ -webkit-font-smoothing: subpixel-antialiased !important;
+}
+
+div.nbext-readme > .nbext-readme-contents > .rendered_html {
+ font-family: sans-serif;
+ font-size: 11.5pt;
+ line-height: 145%;
+ padding: 1em 1em;
+ color: #f8f8f0;
+ background-color: #282828;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.nbext-icon,
+.nbext-desc,
+.nbext-compat-div,
+.nbext-enable-btns,
+.nbext-params {
+ margin-bottom: 8px;
+ font-size: 11.5pt;
+}
+
+div.nbext-readme > .nbext-readme-contents {
+ padding: 0;
+ overflow-y: hidden;
+}
+
+div.nbext-readme > .nbext-readme-contents:not(:empty) {
+ margin-top: 0.5em;
+ margin-bottom: 2em;
+ border: none;
+ border-top-color: rgba(148, 204, 114, 0.2);
+}
+
+.nbext-showhide-incompat {
+ padding-bottom: 0.5em;
+ color: #888888;
+ font-size: 10.5pt;
+}
+
+.nbext-filter-menu.dropdown-menu > li > a:hover,
+.nbext-filter-menu.dropdown-menu > li > a:focus,
+.nbext-filter-menu.dropdown-menu > li > a.ui-state-focus {
+ color: #f8f8f0 !important;
+ background-color: rgba(93, 92, 82, 0.25) !important;
+ background: rgba(93, 92, 82, 0.25) !important;
+ border-color: rgba(93, 92, 82, 0.25) !important;
+}
+
+.nbext-filter-input-wrap > .nbext-filter-input-subwrap,
+.nbext-filter-input-wrap > .nbext-filter-input-subwrap > input {
+ border: none;
+ outline: none;
+ background-color: transparent;
+ padding: 0;
+ vertical-align: middle;
+ margin-top: -2px;
+}
+
+span.rendered_html code {
+ background-color: transparent;
+ color: #f8f8f0;
+}
+
+#nbextensions-configurator-container > div.row.container-fluid.nbext-selector {
+ padding-left: 0px;
+ padding-right: 0px;
+}
+
+.nbext-filter-menu {
+ max-height: 55vh !important;
+ overflow-y: auto;
+ outline: none;
+ border: none;
+}
+
+.nbext-filter-menu:hover {
+ border: none;
+}
+
+.alert-warning {
+ background-color: #232323;
+ border-color: #232323;
+ color: #f8f8f0;
+}
+
+.notification_widget.danger {
+ color: #ffffff;
+ background-color: #e74c3c;
+ border-color: #e74c3c;
+ padding-right: 5px;
+}
+
+#nbextensions-configurator-container > div.nbext-buttons.tree-buttons.no-padding.pull-right > span > button {
+ border: none !important;
+}
+
+button#refresh_running_list {
+ border: none !important;
+}
+
+mark,
+.mark {
+ background-color: #282828;
+ color: #f8f8f0;
+ padding: 0.15em;
+}
+
+a.text-warning,
+a.text-warning:hover {
+ color: #75715e;
+}
+
+a.text-warning.bg-warning {
+ background-color: #1e1e1e;
+}
+
+span.bg-success.text-success {
+ background-color: transparent;
+ color: #a6e22e;
+}
+
+span.bg-danger.text-danger {
+ background-color: #1e1e1e;
+ color: #f92672;
+}
+
+.has-success .input-group-addon {
+ color: #a6e22e;
+ border-color: transparent;
+ background: inherit;
+ background-color: rgba(83, 180, 115, 0.1);
+}
+
+.has-success .form-control {
+ border-color: #a6e22e;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
+}
+
+.has-error .input-group-addon {
+ color: #f92672;
+ border-color: transparent;
+ background: inherit;
+ background-color: rgba(192, 57, 67, 0.1);
+}
+
+.has-error .form-control {
+ border-color: #f92672;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025);
+}
+
+.kse-input-group-pretty > kbd {
+ font-family: monospace, monospace;
+ color: #f8f8f0;
+ font-weight: normal;
+ background: transparent;
+}
+
+.kse-input-group-pretty > kbd {
+ font-family: monospace, monospace;
+ color: #f8f8f0;
+ font-weight: normal;
+ background: transparent;
+}
+
+div.nbext-enable-btns .btn[disabled],
+div.nbext-enable-btns .btn[disabled]:hover,
+.btn-default.disabled,
+.btn-default[disabled] {
+ background: #2c2c2c;
+ background-color: #2c2c2c;
+ color: #f3f3e6;
+}
+
+label#Keyword-Filter {
+ display: none;
+}
+
+.input-group .nbext-list-btn-add,
+.input-group-btn:last-child > .btn-group > .btn {
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border-color: #2f2f2f;
+ border: 2px solid #2f2f2f;
+}
+
+.input-group .nbext-list-btn-add:hover,
+.input-group-btn:last-child > .btn-group > .btn:hover {
+ background: #2a2a2a;
+ background-color: #2a2a2a;
+ border-color: #2a2a2a;
+ border: 2px solid #2a2a2a;
+}
+
+#notebook-container
+ > div.cell.code_cell.rendered.selected
+ > div.widget-area
+ > div.widget-subarea
+ > div
+ > div.widget_item.btn-group
+ > button.btn.btn-default.dropdown-toggle.widget-combo-carrot-btn {
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border-color: #2f2f2f;
+}
+
+#notebook-container
+ > div.cell.code_cell.rendered.selected
+ > div.widget-area
+ > div.widget-subarea
+ > div
+ > div.widget_item.btn-group
+ > button.btn.btn-default.dropdown-toggle.widget-combo-carrot-btn:hover {
+ background: #2a2a2a;
+ background-color: #2a2a2a;
+ border-color: #2a2a2a;
+}
+
+.ui-widget-content {
+ background: #2f2f2f;
+ background-color: #2f2f2f;
+ border: 2px solid #2f2f2f;
+ color: #f8f8f0;
+}
+
+div.collapsible_headings_toggle {
+ color: rgba(93, 92, 82, 0.5) !important;
+}
+
+div.collapsible_headings_toggle:hover {
+ color: #a6e22e !important;
+}
+
+.collapsible_headings_toggle .h1,
+.collapsible_headings_toggle .h2,
+.collapsible_headings_toggle .h3,
+.collapsible_headings_toggle .h4,
+.collapsible_headings_toggle .h5,
+.collapsible_headings_toggle .h6 {
+ margin: 0.3em 0.4em 0em 0em !important;
+ line-height: 1.2 !important;
+}
+
+div.collapsible_headings_toggle .fa-caret-down:before,
+div.collapsible_headings_toggle .fa-caret-right:before {
+ font-size: xx-large;
+ transition: transform 1000ms;
+ transform: none !important;
+}
+
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h1:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h2:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h3:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h4:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h5:after,
+.collapsible_headings_collapsed.collapsible_headings_ellipsis .rendered_html h6:after {
+ position: absolute;
+ right: 0;
+ bottom: 20% !important;
+ content: "[\002026]";
+ color: rgba(93, 92, 82, 0.5) !important;
+ padding: 0.5em 0em 0em 0em !important;
+}
+
+.collapsible_headings_ellipsis .rendered_html h1,
+.collapsible_headings_ellipsis .rendered_html h2,
+.collapsible_headings_ellipsis .rendered_html h3,
+.collapsible_headings_ellipsis .rendered_html h4,
+.collapsible_headings_ellipsis .rendered_html h5,
+.collapsible_headings_ellipsis .rendered_html h6,
+.collapsible_headings_toggle .fa {
+ transition: transform 1000ms !important;
+ -webkit-transform: inherit !important;
+ -moz-transform: inherit !important;
+ -ms-transform: inherit !important;
+ -o-transform: inherit !important;
+ transform: inherit !important;
+ padding-right: 0px !important;
+}
+
+#toc-wrapper {
+ z-index: 90;
+ position: fixed !important;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+ padding: 10px;
+ border-style: solid;
+ border-width: thin;
+ border-right-width: medium !important;
+ background-color: #1e1e1e !important;
+}
+
+#toc-wrapper.ui-draggable.ui-resizable.sidebar-wrapper {
+ border-color: rgba(93, 92, 82, 0.25) !important;
+}
+
+#toc a,
+#navigate_menu a,
+.toc {
+ color: #f8f8f0 !important;
+ font-size: 11pt !important;
+}
+
+#toc li > span:hover {
+ background-color: rgba(93, 92, 82, 0.25) !important;
+}
+
+#toc a:hover,
+#navigate_menu a:hover,
+.toc {
+ color: #f8f8f2 !important;
+ font-size: 11pt !important;
+}
+
+#toc-wrapper .toc-item-num {
+ color: #a6e22e !important;
+ font-size: 11pt !important;
+}
+
+input.raw_input {
+ font-family: monospace, monospace;
+ font-size: 11pt !important;
+ color: #f8f8f0;
+ background-color: #282828;
+ border-color: #252525;
+ background: #252525;
+ width: auto;
+ vertical-align: baseline;
+ padding: 0em 0.25em;
+ margin: 0em 0.25em;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+audio,
+video {
+ display: inline;
+ vertical-align: middle;
+ align-content: center;
+ margin-left: 20%;
+}
+
+.cmd-palette .modal-body {
+ padding: 0px;
+ margin: 0px;
+}
+
+.cmd-palette form {
+ background: #293547;
+ background-color: #293547;
+}
+
+.typeahead-field input:last-child,
+.typeahead-hint {
+ background: #293547;
+ background-color: #293547;
+ z-index: 1;
+}
+
+.typeahead-field input {
+ font-family: sans-serif;
+ color: #f8f8f0;
+ border: none;
+ font-size: 28pt;
+ display: inline-block;
+ line-height: inherit;
+ padding: 3px 10px;
+ height: 70px;
+}
+
+.typeahead-select {
+ background-color: #293547;
+}
+
+body > div.modal.cmd-palette.typeahead-field {
+ display: table;
+ border-collapse: separate;
+ background-color: #2b3850;
+}
+
+.typeahead-container button {
+ font-family: sans-serif;
+ font-size: 28pt;
+ background-color: #2f2f2f;
+ border: none;
+ display: inline-block;
+ line-height: inherit;
+ padding: 3px 10px;
+ height: 70px;
+}
+
+.typeahead-search-icon {
+ min-width: 40px;
+ min-height: 55px;
+ display: block;
+ vertical-align: middle;
+ text-align: center;
+}
+
+.typeahead-container button:focus,
+.typeahead-container button:hover {
+ color: #f8f8f0;
+ background-color: #2a2a2a;
+ border-color: #2a2a2a;
+}
+
+.typeahead-list > li.typeahead-group.active > a,
+.typeahead-list > li.typeahead-group > a,
+.typeahead-list > li.typeahead-group > a:focus,
+.typeahead-list > li.typeahead-group > a:hover {
+ display: none;
+}
+
+.typeahead-dropdown > li > a,
+.typeahead-list > li > a {
+ color: #f8f8f0;
+ text-decoration: none;
+}
+
+.typeahead-dropdown,
+.typeahead-list {
+ font-family: sans-serif;
+ font-size: 13pt;
+ color: #f8f8f0;
+ background-color: #202937;
+ border: none;
+ background-clip: padding-box;
+ margin-top: 0px;
+ padding: 3px 2px 3px 0px;
+ line-height: 1.7;
+}
+
+.typeahead-dropdown > li.active > a,
+.typeahead-dropdown > li > a:focus,
+.typeahead-dropdown > li > a:hover,
+.typeahead-list > li.active > a,
+.typeahead-list > li > a:focus,
+.typeahead-list > li > a:hover {
+ color: #f8f8f0;
+ background-color: #2b3850;
+ border-color: #2b3850;
+}
+
+.command-shortcut:before {
+ content: "(command)";
+ padding-right: 3px;
+ color: #75715e;
+}
+
+.edit-shortcut:before {
+ content: "(edit)";
+ padding-right: 3px;
+ color: #75715e;
+}
+
+ul.typeahead-list i {
+ margin-left: 1px;
+ width: 18px;
+ margin-right: 10px;
+}
+
+ul.typeahead-list {
+ max-height: 50vh;
+ overflow: auto;
+}
+
+.typeahead-list > li {
+ position: relative;
+ border: none;
+}
+
+div.input.typeahead-hint,
+input.typeahead-hint,
+body > div.modal.cmd-palette.in > div > div > div > form > div > div.typeahead-field > span.typeahead-query > input.typeahead-hint {
+ color: #75715e !important;
+ background-color: transparent;
+ padding: 3px 10px;
+}
+
+.typeahead-dropdown > li > a,
+.typeahead-list > li > a {
+ display: block;
+ padding: 5px;
+ clear: both;
+ font-weight: 400;
+ line-height: 1.7;
+ border: 1px solid #202937;
+ border-bottom-color: rgba(93, 92, 82, 0.5);
+}
+
+body > div.modal.cmd-palette.in > div {
+ min-width: 750px;
+ margin: 150px auto;
+}
+
+.typeahead-container strong {
+ font-weight: bolder;
+ color: #a6e22e;
+}
+
+#find-and-replace #replace-preview .match,
+#find-and-replace #replace-preview .insert {
+ color: #ffffff;
+ background-color: #57564b;
+ border-color: #57564b;
+ border-style: solid;
+ border-width: 1px;
+ border-radius: 0px;
+}
+
+#find-and-replace #replace-preview .replace .match {
+ background-color: #f92672;
+ border-color: #f92672;
+ border-radius: 0px;
+}
+
+#find-and-replace #replace-preview .replace .insert {
+ background-color: #a6e22e;
+ border-color: #a6e22e;
+ border-radius: 0px;
+}
+
+.jupyter-dashboard-menu-item.selected::before {
+ font-family: "FontAwesome" !important;
+ content: "\f00c" !important;
+ position: absolute !important;
+ color: #a6e22e !important;
+ left: 0px !important;
+ top: 13px !important;
+ font-size: 12px !important;
+}
+
+.shortcut_key,
+span.shortcut_key {
+ display: inline-block;
+ width: 16ex;
+ text-align: right;
+ font-family: monospace;
+}
+
+.jupyter-keybindings {
+ padding: 1px;
+ line-height: 24px;
+ border-bottom: 1px solid rgba(93, 92, 82, 0.25);
+}
+
+.jupyter-keybindings i {
+ background: #282828;
+ font-size: small;
+ padding: 5px;
+ margin-left: 7px;
+}
+
+div#short-key-bindings-intro.well,
+.well {
+ background-color: #2f2f2f;
+ border: 1px solid #2f2f2f;
+ color: #f8f8f0;
+ border-radius: 2px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#texteditor-backdrop {
+ background: #1e1e1e;
+ background-color: #1e1e1e;
+}
+
+#texteditor-backdrop #texteditor-container .CodeMirror-gutter,
+#texteditor-backdrop #texteditor-container .CodeMirror-gutters {
+ background: #49483e;
+ background-color: #49483e;
+ color: #75715e;
+}
+
+.edit_app #menubar .navbar {
+ margin-bottom: 0px;
+}
+
+#texteditor-backdrop #texteditor-container {
+ padding: 0px;
+ background-color: #282828;
+ box-shadow: none;
+}
+
+.terminal-app {
+ background: #1e1e1e;
+}
+
+.terminal-app > #header {
+ background: #1e1e1e;
+}
+
+.terminal-app .terminal {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ line-height: 170%;
+ color: #f8f8f0;
+ background: #282828;
+ padding: 0.4em;
+ border-radius: 2px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.terminal .xterm-viewport {
+ background-color: #282828;
+ color: #f8f8f0;
+ overflow-y: auto;
+}
+
+.terminal .xterm-color-0 {
+ color: #a6e22e;
+}
+
+.terminal .xterm-color-1 {
+ color: #a6e22e;
+}
+
+.terminal .xterm-color-2 {
+ color: #f92672;
+}
+
+.terminal .xterm-color-3 {
+ color: #a6e22e;
+}
+
+.terminal .xterm-color-4 {
+ color: #ae81ff;
+}
+
+.terminal .xterm-color-5 {
+ color: #e6db74;
+}
+
+.terminal .xterm-color-6 {
+ color: #a6e22e;
+}
+
+.terminal .xterm-color-7 {
+ color: #a6e22e;
+}
+
+.terminal .xterm-color-8 {
+ color: #a6e22e;
+}
+
+.terminal .xterm-color-9 {
+ color: #e6db74;
+}
+
+.terminal .xterm-color-10 {
+ color: #a6e22e;
+}
+
+.terminal .xterm-color-14 {
+ color: #a6e22e;
+}
+
+.terminal .xterm-bg-color-15 {
+ background-color: #282828;
+}
+
+.terminal:not(.xterm-cursor-style-underline):not(.xterm-cursor-style-bar) .terminal-cursor {
+ background-color: #a6e22e;
+ color: #282828;
+}
+
+.terminal:not(.focus) .terminal-cursor {
+ outline: 1px solid #a6e22e;
+ outline-offset: -1px;
+}
+
+.celltoolbar {
+ font-size: 100%;
+ padding-top: 3px;
+ border-color: transparent;
+ border-bottom: thin solid rgba(148, 204, 114, 0.2);
+ background: transparent;
+}
+
+.cell-tag,
+.tags-input input,
+.tags-input button {
+ color: #f8f8f0;
+ background-color: #1e1e1e;
+ background-image: none;
+ border: 1px solid #f8f8f0;
+ border-radius: 1px;
+ box-shadow: none;
+ width: inherit;
+ font-size: inherit;
+ height: 22px;
+ line-height: 22px;
+}
+
+#notebook-container > div.cell.code_cell.rendered.selected > div.input > div.inner_cell > div.ctb_hideshow.ctb_show > div > div > button,
+#notebook-container > div.input > div.inner_cell > div.ctb_hideshow.ctb_show > div > div > button {
+ font-size: 10pt;
+ color: #f8f8f0;
+ background-color: #1e1e1e;
+ background-image: none;
+ border: 1px solid #f8f8f0;
+ border-radius: 1px;
+ box-shadow: none;
+ width: inherit;
+ font-size: inherit;
+ height: 22px;
+ line-height: 22px;
+}
+
+div#pager #pager-contents {
+ background: #1e1e1e !important;
+ background-color: #1e1e1e !important;
+}
+
+div#pager pre {
+ color: #f8f8f0 !important;
+ background: #282828 !important;
+ background-color: #282828 !important;
+ padding: 0.4em;
+}
+
+div#pager .ui-resizable-handle {
+ top: 0px;
+ height: 8px;
+ background: #a6e22e !important;
+ border-top: 1px solid #a6e22e;
+ border-bottom: 1px solid #a6e22e;
+}
+
+div.CodeMirror,
+div.CodeMirror pre {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ line-height: 170%;
+ color: #f8f8f0;
+}
+
+div.CodeMirror-lines {
+ padding-bottom: 0.9em;
+ padding-left: 0.5em;
+ padding-right: 1.5em;
+ padding-top: 0.7em;
+}
+
+span.ansiblack,
+.ansi-black-fg {
+ color: #282828;
+}
+
+span.ansiblue,
+.ansi-blue-fg,
+.ansi-blue-intense-fg {
+ color: #66d9ef;
+}
+
+span.ansigray,
+.ansi-gray-fg,
+.ansi-gray-intense-fg {
+ color: #888888;
+}
+
+span.ansigreen,
+.ansi-green-fg {
+ color: #a6e22e;
+}
+
+.ansi-green-intense-fg {
+ color: #888888;
+}
+
+span.ansipurple,
+.ansi-purple-fg,
+.ansi-purple-intense-fg {
+ color: #ae81ff;
+}
+
+span.ansicyan,
+.ansi-cyan-fg,
+.ansi-cyan-intense-fg {
+ color: #ae81ff;
+}
+
+span.ansiyellow,
+.ansi-yellow-fg,
+.ansi-yellow-intense-fg {
+ color: #e6db74;
+}
+
+span.ansired,
+.ansi-red-fg,
+.ansi-red-intense-fg {
+ color: #f92672;
+}
+
+div.output-stderr {
+ background-color: #f92672;
+}
+
+div.output-stderr pre {
+ color: #f8f8f2;
+}
+
+div.js-error {
+ color: #f92672;
+}
+
+.ipython_tooltip {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ line-height: 170%;
+ border: 2px solid #141414;
+ background: #282828;
+ background-color: #282828;
+ border-radius: 2px;
+ overflow-x: visible;
+ overflow-y: visible;
+ box-shadow: none;
+ position: absolute;
+ z-index: 1000;
+}
+
+.ipython_tooltip .tooltiptext pre {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ line-height: 170%;
+ background: #282828;
+ background-color: #282828;
+ color: #f8f8f0;
+ overflow-x: visible;
+ overflow-y: visible;
+ max-width: 900px;
+}
+
+div#tooltip.ipython_tooltip {
+ overflow-x: wrap;
+ overflow-y: visible;
+ max-width: 800px;
+}
+
+div.tooltiptext.bigtooltip {
+ overflow-x: visible;
+ overflow-y: scroll;
+ height: 400px;
+ max-width: 800px;
+}
+
+.cm-s-ipython.CodeMirror {
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ background: #282828;
+ color: #f8f8f0;
+ border-radius: 2px;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.cm-s-ipython div.CodeMirror-selected {
+ background: #49483e;
+}
+
+.CodeMirror-gutters {
+ border: none;
+ border-right: 1px solid #49483e !important;
+ background-color: #49483e !important;
+ background: #49483e !important;
+ border-radius: 0px;
+ white-space: nowrap;
+}
+
+.cm-s-ipython .CodeMirror-gutters {
+ background: #49483e;
+ border: none;
+ border-radius: 0px;
+ width: 36px;
+}
+
+.cm-s-ipython .CodeMirror-linenumber {
+ color: #75715e;
+}
+
+.CodeMirror-sizer {
+ margin-left: 40px;
+}
+
+.CodeMirror-linenumber,
+div.CodeMirror-linenumber,
+.CodeMirror-gutter.CodeMirror-linenumberdiv.CodeMirror-gutter.CodeMirror-linenumber {
+ padding-right: 1px;
+ margin-left: 0px;
+ margin: 0px;
+ width: 26px !important;
+ padding: 0px;
+ text-align: right;
+}
+
+.CodeMirror-linenumber {
+ color: #75715e;
+}
+
+.cm-s-ipython .CodeMirror-cursor {
+ border-left: 2px solid #0095ff !important;
+}
+
+.cm-s-ipython span.cm-comment {
+ color: #75715e;
+ font-style: italic;
+}
+
+.cm-s-ipython span.cm-atom {
+ color: #ae81ff;
+}
+
+.cm-s-ipython span.cm-number {
+ color: #ae81ff;
+}
+
+.cm-s-ipython span.cm-property {
+ color: #f8f8f0;
+}
+
+.cm-s-ipython span.cm-attribute {
+ color: #f8f8f0;
+}
+
+.cm-s-ipython span.cm-keyword {
+ color: #f92672;
+ font-weight: normal;
+}
+
+.cm-s-ipython span.cm-string {
+ color: #e6db74;
+}
+
+.cm-s-ipython span.cm-meta {
+ color: #fd971f;
+}
+
+.cm-s-ipython span.cm-operator {
+ color: #a6e22e;
+}
+
+.cm-s-ipython span.cm-builtin {
+ color: #a6e22e;
+}
+
+.cm-s-ipython span.cm-variable {
+ color: #f8f8f0;
+}
+
+.cm-s-ipython span.cm-variable-2 {
+ color: #a6e22e;
+}
+
+.cm-s-ipython span.cm-variable-3 {
+ color: #fd971f;
+}
+
+.cm-s-ipython span.cm-def {
+ color: #a6e22e;
+ font-weight: normal;
+}
+
+.cm-s-ipython span.cm-error {
+ background: rgba(249, 38, 114, 0.4);
+}
+
+.cm-s-ipython span.cm-tag {
+ color: #ae81ff;
+}
+
+.cm-s-ipython span.cm-link {
+ color: #a6e22e;
+}
+
+.cm-s-ipython span.cm-storage {
+ color: #ae81ff;
+}
+
+.cm-s-ipython span.cm-entity {
+ color: #a6e22e;
+}
+
+.cm-s-ipython span.cm-quote {
+ color: #e6db74;
+}
+
+div.CodeMirror span.CodeMirror-matchingbracket {
+ color: #ffffff;
+ font-weight: bold;
+ background-color: #49483e;
+}
+
+div.CodeMirror span.CodeMirror-nonmatchingbracket {
+ color: #ffffff;
+ font-weight: bold;
+ background: rgba(249, 38, 114, 0.4) !important;
+}
+
+.cm-header-1 {
+ font-size: 215%;
+}
+
+.cm-header-2 {
+ font-size: 180%;
+}
+
+.cm-header-3 {
+ font-size: 150%;
+}
+
+.cm-header-4 {
+ font-size: 120%;
+}
+
+.cm-header-5 {
+ font-size: 100%;
+}
+
+.cm-s-default .cm-hr {
+ color: #a6e22e;
+}
+
+div.cell.text_cell .cm-s-default .cm-header {
+ font-family: sans-serif;
+ font-weight: normal;
+ color: #a6e22e !important;
+ margin-top: 0.3em !important;
+ margin-bottom: 0.3em !important;
+}
+
+div.cell.text_cell .cm-s-default span.cm-variable-2 {
+ color: #f8f8f0 !important;
+}
+
+div.cell.text_cell .cm-s-default span.cm-variable-3 {
+ color: #fd971f !important;
+}
+
+.cm-s-default span.cm-comment {
+ color: #75715e !important;
+}
+
+.cm-s-default .cm-tag {
+ color: #529b2f;
+}
+
+.cm-s-default .cm-builtin {
+ color: #a6e22e;
+}
+
+.cm-s-default .cm-string {
+ color: #e6db74;
+}
+
+.cm-s-default .cm-keyword {
+ color: #f92672;
+}
+
+.cm-s-default .cm-number {
+ color: #ae81ff;
+}
+
+.cm-s-default .cm-error {
+ color: #ae81ff;
+}
+
+.cm-s-default .cm-link {
+ color: #a6e22e;
+}
+
+.cm-s-default .cm-atom {
+ color: #ae81ff;
+}
+
+.cm-s-default .cm-def {
+ color: #a6e22e;
+}
+
+.CodeMirror-cursor {
+ border-left: 2px solid #0095ff !important;
+ border-right: none;
+ width: 0;
+}
+
+.cm-s-default div.CodeMirror-selected {
+ background: #49483e;
+}
+
+.cm-s-default .cm-selected {
+ background: #49483e;
+}
+
+.MathJax_Display,
+.MathJax {
+ border: 0 !important;
+ font-size: 100% !important;
+ text-align: center !important;
+ margin: 0em !important;
+ line-height: 2.25 !important;
+}
+
+.MathJax:focus,
+body :focus .MathJax {
+ display: inline-block !important;
+}
+
+.MathJax:focus,
+body :focus .MathJax {
+ display: inline-block !important;
+}
+
+.completions {
+ position: absolute;
+ z-index: 110;
+ overflow: hidden;
+ border: medium solid #49483e;
+ box-shadow: none;
+ line-height: 1;
+}
+
+.completions select {
+ background: #282828;
+ background-color: #282828;
+ outline: none;
+ border: none;
+ padding: 0px;
+ margin: 0px;
+ margin-left: 2px;
+ overflow: auto;
+ font-family: monospace, monospace;
+ font-size: 11pt;
+ color: #f8f8f0;
+ width: auto;
+}
+
+div#maintoolbar {
+ display: none !important;
+}
+
+#header-container {
+ display: none !important;
+}
diff --git a/assets/css/jupyter.css b/assets/css/jupyter.css
index 9c2feea0..ab06bace 100644
--- a/assets/css/jupyter.css
+++ b/assets/css/jupyter.css
@@ -1,383 +1,383 @@
-/******************************************************************************
-* Jupyter notebooks styles
-*
-* Created basically from exporting the notebook to HTML for both light and dark
-* modes with
-* jupyter nbconvert --execute --to html blog.ipynb --HTMLExporter.theme=light
-* and
-* jupyter nbconvert --execute --to html blog.ipynb --HTMLExporter.theme=dark
-* and diffing the results. Here are only the differences.
-******************************************************************************/
-:root {
- /* Elevation
- *
- * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here:
- *
- * https://github.com/material-components/material-components-web
- * https://material-components-web.appspot.com/elevation.html
- */
- --jp-shadow-base-lightness: 0;
-
- /* Borders
- *
- * The following variables, specify the visual styling of borders in JupyterLab.
- */
- --jp-border-color0: var(--md-grey-400);
- --jp-border-color1: var(--md-grey-400);
- --jp-border-color2: var(--md-grey-300);
- --jp-border-color3: var(--md-grey-200);
-
- /*
- * Use these font colors against the corresponding main layout colors.
- * In a light theme, these go from dark to light.
- */
-
- /* Defaults use Material Design specification */
- --jp-ui-font-color0: rgba(0, 0, 0, 1);
- --jp-ui-font-color1: rgba(0, 0, 0, 0.87);
- --jp-ui-font-color2: rgba(0, 0, 0, 0.54);
- --jp-ui-font-color3: rgba(0, 0, 0, 0.38);
-
- /*
- * Use these against the brand/accent/warn/error colors.
- * These will typically go from light to darker, in both a dark and light theme.
- */
- --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1);
- --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1);
- --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7);
- --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5);
-
- /* Content Fonts
- *
- * Content font variables are used for typography of user generated content.
- *
- * The font sizing here is done assuming that the body font size of --jp-content-font-size1
- * is applied to a parent element. When children elements, such as headings, are sized
- * in em all things will be computed relative to that body size.
- */
-
- /* Defaults use Material Design specification */
- --jp-content-font-color0: rgba(0, 0, 0, 1);
- --jp-content-font-color1: rgba(0, 0, 0, 0.87);
- --jp-content-font-color2: rgba(0, 0, 0, 0.54);
- --jp-content-font-color3: rgba(0, 0, 0, 0.38);
-
- --jp-content-link-color: var(--md-blue-700);
-
- /* Layout
- *
- * The following are the main layout colors use in JupyterLab. In a light
- * theme these would go from light to dark.
- */
- --jp-layout-color0: white;
- --jp-layout-color1: white;
- --jp-layout-color2: var(--md-grey-200);
- --jp-layout-color3: var(--md-grey-400);
-
- /* Inverse Layout
- *
- * The following are the inverse layout colors use in JupyterLab. In a light
- * theme these would go from dark to light.
- */
- --jp-inverse-layout-color0: #111111;
- --jp-inverse-layout-color1: var(--md-grey-900);
- --jp-inverse-layout-color2: var(--md-grey-800);
- --jp-inverse-layout-color3: var(--md-grey-700);
-
- /* Brand/accent */
- --jp-brand-color0: var(--md-blue-900);
- --jp-brand-color1: var(--md-blue-700);
-
- --jp-accent-color0: var(--md-green-900);
- --jp-accent-color1: var(--md-green-700);
-
- /* State colors (warn, error, success, info) */
- --jp-warn-color0: var(--md-orange-900);
- --jp-warn-color1: var(--md-orange-700);
-
- --jp-error-color0: var(--md-red-900);
- --jp-error-color1: var(--md-red-700);
-
- --jp-success-color0: var(--md-green-900);
- --jp-success-color1: var(--md-green-700);
-
- --jp-info-color0: var(--md-cyan-900);
- --jp-info-color1: var(--md-cyan-700);
-
- /* Cell specific styles */
- --jp-cell-editor-background: var(--md-grey-100);
- --jp-cell-editor-border-color: var(--md-grey-300);
-
- --jp-cell-prompt-not-active-opacity: 0.5;
- --jp-cell-prompt-not-active-font-color: var(--md-grey-700);
-
- /* Notebook specific styles */
- --jp-notebook-multiselected-color: var(--md-blue-50);
-
- /* Rendermime styles */
- --jp-rendermime-error-background: #fdd;
- --jp-rendermime-table-row-background: var(--md-grey-100);
- --jp-rendermime-table-row-hover-background: var(--md-light-blue-50);
-
- /* Dialog specific styles */
- --jp-dialog-background: rgba(0, 0, 0, 0.25);
-
- /* Toolbar specific styles */
- --jp-toolbar-border-color: var(--jp-border-color1);
- --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24);
- --jp-toolbar-active-background: var(--md-grey-300);
-
- /* Input field styles */
- --jp-input-active-background: var(--jp-layout-color1);
- --jp-input-hover-background: var(--jp-layout-color1);
- --jp-input-background: var(--md-grey-100);
-
- /* General editor styles */
- --jp-editor-selected-background: #d9d9d9;
- --jp-editor-selected-focused-background: #d7d4f0;
-
- /* Code mirror specific styles */
- --jp-mirror-editor-keyword-color: #008000;
- --jp-mirror-editor-atom-color: #88f;
- --jp-mirror-editor-number-color: #080;
- --jp-mirror-editor-def-color: #00f;
- --jp-mirror-editor-variable-color: var(--md-grey-900);
- --jp-mirror-editor-variable-2-color: #05a;
- --jp-mirror-editor-variable-3-color: #085;
- --jp-mirror-editor-punctuation-color: #05a;
- --jp-mirror-editor-property-color: #05a;
- --jp-mirror-editor-string-color: #ba2121;
- --jp-mirror-editor-string-2-color: #708;
- --jp-mirror-editor-builtin-color: #008000;
- --jp-mirror-editor-tag-color: #170;
- --jp-mirror-editor-attribute-color: #00c;
- --jp-mirror-editor-header-color: blue;
- --jp-mirror-editor-quote-color: #090;
- --jp-mirror-editor-link-color: #00c;
-
- /*
- RTC user specific colors.
- These colors are used for the cursor, username in the editor,
- and the icon of the user.
- */
- --jp-collaborator-color1: #ffad8e;
- --jp-collaborator-color2: #dac83d;
- --jp-collaborator-color3: #72dd76;
- --jp-collaborator-color4: #00e4d0;
- --jp-collaborator-color5: #45d4ff;
- --jp-collaborator-color6: #e2b1ff;
- --jp-collaborator-color7: #ff9de6;
-
- /* Vega extension styles */
- --jp-vega-background: white;
-
- /* Search-related styles */
- --jp-search-toggle-off-opacity: 0.5;
- --jp-search-selected-match-background-color: rgb(245, 200, 0);
-
- /* File or activity icons and switch semantic variables */
- --jp-json-icon-color: var(--md-orange-700);
- --jp-console-icon-background-color: var(--md-blue-700);
- --jp-terminal-icon-background-color: var(--md-grey-800);
- --jp-terminal-icon-color: var(--md-grey-200);
- --jp-text-editor-icon-color: var(--md-grey-700);
- --jp-inspector-icon-color: var(--md-grey-700);
- --jp-switch-true-position-color: var(--md-orange-900);
-
- @import "jupyter-grade3";
-}
-
-body[data-jp-theme-light="false"] {
- /* Elevation
- *
- * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here:
- *
- * https://github.com/material-components/material-components-web
- * https://material-components-web.appspot.com/elevation.html
- */
-
- /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout
- * colors used in the theme as well.
- */
- --jp-shadow-base-lightness: 32;
-
- /* Borders
- *
- * The following variables, specify the visual styling of borders in JupyterLab.
- */
- --jp-border-color0: var(--md-grey-700);
- --jp-border-color1: var(--md-grey-700);
- --jp-border-color2: var(--md-grey-800);
- --jp-border-color3: var(--md-grey-900);
-
- /*
- * Use these font colors against the corresponding main layout colors.
- * In a light theme, these go from dark to light.
- */
-
- /* Defaults use Material Design specification */
- --jp-ui-font-color0: rgba(255, 255, 255, 1);
- --jp-ui-font-color1: rgba(255, 255, 255, 0.87);
- --jp-ui-font-color2: rgba(255, 255, 255, 0.54);
- --jp-ui-font-color3: rgba(255, 255, 255, 0.38);
-
- /*
- * Use these against the brand/accent/warn/error colors.
- * These will typically go from light to darker, in both a dark and light theme.
- */
- --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1);
- --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8);
- --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5);
- --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3);
-
- /* Content Fonts
- *
- * Content font variables are used for typography of user generated content.
- *
- * The font sizing here is done assuming that the body font size of --jp-content-font-size1
- * is applied to a parent element. When children elements, such as headings, are sized
- * in em all things will be computed relative to that body size.
- */
-
- /* Defaults use Material Design specification */
- --jp-content-font-color0: rgba(255, 255, 255, 1);
- --jp-content-font-color1: rgba(255, 255, 255, 1);
- --jp-content-font-color2: rgba(255, 255, 255, 0.7);
- --jp-content-font-color3: rgba(255, 255, 255, 0.5);
-
- --jp-content-link-color: var(--md-blue-300);
-
- /* Layout
- *
- * The following are the main layout colors use in JupyterLab. In a light
- * theme these would go from light to dark.
- */
- --jp-layout-color0: var(--global-bg-color);
- --jp-layout-color1: var(--md-grey-900);
- --jp-layout-color2: var(--md-grey-800);
- --jp-layout-color3: var(--md-grey-700);
-
- /* Inverse Layout
- *
- * The following are the inverse layout colors use in JupyterLab. In a light
- * theme these would go from dark to light.
- */
- --jp-inverse-layout-color0: white;
- --jp-inverse-layout-color1: white;
- --jp-inverse-layout-color2: var(--md-grey-200);
- --jp-inverse-layout-color3: var(--md-grey-400);
-
- /* Brand/accent */
- --jp-brand-color0: var(--md-blue-700);
- --jp-brand-color1: var(--md-blue-500);
-
- --jp-accent-color0: var(--md-green-700);
- --jp-accent-color1: var(--md-green-500);
-
- /* State colors (warn, error, success, info) */
- --jp-warn-color0: var(--md-orange-700);
- --jp-warn-color1: var(--md-orange-500);
-
- --jp-error-color0: var(--md-red-700);
- --jp-error-color1: var(--md-red-500);
-
- --jp-success-color0: var(--md-green-700);
- --jp-success-color1: var(--md-green-500);
-
- --jp-info-color0: var(--md-cyan-700);
- --jp-info-color1: var(--md-cyan-500);
-
- /* Cell specific styles */
- --jp-cell-editor-background: var(--jp-layout-color1);
- --jp-cell-editor-border-color: var(--md-grey-700);
-
- --jp-cell-prompt-not-active-opacity: 1;
- --jp-cell-prompt-not-active-font-color: var(--md-grey-300);
-
- /* Notebook specific styles */
- --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24);
-
- /* Rendermime styles */
- --jp-rendermime-error-background: rgba(244, 67, 54, 0.28);
- --jp-rendermime-table-row-background: var(--md-grey-900);
- --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2);
-
- /* Dialog specific styles */
- --jp-dialog-background: rgba(0, 0, 0, 0.6);
-
- /* Toolbar specific styles */
- --jp-toolbar-border-color: var(--jp-border-color2);
- --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8);
- --jp-toolbar-active-background: var(--jp-layout-color0);
-
- /* Input field styles */
- --jp-input-active-background: var(--jp-layout-color0);
- --jp-input-hover-background: var(--jp-layout-color2);
- --jp-input-background: var(--md-grey-800);
-
- /* General editor styles */
- --jp-editor-selected-background: var(--jp-layout-color2);
- --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24);
-
- /* Code mirror specific styles */
- --jp-mirror-editor-keyword-color: var(--md-green-500);
- --jp-mirror-editor-atom-color: var(--md-blue-300);
- --jp-mirror-editor-number-color: var(--md-green-400);
- --jp-mirror-editor-def-color: var(--md-blue-600);
- --jp-mirror-editor-variable-color: var(--md-grey-300);
- --jp-mirror-editor-variable-2-color: var(--md-blue-400);
- --jp-mirror-editor-variable-3-color: var(--md-green-600);
- --jp-mirror-editor-punctuation-color: var(--md-blue-400);
- --jp-mirror-editor-property-color: var(--md-blue-400);
- --jp-mirror-editor-string-color: #ff7070;
- --jp-mirror-editor-string-2-color: var(--md-purple-300);
- --jp-mirror-editor-builtin-color: var(--md-green-600);
- --jp-mirror-editor-tag-color: var(--md-green-700);
- --jp-mirror-editor-attribute-color: var(--md-blue-700);
- --jp-mirror-editor-header-color: var(--md-blue-500);
- --jp-mirror-editor-quote-color: var(--md-green-300);
- --jp-mirror-editor-link-color: var(--md-blue-700);
-
- /*
- RTC user specific colors.
- These colors are used for the cursor, username in the editor,
- and the icon of the user.
- */
- --jp-collaborator-color1: #ad4a00;
- --jp-collaborator-color2: #7b6a00;
- --jp-collaborator-color3: #007e00;
- --jp-collaborator-color4: #008772;
- --jp-collaborator-color5: #0079b9;
- --jp-collaborator-color6: #8b45c6;
- --jp-collaborator-color7: #be208b;
-
- /* Vega extension styles */
- --jp-vega-background: var(--md-grey-400);
-
- /* Search-related styles */
- --jp-search-toggle-off-opacity: 0.6;
- --jp-search-selected-match-background-color: rgb(255, 225, 0);
-
- /* scrollbar related styles. Supports every browser except Edge. */
-
- /* colors based on JetBrain's Darcula theme */
- --jp-scrollbar-background-color: #3f4244;
- --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */
-
- --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */
-
- /* hacks for setting the thumb shape. These do nothing in Firefox */
- --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */
- --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */
-
- /* File or activity icons and switch semantic variables */
- --jp-json-icon-color: var(--md-orange-500);
- --jp-console-icon-background-color: var(--md-blue-500);
- --jp-terminal-icon-background-color: var(--md-grey-200);
- --jp-terminal-icon-color: var(--md-grey-800);
- --jp-text-editor-icon-color: var(--md-grey-200);
- --jp-inspector-icon-color: var(--md-grey-200);
- --jp-switch-true-position-color: var(--md-orange-700);
-
- @import "jupyter-monokai";
-}
+/******************************************************************************
+* Jupyter notebooks styles
+*
+* Created basically from exporting the notebook to HTML for both light and dark
+* modes with
+* jupyter nbconvert --execute --to html blog.ipynb --HTMLExporter.theme=light
+* and
+* jupyter nbconvert --execute --to html blog.ipynb --HTMLExporter.theme=dark
+* and diffing the results. Here are only the differences.
+******************************************************************************/
+:root {
+ /* Elevation
+ *
+ * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here:
+ *
+ * https://github.com/material-components/material-components-web
+ * https://material-components-web.appspot.com/elevation.html
+ */
+ --jp-shadow-base-lightness: 0;
+
+ /* Borders
+ *
+ * The following variables, specify the visual styling of borders in JupyterLab.
+ */
+ --jp-border-color0: var(--md-grey-400);
+ --jp-border-color1: var(--md-grey-400);
+ --jp-border-color2: var(--md-grey-300);
+ --jp-border-color3: var(--md-grey-200);
+
+ /*
+ * Use these font colors against the corresponding main layout colors.
+ * In a light theme, these go from dark to light.
+ */
+
+ /* Defaults use Material Design specification */
+ --jp-ui-font-color0: rgba(0, 0, 0, 1);
+ --jp-ui-font-color1: rgba(0, 0, 0, 0.87);
+ --jp-ui-font-color2: rgba(0, 0, 0, 0.54);
+ --jp-ui-font-color3: rgba(0, 0, 0, 0.38);
+
+ /*
+ * Use these against the brand/accent/warn/error colors.
+ * These will typically go from light to darker, in both a dark and light theme.
+ */
+ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1);
+ --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1);
+ --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7);
+ --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5);
+
+ /* Content Fonts
+ *
+ * Content font variables are used for typography of user generated content.
+ *
+ * The font sizing here is done assuming that the body font size of --jp-content-font-size1
+ * is applied to a parent element. When children elements, such as headings, are sized
+ * in em all things will be computed relative to that body size.
+ */
+
+ /* Defaults use Material Design specification */
+ --jp-content-font-color0: rgba(0, 0, 0, 1);
+ --jp-content-font-color1: rgba(0, 0, 0, 0.87);
+ --jp-content-font-color2: rgba(0, 0, 0, 0.54);
+ --jp-content-font-color3: rgba(0, 0, 0, 0.38);
+
+ --jp-content-link-color: var(--md-blue-700);
+
+ /* Layout
+ *
+ * The following are the main layout colors use in JupyterLab. In a light
+ * theme these would go from light to dark.
+ */
+ --jp-layout-color0: white;
+ --jp-layout-color1: white;
+ --jp-layout-color2: var(--md-grey-200);
+ --jp-layout-color3: var(--md-grey-400);
+
+ /* Inverse Layout
+ *
+ * The following are the inverse layout colors use in JupyterLab. In a light
+ * theme these would go from dark to light.
+ */
+ --jp-inverse-layout-color0: #111111;
+ --jp-inverse-layout-color1: var(--md-grey-900);
+ --jp-inverse-layout-color2: var(--md-grey-800);
+ --jp-inverse-layout-color3: var(--md-grey-700);
+
+ /* Brand/accent */
+ --jp-brand-color0: var(--md-blue-900);
+ --jp-brand-color1: var(--md-blue-700);
+
+ --jp-accent-color0: var(--md-green-900);
+ --jp-accent-color1: var(--md-green-700);
+
+ /* State colors (warn, error, success, info) */
+ --jp-warn-color0: var(--md-orange-900);
+ --jp-warn-color1: var(--md-orange-700);
+
+ --jp-error-color0: var(--md-red-900);
+ --jp-error-color1: var(--md-red-700);
+
+ --jp-success-color0: var(--md-green-900);
+ --jp-success-color1: var(--md-green-700);
+
+ --jp-info-color0: var(--md-cyan-900);
+ --jp-info-color1: var(--md-cyan-700);
+
+ /* Cell specific styles */
+ --jp-cell-editor-background: var(--md-grey-100);
+ --jp-cell-editor-border-color: var(--md-grey-300);
+
+ --jp-cell-prompt-not-active-opacity: 0.5;
+ --jp-cell-prompt-not-active-font-color: var(--md-grey-700);
+
+ /* Notebook specific styles */
+ --jp-notebook-multiselected-color: var(--md-blue-50);
+
+ /* Rendermime styles */
+ --jp-rendermime-error-background: #fdd;
+ --jp-rendermime-table-row-background: var(--md-grey-100);
+ --jp-rendermime-table-row-hover-background: var(--md-light-blue-50);
+
+ /* Dialog specific styles */
+ --jp-dialog-background: rgba(0, 0, 0, 0.25);
+
+ /* Toolbar specific styles */
+ --jp-toolbar-border-color: var(--jp-border-color1);
+ --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24);
+ --jp-toolbar-active-background: var(--md-grey-300);
+
+ /* Input field styles */
+ --jp-input-active-background: var(--jp-layout-color1);
+ --jp-input-hover-background: var(--jp-layout-color1);
+ --jp-input-background: var(--md-grey-100);
+
+ /* General editor styles */
+ --jp-editor-selected-background: #d9d9d9;
+ --jp-editor-selected-focused-background: #d7d4f0;
+
+ /* Code mirror specific styles */
+ --jp-mirror-editor-keyword-color: #008000;
+ --jp-mirror-editor-atom-color: #88f;
+ --jp-mirror-editor-number-color: #080;
+ --jp-mirror-editor-def-color: #00f;
+ --jp-mirror-editor-variable-color: var(--md-grey-900);
+ --jp-mirror-editor-variable-2-color: #05a;
+ --jp-mirror-editor-variable-3-color: #085;
+ --jp-mirror-editor-punctuation-color: #05a;
+ --jp-mirror-editor-property-color: #05a;
+ --jp-mirror-editor-string-color: #ba2121;
+ --jp-mirror-editor-string-2-color: #708;
+ --jp-mirror-editor-builtin-color: #008000;
+ --jp-mirror-editor-tag-color: #170;
+ --jp-mirror-editor-attribute-color: #00c;
+ --jp-mirror-editor-header-color: blue;
+ --jp-mirror-editor-quote-color: #090;
+ --jp-mirror-editor-link-color: #00c;
+
+ /*
+ RTC user specific colors.
+ These colors are used for the cursor, username in the editor,
+ and the icon of the user.
+ */
+ --jp-collaborator-color1: #ffad8e;
+ --jp-collaborator-color2: #dac83d;
+ --jp-collaborator-color3: #72dd76;
+ --jp-collaborator-color4: #00e4d0;
+ --jp-collaborator-color5: #45d4ff;
+ --jp-collaborator-color6: #e2b1ff;
+ --jp-collaborator-color7: #ff9de6;
+
+ /* Vega extension styles */
+ --jp-vega-background: white;
+
+ /* Search-related styles */
+ --jp-search-toggle-off-opacity: 0.5;
+ --jp-search-selected-match-background-color: rgb(245, 200, 0);
+
+ /* File or activity icons and switch semantic variables */
+ --jp-json-icon-color: var(--md-orange-700);
+ --jp-console-icon-background-color: var(--md-blue-700);
+ --jp-terminal-icon-background-color: var(--md-grey-800);
+ --jp-terminal-icon-color: var(--md-grey-200);
+ --jp-text-editor-icon-color: var(--md-grey-700);
+ --jp-inspector-icon-color: var(--md-grey-700);
+ --jp-switch-true-position-color: var(--md-orange-900);
+
+ @import "jupyter-grade3";
+}
+
+body[data-jp-theme-light="false"] {
+ /* Elevation
+ *
+ * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here:
+ *
+ * https://github.com/material-components/material-components-web
+ * https://material-components-web.appspot.com/elevation.html
+ */
+
+ /* The dark theme shadows need a bit of work, but this will probably also require work on the core layout
+ * colors used in the theme as well.
+ */
+ --jp-shadow-base-lightness: 32;
+
+ /* Borders
+ *
+ * The following variables, specify the visual styling of borders in JupyterLab.
+ */
+ --jp-border-color0: var(--md-grey-700);
+ --jp-border-color1: var(--md-grey-700);
+ --jp-border-color2: var(--md-grey-800);
+ --jp-border-color3: var(--md-grey-900);
+
+ /*
+ * Use these font colors against the corresponding main layout colors.
+ * In a light theme, these go from dark to light.
+ */
+
+ /* Defaults use Material Design specification */
+ --jp-ui-font-color0: rgba(255, 255, 255, 1);
+ --jp-ui-font-color1: rgba(255, 255, 255, 0.87);
+ --jp-ui-font-color2: rgba(255, 255, 255, 0.54);
+ --jp-ui-font-color3: rgba(255, 255, 255, 0.38);
+
+ /*
+ * Use these against the brand/accent/warn/error colors.
+ * These will typically go from light to darker, in both a dark and light theme.
+ */
+ --jp-ui-inverse-font-color0: rgba(0, 0, 0, 1);
+ --jp-ui-inverse-font-color1: rgba(0, 0, 0, 0.8);
+ --jp-ui-inverse-font-color2: rgba(0, 0, 0, 0.5);
+ --jp-ui-inverse-font-color3: rgba(0, 0, 0, 0.3);
+
+ /* Content Fonts
+ *
+ * Content font variables are used for typography of user generated content.
+ *
+ * The font sizing here is done assuming that the body font size of --jp-content-font-size1
+ * is applied to a parent element. When children elements, such as headings, are sized
+ * in em all things will be computed relative to that body size.
+ */
+
+ /* Defaults use Material Design specification */
+ --jp-content-font-color0: rgba(255, 255, 255, 1);
+ --jp-content-font-color1: rgba(255, 255, 255, 1);
+ --jp-content-font-color2: rgba(255, 255, 255, 0.7);
+ --jp-content-font-color3: rgba(255, 255, 255, 0.5);
+
+ --jp-content-link-color: var(--md-blue-300);
+
+ /* Layout
+ *
+ * The following are the main layout colors use in JupyterLab. In a light
+ * theme these would go from light to dark.
+ */
+ --jp-layout-color0: var(--global-bg-color);
+ --jp-layout-color1: var(--md-grey-900);
+ --jp-layout-color2: var(--md-grey-800);
+ --jp-layout-color3: var(--md-grey-700);
+
+ /* Inverse Layout
+ *
+ * The following are the inverse layout colors use in JupyterLab. In a light
+ * theme these would go from dark to light.
+ */
+ --jp-inverse-layout-color0: white;
+ --jp-inverse-layout-color1: white;
+ --jp-inverse-layout-color2: var(--md-grey-200);
+ --jp-inverse-layout-color3: var(--md-grey-400);
+
+ /* Brand/accent */
+ --jp-brand-color0: var(--md-blue-700);
+ --jp-brand-color1: var(--md-blue-500);
+
+ --jp-accent-color0: var(--md-green-700);
+ --jp-accent-color1: var(--md-green-500);
+
+ /* State colors (warn, error, success, info) */
+ --jp-warn-color0: var(--md-orange-700);
+ --jp-warn-color1: var(--md-orange-500);
+
+ --jp-error-color0: var(--md-red-700);
+ --jp-error-color1: var(--md-red-500);
+
+ --jp-success-color0: var(--md-green-700);
+ --jp-success-color1: var(--md-green-500);
+
+ --jp-info-color0: var(--md-cyan-700);
+ --jp-info-color1: var(--md-cyan-500);
+
+ /* Cell specific styles */
+ --jp-cell-editor-background: var(--jp-layout-color1);
+ --jp-cell-editor-border-color: var(--md-grey-700);
+
+ --jp-cell-prompt-not-active-opacity: 1;
+ --jp-cell-prompt-not-active-font-color: var(--md-grey-300);
+
+ /* Notebook specific styles */
+ --jp-notebook-multiselected-color: rgba(33, 150, 243, 0.24);
+
+ /* Rendermime styles */
+ --jp-rendermime-error-background: rgba(244, 67, 54, 0.28);
+ --jp-rendermime-table-row-background: var(--md-grey-900);
+ --jp-rendermime-table-row-hover-background: rgba(3, 169, 244, 0.2);
+
+ /* Dialog specific styles */
+ --jp-dialog-background: rgba(0, 0, 0, 0.6);
+
+ /* Toolbar specific styles */
+ --jp-toolbar-border-color: var(--jp-border-color2);
+ --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.8);
+ --jp-toolbar-active-background: var(--jp-layout-color0);
+
+ /* Input field styles */
+ --jp-input-active-background: var(--jp-layout-color0);
+ --jp-input-hover-background: var(--jp-layout-color2);
+ --jp-input-background: var(--md-grey-800);
+
+ /* General editor styles */
+ --jp-editor-selected-background: var(--jp-layout-color2);
+ --jp-editor-selected-focused-background: rgba(33, 150, 243, 0.24);
+
+ /* Code mirror specific styles */
+ --jp-mirror-editor-keyword-color: var(--md-green-500);
+ --jp-mirror-editor-atom-color: var(--md-blue-300);
+ --jp-mirror-editor-number-color: var(--md-green-400);
+ --jp-mirror-editor-def-color: var(--md-blue-600);
+ --jp-mirror-editor-variable-color: var(--md-grey-300);
+ --jp-mirror-editor-variable-2-color: var(--md-blue-400);
+ --jp-mirror-editor-variable-3-color: var(--md-green-600);
+ --jp-mirror-editor-punctuation-color: var(--md-blue-400);
+ --jp-mirror-editor-property-color: var(--md-blue-400);
+ --jp-mirror-editor-string-color: #ff7070;
+ --jp-mirror-editor-string-2-color: var(--md-purple-300);
+ --jp-mirror-editor-builtin-color: var(--md-green-600);
+ --jp-mirror-editor-tag-color: var(--md-green-700);
+ --jp-mirror-editor-attribute-color: var(--md-blue-700);
+ --jp-mirror-editor-header-color: var(--md-blue-500);
+ --jp-mirror-editor-quote-color: var(--md-green-300);
+ --jp-mirror-editor-link-color: var(--md-blue-700);
+
+ /*
+ RTC user specific colors.
+ These colors are used for the cursor, username in the editor,
+ and the icon of the user.
+ */
+ --jp-collaborator-color1: #ad4a00;
+ --jp-collaborator-color2: #7b6a00;
+ --jp-collaborator-color3: #007e00;
+ --jp-collaborator-color4: #008772;
+ --jp-collaborator-color5: #0079b9;
+ --jp-collaborator-color6: #8b45c6;
+ --jp-collaborator-color7: #be208b;
+
+ /* Vega extension styles */
+ --jp-vega-background: var(--md-grey-400);
+
+ /* Search-related styles */
+ --jp-search-toggle-off-opacity: 0.6;
+ --jp-search-selected-match-background-color: rgb(255, 225, 0);
+
+ /* scrollbar related styles. Supports every browser except Edge. */
+
+ /* colors based on JetBrain's Darcula theme */
+ --jp-scrollbar-background-color: #3f4244;
+ --jp-scrollbar-thumb-color: 88, 96, 97; /* need to specify thumb color as an RGB triplet */
+
+ --jp-scrollbar-endpad: 3px; /* the minimum gap between the thumb and the ends of a scrollbar */
+
+ /* hacks for setting the thumb shape. These do nothing in Firefox */
+ --jp-scrollbar-thumb-margin: 3.5px; /* the space in between the sides of the thumb and the track */
+ --jp-scrollbar-thumb-radius: 9px; /* set to a large-ish value for rounded endcaps on the thumb */
+
+ /* File or activity icons and switch semantic variables */
+ --jp-json-icon-color: var(--md-orange-500);
+ --jp-console-icon-background-color: var(--md-blue-500);
+ --jp-terminal-icon-background-color: var(--md-grey-200);
+ --jp-terminal-icon-color: var(--md-grey-800);
+ --jp-text-editor-icon-color: var(--md-grey-200);
+ --jp-inspector-icon-color: var(--md-grey-200);
+ --jp-switch-true-position-color: var(--md-orange-700);
+
+ @import "jupyter-monokai";
+}
diff --git a/assets/js/common.js b/assets/js/common.js
index c975f3ca..0af03520 100644
--- a/assets/js/common.js
+++ b/assets/js/common.js
@@ -1,49 +1,49 @@
-$(document).ready(function () {
- // add toggle functionality to abstract and bibtex buttons
- $("a.abstract").click(function () {
- $(this).parent().parent().find(".abstract.hidden").toggleClass("open");
- $(this).parent().parent().find(".bibtex.hidden.open").toggleClass("open");
- });
- $("a.bibtex").click(function () {
- $(this).parent().parent().find(".bibtex.hidden").toggleClass("open");
- $(this).parent().parent().find(".abstract.hidden.open").toggleClass("open");
- });
- $("a").removeClass("waves-effect waves-light");
-
- // bootstrap-toc
- if ($("#toc-sidebar").length) {
- var navSelector = "#toc-sidebar";
- var $myNav = $(navSelector);
- Toc.init($myNav);
- $("body").scrollspy({
- target: navSelector,
- });
- }
-
- // add css to jupyter notebooks
- const cssLink = document.createElement("link");
- cssLink.href = "../css/jupyter.css";
- cssLink.rel = "stylesheet";
- cssLink.type = "text/css";
-
- let theme = localStorage.getItem("theme");
- if (theme == null || theme == "null") {
- const userPref = window.matchMedia;
- if (userPref && userPref("(prefers-color-scheme: dark)").matches) {
- theme = "dark";
- }
- }
-
- $(".jupyter-notebook-iframe-container iframe").each(function () {
- $(this).contents().find("head").append(cssLink);
-
- if (theme == "dark") {
- $(this).bind("load", function () {
- $(this).contents().find("body").attr({
- "data-jp-theme-light": "false",
- "data-jp-theme-name": "JupyterLab Dark",
- });
- });
- }
- });
-});
+$(document).ready(function () {
+ // add toggle functionality to abstract and bibtex buttons
+ $("a.abstract").click(function () {
+ $(this).parent().parent().find(".abstract.hidden").toggleClass("open");
+ $(this).parent().parent().find(".bibtex.hidden.open").toggleClass("open");
+ });
+ $("a.bibtex").click(function () {
+ $(this).parent().parent().find(".bibtex.hidden").toggleClass("open");
+ $(this).parent().parent().find(".abstract.hidden.open").toggleClass("open");
+ });
+ $("a").removeClass("waves-effect waves-light");
+
+ // bootstrap-toc
+ if ($("#toc-sidebar").length) {
+ var navSelector = "#toc-sidebar";
+ var $myNav = $(navSelector);
+ Toc.init($myNav);
+ $("body").scrollspy({
+ target: navSelector,
+ });
+ }
+
+ // add css to jupyter notebooks
+ const cssLink = document.createElement("link");
+ cssLink.href = "../css/jupyter.css";
+ cssLink.rel = "stylesheet";
+ cssLink.type = "text/css";
+
+ let theme = localStorage.getItem("theme");
+ if (theme == null || theme == "null") {
+ const userPref = window.matchMedia;
+ if (userPref && userPref("(prefers-color-scheme: dark)").matches) {
+ theme = "dark";
+ }
+ }
+
+ $(".jupyter-notebook-iframe-container iframe").each(function () {
+ $(this).contents().find("head").append(cssLink);
+
+ if (theme == "dark") {
+ $(this).bind("load", function () {
+ $(this).contents().find("body").attr({
+ "data-jp-theme-light": "false",
+ "data-jp-theme-name": "JupyterLab Dark",
+ });
+ });
+ }
+ });
+});
diff --git a/assets/js/copy_code.js b/assets/js/copy_code.js
index 38dce0d8..cf0e1da5 100644
--- a/assets/js/copy_code.js
+++ b/assets/js/copy_code.js
@@ -1,55 +1,55 @@
-// create element for copy button in code blocks
-var codeBlocks = document.querySelectorAll("pre");
-codeBlocks.forEach(function (codeBlock) {
- if (
- (codeBlock.querySelector("pre:not(.lineno)") || codeBlock.querySelector("code")) &&
- codeBlock.querySelector("code:not(.language-chartjs)") &&
- codeBlock.querySelector("code:not(.language-diff2html)") &&
- codeBlock.querySelector("code:not(.language-echarts)") &&
- codeBlock.querySelector("code:not(.language-geojson)") &&
- codeBlock.querySelector("code:not(.language-mermaid)") &&
- codeBlock.querySelector("code:not(.language-vega_lite)")
- ) {
- // create copy button
- var copyButton = document.createElement("button");
- copyButton.className = "copy";
- copyButton.type = "button";
- copyButton.ariaLabel = "Copy code to clipboard";
- copyButton.innerText = "Copy";
- copyButton.innerHTML = '
';
-
- // get code from code block and copy to clipboard
- copyButton.addEventListener("click", function () {
- // check if code block has line numbers
- // i.e. `kramdown.syntax_highlighter_opts.block.line_numbers` set to true in _config.yml
- // or using `jekyll highlight` liquid tag with `linenos` option
- if (codeBlock.querySelector("pre:not(.lineno)")) {
- // get code from code block ignoring line numbers
- var code = codeBlock.querySelector("pre:not(.lineno)").innerText.trim();
- } else {
- // if (codeBlock.querySelector('code')) {
- // get code from code block when line numbers are not displayed
- var code = codeBlock.querySelector("code").innerText.trim();
- }
- window.navigator.clipboard.writeText(code);
- copyButton.innerText = "Copied";
- copyButton.innerHTML = '
';
- var waitFor = 3000;
-
- setTimeout(function () {
- copyButton.innerText = "Copy";
- copyButton.innerHTML = '
';
- }, waitFor);
- });
-
- // create wrapper div
- var wrapper = document.createElement("div");
- wrapper.className = "code-display-wrapper";
-
- // add copy button and code block to wrapper div
- const parent = codeBlock.parentElement;
- parent.insertBefore(wrapper, codeBlock);
- wrapper.append(codeBlock);
- wrapper.append(copyButton);
- }
-});
+// create element for copy button in code blocks
+var codeBlocks = document.querySelectorAll("pre");
+codeBlocks.forEach(function (codeBlock) {
+ if (
+ (codeBlock.querySelector("pre:not(.lineno)") || codeBlock.querySelector("code")) &&
+ codeBlock.querySelector("code:not(.language-chartjs)") &&
+ codeBlock.querySelector("code:not(.language-diff2html)") &&
+ codeBlock.querySelector("code:not(.language-echarts)") &&
+ codeBlock.querySelector("code:not(.language-geojson)") &&
+ codeBlock.querySelector("code:not(.language-mermaid)") &&
+ codeBlock.querySelector("code:not(.language-vega_lite)")
+ ) {
+ // create copy button
+ var copyButton = document.createElement("button");
+ copyButton.className = "copy";
+ copyButton.type = "button";
+ copyButton.ariaLabel = "Copy code to clipboard";
+ copyButton.innerText = "Copy";
+ copyButton.innerHTML = '
';
+
+ // get code from code block and copy to clipboard
+ copyButton.addEventListener("click", function () {
+ // check if code block has line numbers
+ // i.e. `kramdown.syntax_highlighter_opts.block.line_numbers` set to true in _config.yml
+ // or using `jekyll highlight` liquid tag with `linenos` option
+ if (codeBlock.querySelector("pre:not(.lineno)")) {
+ // get code from code block ignoring line numbers
+ var code = codeBlock.querySelector("pre:not(.lineno)").innerText.trim();
+ } else {
+ // if (codeBlock.querySelector('code')) {
+ // get code from code block when line numbers are not displayed
+ var code = codeBlock.querySelector("code").innerText.trim();
+ }
+ window.navigator.clipboard.writeText(code);
+ copyButton.innerText = "Copied";
+ copyButton.innerHTML = '
';
+ var waitFor = 3000;
+
+ setTimeout(function () {
+ copyButton.innerText = "Copy";
+ copyButton.innerHTML = '
';
+ }, waitFor);
+ });
+
+ // create wrapper div
+ var wrapper = document.createElement("div");
+ wrapper.className = "code-display-wrapper";
+
+ // add copy button and code block to wrapper div
+ const parent = codeBlock.parentElement;
+ parent.insertBefore(wrapper, codeBlock);
+ wrapper.append(codeBlock);
+ wrapper.append(copyButton);
+ }
+});
diff --git a/assets/js/distillpub/overrides.js b/assets/js/distillpub/overrides.js
index 92157e45..2bb3c1da 100644
--- a/assets/js/distillpub/overrides.js
+++ b/assets/js/distillpub/overrides.js
@@ -1,28 +1,28 @@
-$(document).ready(function () {
- // Override styles of the footnotes.
- document.querySelectorAll("d-footnote").forEach(function (footnote) {
- footnote.shadowRoot.querySelector("sup > span").setAttribute("style", "color: var(--global-theme-color);");
- footnote.shadowRoot
- .querySelector("d-hover-box")
- .shadowRoot.querySelector("style")
- .sheet.insertRule(".panel {background-color: var(--global-bg-color) !important;}");
- footnote.shadowRoot
- .querySelector("d-hover-box")
- .shadowRoot.querySelector("style")
- .sheet.insertRule(".panel {border-color: var(--global-divider-color) !important;}");
- });
- // Override styles of the citations.
- document.querySelectorAll("d-cite").forEach(function (cite) {
- cite.shadowRoot.querySelector("div > span").setAttribute("style", "color: var(--global-theme-color);");
- cite.shadowRoot.querySelector("style").sheet.insertRule("ul li a {color: var(--global-text-color) !important; text-decoration: none;}");
- cite.shadowRoot.querySelector("style").sheet.insertRule("ul li a:hover {color: var(--global-theme-color) !important;}");
- cite.shadowRoot
- .querySelector("d-hover-box")
- .shadowRoot.querySelector("style")
- .sheet.insertRule(".panel {background-color: var(--global-bg-color) !important;}");
- cite.shadowRoot
- .querySelector("d-hover-box")
- .shadowRoot.querySelector("style")
- .sheet.insertRule(".panel {border-color: var(--global-divider-color) !important;}");
- });
-});
+$(document).ready(function () {
+ // Override styles of the footnotes.
+ document.querySelectorAll("d-footnote").forEach(function (footnote) {
+ footnote.shadowRoot.querySelector("sup > span").setAttribute("style", "color: var(--global-theme-color);");
+ footnote.shadowRoot
+ .querySelector("d-hover-box")
+ .shadowRoot.querySelector("style")
+ .sheet.insertRule(".panel {background-color: var(--global-bg-color) !important;}");
+ footnote.shadowRoot
+ .querySelector("d-hover-box")
+ .shadowRoot.querySelector("style")
+ .sheet.insertRule(".panel {border-color: var(--global-divider-color) !important;}");
+ });
+ // Override styles of the citations.
+ document.querySelectorAll("d-cite").forEach(function (cite) {
+ cite.shadowRoot.querySelector("div > span").setAttribute("style", "color: var(--global-theme-color);");
+ cite.shadowRoot.querySelector("style").sheet.insertRule("ul li a {color: var(--global-text-color) !important; text-decoration: none;}");
+ cite.shadowRoot.querySelector("style").sheet.insertRule("ul li a:hover {color: var(--global-theme-color) !important;}");
+ cite.shadowRoot
+ .querySelector("d-hover-box")
+ .shadowRoot.querySelector("style")
+ .sheet.insertRule(".panel {background-color: var(--global-bg-color) !important;}");
+ cite.shadowRoot
+ .querySelector("d-hover-box")
+ .shadowRoot.querySelector("style")
+ .sheet.insertRule(".panel {border-color: var(--global-divider-color) !important;}");
+ });
+});
diff --git a/assets/js/distillpub/template.v2.js b/assets/js/distillpub/template.v2.js
index e6527600..7478a1c2 100644
--- a/assets/js/distillpub/template.v2.js
+++ b/assets/js/distillpub/template.v2.js
@@ -1,9607 +1,9607 @@
-(function (factory) {
- typeof define === "function" && define.amd ? define(factory) : factory();
-})(function () {
- "use strict";
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
- const months = ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."];
- const zeroPad = (n) => (n < 10 ? "0" + n : n);
-
- const RFC = function (date) {
- const day = days[date.getDay()].substring(0, 3);
- const paddedDate = zeroPad(date.getDate());
- const month = months[date.getMonth()].substring(0, 3);
- const year = date.getFullYear().toString();
- const hours = date.getUTCHours().toString();
- const minutes = date.getUTCMinutes().toString();
- const seconds = date.getUTCSeconds().toString();
- return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`;
- };
-
- const objectFromMap = function (map) {
- const object = Array.from(map).reduce(
- (object, [key, value]) => Object.assign(object, { [key]: value }), // Be careful! Maps can have non-String keys; object literals can't.
- {}
- );
- return object;
- };
-
- const mapFromObject = function (object) {
- const map = new Map();
- for (var property in object) {
- if (object.hasOwnProperty(property)) {
- map.set(property, object[property]);
- }
- }
- return map;
- };
-
- class Author {
- // constructor(name='', personalURL='', affiliation='', affiliationURL='') {
- // this.name = name; // 'Chris Olah'
- // this.personalURL = personalURL; // 'https://colah.github.io'
- // this.affiliation = affiliation; // 'Google Brain'
- // this.affiliationURL = affiliationURL; // 'https://g.co/brain'
- // }
-
- constructor(object) {
- this.name = object.author; // 'Chris Olah'
- this.personalURL = object.authorURL; // 'https://colah.github.io'
- this.affiliation = object.affiliation; // 'Google Brain'
- this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'
- this.affiliations = object.affiliations || []; // new-style affiliations
- }
-
- // 'Chris'
- get firstName() {
- const names = this.name.split(" ");
- return names.slice(0, names.length - 1).join(" ");
- }
-
- // 'Olah'
- get lastName() {
- const names = this.name.split(" ");
- return names[names.length - 1];
- }
- }
-
- function mergeFromYMLFrontmatter(target, source) {
- target.title = source.title;
- if (source.published) {
- if (source.published instanceof Date) {
- target.publishedDate = source.published;
- } else if (source.published.constructor === String) {
- target.publishedDate = new Date(source.published);
- }
- }
- if (source.publishedDate) {
- if (source.publishedDate instanceof Date) {
- target.publishedDate = source.publishedDate;
- } else if (source.publishedDate.constructor === String) {
- target.publishedDate = new Date(source.publishedDate);
- } else {
- console.error("Don't know what to do with published date: " + source.publishedDate);
- }
- }
- target.description = source.description;
- target.authors = source.authors.map((authorObject) => new Author(authorObject));
- target.katex = source.katex;
- target.password = source.password;
- if (source.doi) {
- target.doi = source.doi;
- }
- }
-
- class FrontMatter {
- constructor() {
- this.title = "unnamed article"; // 'Attention and Augmented Recurrent Neural Networks'
- this.description = ""; // 'A visual overview of neural attention...'
- this.authors = []; // Array of Author(s)
-
- this.bibliography = new Map();
- this.bibliographyParsed = false;
- // {
- // 'gregor2015draw': {
- // 'title': 'DRAW: A recurrent neural network for image generation',
- // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',
- // 'journal': 'arXiv preprint arXiv:1502.04623',
- // 'year': '2015',
- // 'url': 'https://arxiv.org/pdf/1502.04623.pdf',
- // 'type': 'article'
- // },
- // }
-
- // Citation keys should be listed in the order that they are appear in the document.
- // Each key refers to a key in the bibliography dictionary.
- this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]
- this.citationsCollected = false;
-
- //
- // Assigned from posts.csv
- //
-
- // publishedDate: 2016-09-08T07:00:00.000Z,
- // tags: [ 'rnn' ],
- // distillPath: '2016/augmented-rnns',
- // githubPath: 'distillpub/post--augmented-rnns',
- // doiSuffix: 1,
-
- //
- // Assigned from journal
- //
- this.journal = {};
- // journal: {
- // 'title': 'Distill',
- // 'full_title': 'Distill',
- // 'abbrev_title': 'Distill',
- // 'url': 'http://distill.pub',
- // 'doi': '10.23915/distill',
- // 'publisherName': 'Distill Working Group',
- // 'publisherEmail': 'admin@distill.pub',
- // 'issn': '2476-0757',
- // 'editors': [...],
- // 'committee': [...]
- // }
- // volume: 1,
- // issue: 9,
-
- this.katex = {};
-
- //
- // Assigned from publishing process
- //
-
- // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',
- // updatedDate: 2017-03-21T07:13:16.000Z,
- // doi: '10.23915/distill.00001',
- this.doi = undefined;
- this.publishedDate = undefined;
- }
-
- // Example:
- // title: Demo Title Attention and Augmented Recurrent Neural Networks
- // published: Jan 10, 2017
- // authors:
- // - Chris Olah:
- // - Shan Carter: http://shancarter.com
- // affiliations:
- // - Google Brain:
- // - Google Brain: http://g.co/brain
-
- //
- // Computed Properties
- //
-
- // 'http://distill.pub/2016/augmented-rnns',
- set url(value) {
- this._url = value;
- }
- get url() {
- if (this._url) {
- return this._url;
- } else if (this.distillPath && this.journal.url) {
- return this.journal.url + "/" + this.distillPath;
- } else if (this.journal.url) {
- return this.journal.url;
- }
- }
-
- // 'https://github.com/distillpub/post--augmented-rnns',
- get githubUrl() {
- if (this.githubPath) {
- return "https://github.com/" + this.githubPath;
- } else {
- return undefined;
- }
- }
-
- // TODO resolve differences in naming of URL/Url/url.
- // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',
- set previewURL(value) {
- this._previewURL = value;
- }
- get previewURL() {
- return this._previewURL ? this._previewURL : this.url + "/thumbnail.jpg";
- }
-
- // 'Thu, 08 Sep 2016 00:00:00 -0700',
- get publishedDateRFC() {
- return RFC(this.publishedDate);
- }
-
- // 'Thu, 08 Sep 2016 00:00:00 -0700',
- get updatedDateRFC() {
- return RFC(this.updatedDate);
- }
-
- // 2016,
- get publishedYear() {
- return this.publishedDate.getFullYear();
- }
-
- // 'Sept',
- get publishedMonth() {
- return months[this.publishedDate.getMonth()];
- }
-
- // 8,
- get publishedDay() {
- return this.publishedDate.getDate();
- }
-
- // '09',
- get publishedMonthPadded() {
- return zeroPad(this.publishedDate.getMonth() + 1);
- }
-
- // '08',
- get publishedDayPadded() {
- return zeroPad(this.publishedDate.getDate());
- }
-
- get publishedISODateOnly() {
- return this.publishedDate.toISOString().split("T")[0];
- }
-
- get volume() {
- const volume = this.publishedYear - 2015;
- if (volume < 1) {
- throw new Error("Invalid publish date detected during computing volume");
- }
- return volume;
- }
-
- get issue() {
- return this.publishedDate.getMonth() + 1;
- }
-
- // 'Olah & Carter',
- get concatenatedAuthors() {
- if (this.authors.length > 2) {
- return this.authors[0].lastName + ", et al.";
- } else if (this.authors.length === 2) {
- return this.authors[0].lastName + " & " + this.authors[1].lastName;
- } else if (this.authors.length === 1) {
- return this.authors[0].lastName;
- }
- }
-
- // 'Olah, Chris and Carter, Shan',
- get bibtexAuthors() {
- return this.authors
- .map((author) => {
- return author.lastName + ", " + author.firstName;
- })
- .join(" and ");
- }
-
- // 'olah2016attention'
- get slug() {
- let slug = "";
- if (this.authors.length) {
- slug += this.authors[0].lastName.toLowerCase();
- slug += this.publishedYear;
- slug += this.title.split(" ")[0].toLowerCase();
- }
- return slug || "Untitled";
- }
-
- get bibliographyEntries() {
- return new Map(
- this.citations.map((citationKey) => {
- const entry = this.bibliography.get(citationKey);
- return [citationKey, entry];
- })
- );
- }
-
- set bibliography(bibliography) {
- if (bibliography instanceof Map) {
- this._bibliography = bibliography;
- } else if (typeof bibliography === "object") {
- this._bibliography = mapFromObject(bibliography);
- }
- }
-
- get bibliography() {
- return this._bibliography;
- }
-
- static fromObject(source) {
- const frontMatter = new FrontMatter();
- Object.assign(frontMatter, source);
- return frontMatter;
- }
-
- assignToObject(target) {
- Object.assign(target, this);
- target.bibliography = objectFromMap(this.bibliographyEntries);
- target.url = this.url;
- target.doi = this.doi;
- target.githubUrl = this.githubUrl;
- target.previewURL = this.previewURL;
- if (this.publishedDate) {
- target.volume = this.volume;
- target.issue = this.issue;
- target.publishedDateRFC = this.publishedDateRFC;
- target.publishedYear = this.publishedYear;
- target.publishedMonth = this.publishedMonth;
- target.publishedDay = this.publishedDay;
- target.publishedMonthPadded = this.publishedMonthPadded;
- target.publishedDayPadded = this.publishedDayPadded;
- }
- if (this.updatedDate) {
- target.updatedDateRFC = this.updatedDateRFC;
- }
- target.concatenatedAuthors = this.concatenatedAuthors;
- target.bibtexAuthors = this.bibtexAuthors;
- target.slug = this.slug;
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- const Mutating = (superclass) => {
- return class extends superclass {
- constructor() {
- super();
-
- // set up mutation observer
- const options = {
- childList: true,
- characterData: true,
- subtree: true,
- };
- const observer = new MutationObserver(() => {
- observer.disconnect();
- this.renderIfPossible();
- observer.observe(this, options);
- });
-
- // ...and listen for changes
- observer.observe(this, options);
- }
-
- connectedCallback() {
- super.connectedCallback();
-
- this.renderIfPossible();
- }
-
- // potential TODO: check if this is enough for all our usecases
- // maybe provide a custom function to tell if we have enough information to render
- renderIfPossible() {
- if (this.textContent && this.root) {
- this.renderContent();
- }
- }
-
- renderContent() {
- console.error(`Your class ${this.constructor.name} must provide a custom renderContent() method!`);
- }
- }; // end class
- }; // end mixin function
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- /*global ShadyCSS*/
-
- const Template = (name, templateString, useShadow = true) => {
- return (superclass) => {
- const template = document.createElement("template");
- template.innerHTML = templateString;
-
- if (useShadow && "ShadyCSS" in window) {
- ShadyCSS.prepareTemplate(template, name);
- }
-
- return class extends superclass {
- static get is() {
- return name;
- }
-
- constructor() {
- super();
-
- this.clone = document.importNode(template.content, true);
- if (useShadow) {
- this.attachShadow({ mode: "open" });
- this.shadowRoot.appendChild(this.clone);
- }
- }
-
- connectedCallback() {
- if (this.hasAttribute("distill-prerendered")) {
- return;
- }
- if (useShadow) {
- if ("ShadyCSS" in window) {
- ShadyCSS.styleElement(this);
- }
- } else {
- this.insertBefore(this.clone, this.firstChild);
- }
- }
-
- get root() {
- if (useShadow) {
- return this.shadowRoot;
- } else {
- return this;
- }
- }
-
- /* TODO: Are we using these? Should we even? */
- $(query) {
- return this.root.querySelector(query);
- }
-
- $$(query) {
- return this.root.querySelectorAll(query);
- }
- };
- };
- };
-
- var math =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nspan.katex-display {\n text-align: left;\n padding: 8px 0 8px 0;\n margin: 0.5em 0 0.5em 1em;\n}\n\nspan.katex {\n -webkit-font-smoothing: antialiased;\n color: rgba(0, 0, 0, 0.8);\n font-size: 1.18em;\n}\n';
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // This is a straight concatenation of code from KaTeX's contrib folder,
- // but we aren't using some of their helpers that don't work well outside a browser environment.
-
- /*global katex */
-
- const findEndOfMath = function (delimiter, text, startIndex) {
- // Adapted from
- // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
- let index = startIndex;
- let braceLevel = 0;
-
- const delimLength = delimiter.length;
-
- while (index < text.length) {
- const character = text[index];
-
- if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
- return index;
- } else if (character === "\\") {
- index++;
- } else if (character === "{") {
- braceLevel++;
- } else if (character === "}") {
- braceLevel--;
- }
-
- index++;
- }
-
- return -1;
- };
-
- const splitAtDelimiters = function (startData, leftDelim, rightDelim, display) {
- const finalData = [];
-
- for (let i = 0; i < startData.length; i++) {
- if (startData[i].type === "text") {
- const text = startData[i].data;
-
- let lookingForLeft = true;
- let currIndex = 0;
- let nextIndex;
-
- nextIndex = text.indexOf(leftDelim);
- if (nextIndex !== -1) {
- currIndex = nextIndex;
- finalData.push({
- type: "text",
- data: text.slice(0, currIndex),
- });
- lookingForLeft = false;
- }
-
- while (true) {
- // eslint-disable-line no-constant-condition
- if (lookingForLeft) {
- nextIndex = text.indexOf(leftDelim, currIndex);
- if (nextIndex === -1) {
- break;
- }
-
- finalData.push({
- type: "text",
- data: text.slice(currIndex, nextIndex),
- });
-
- currIndex = nextIndex;
- } else {
- nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
- if (nextIndex === -1) {
- break;
- }
-
- finalData.push({
- type: "math",
- data: text.slice(currIndex + leftDelim.length, nextIndex),
- rawData: text.slice(currIndex, nextIndex + rightDelim.length),
- display: display,
- });
-
- currIndex = nextIndex + rightDelim.length;
- }
-
- lookingForLeft = !lookingForLeft;
- }
-
- finalData.push({
- type: "text",
- data: text.slice(currIndex),
- });
- } else {
- finalData.push(startData[i]);
- }
- }
-
- return finalData;
- };
-
- const splitWithDelimiters = function (text, delimiters) {
- let data = [{ type: "text", data: text }];
- for (let i = 0; i < delimiters.length; i++) {
- const delimiter = delimiters[i];
- data = splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
- }
- return data;
- };
-
- /* Note: optionsCopy is mutated by this method. If it is ever exposed in the
- * API, we should copy it before mutating.
- */
- const renderMathInText = function (text, optionsCopy) {
- const data = splitWithDelimiters(text, optionsCopy.delimiters);
- const fragment = document.createDocumentFragment();
-
- for (let i = 0; i < data.length; i++) {
- if (data[i].type === "text") {
- fragment.appendChild(document.createTextNode(data[i].data));
- } else {
- const tag = document.createElement("d-math");
- const math = data[i].data;
- // Override any display mode defined in the settings with that
- // defined by the text itself
- optionsCopy.displayMode = data[i].display;
- try {
- tag.textContent = math;
- if (optionsCopy.displayMode) {
- tag.setAttribute("block", "");
- }
- } catch (e) {
- if (!(e instanceof katex.ParseError)) {
- throw e;
- }
- optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
- fragment.appendChild(document.createTextNode(data[i].rawData));
- continue;
- }
- fragment.appendChild(tag);
- }
- }
-
- return fragment;
- };
-
- const renderElem = function (elem, optionsCopy) {
- for (let i = 0; i < elem.childNodes.length; i++) {
- const childNode = elem.childNodes[i];
- if (childNode.nodeType === 3) {
- // Text node
- const text = childNode.textContent;
- if (optionsCopy.mightHaveMath(text)) {
- const frag = renderMathInText(text, optionsCopy);
- i += frag.childNodes.length - 1;
- elem.replaceChild(frag, childNode);
- }
- } else if (childNode.nodeType === 1) {
- // Element node
- const shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1;
-
- if (shouldRender) {
- renderElem(childNode, optionsCopy);
- }
- }
- // Otherwise, it's something else, and ignore it.
- }
- };
-
- const defaultAutoRenderOptions = {
- delimiters: [
- { left: "$$", right: "$$", display: true },
- { left: "\\[", right: "\\]", display: true },
- { left: "\\(", right: "\\)", display: false },
- // LaTeX uses this, but it ruins the display of normal `$` in text:
- // {left: '$', right: '$', display: false},
- ],
-
- ignoredTags: ["script", "noscript", "style", "textarea", "pre", "code", "svg"],
-
- errorCallback: function (msg, err) {
- console.error(msg, err);
- },
- };
-
- const renderMathInElement = function (elem, options) {
- if (!elem) {
- throw new Error("No element provided to render");
- }
-
- const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);
- const delimiterStrings = optionsCopy.delimiters.flatMap((d) => [d.left, d.right]);
- const mightHaveMath = (text) => delimiterStrings.some((d) => text.indexOf(d) !== -1);
- optionsCopy.mightHaveMath = mightHaveMath;
- renderElem(elem, optionsCopy);
- };
-
- // Copyright 2018 The Distill Template Authors
-
- const katexJSURL = "https://distill.pub/third-party/katex/katex.min.js";
- const katexCSSTag = '
';
-
- const T = Template(
- "d-math",
- `
-${katexCSSTag}
-
-
-`
- );
-
- // DMath, not Math, because that would conflict with the JS built-in
- class DMath extends Mutating(T(HTMLElement)) {
- static set katexOptions(options) {
- DMath._katexOptions = options;
- if (DMath.katexOptions.delimiters) {
- if (!DMath.katexAdded) {
- DMath.addKatex();
- } else {
- DMath.katexLoadedCallback();
- }
- }
- }
-
- static get katexOptions() {
- if (!DMath._katexOptions) {
- DMath._katexOptions = {
- delimiters: [{ left: "$$", right: "$$", display: false }],
- };
- }
- return DMath._katexOptions;
- }
-
- static katexLoadedCallback() {
- // render all d-math tags
- const mathTags = document.querySelectorAll("d-math");
- for (const mathTag of mathTags) {
- mathTag.renderContent();
- }
- // transform inline delimited math to d-math tags
- if (DMath.katexOptions.delimiters) {
- renderMathInElement(document.body, DMath.katexOptions);
- }
- }
-
- static addKatex() {
- // css tag can use this convenience function
- document.head.insertAdjacentHTML("beforeend", katexCSSTag);
- // script tag has to be created to work properly
- const scriptTag = document.createElement("script");
- scriptTag.src = katexJSURL;
- scriptTag.async = true;
- scriptTag.onload = DMath.katexLoadedCallback;
- scriptTag.crossorigin = "anonymous";
- document.head.appendChild(scriptTag);
-
- DMath.katexAdded = true;
- }
-
- get options() {
- const localOptions = { displayMode: this.hasAttribute("block") };
- return Object.assign(localOptions, DMath.katexOptions);
- }
-
- connectedCallback() {
- super.connectedCallback();
- if (!DMath.katexAdded) {
- DMath.addKatex();
- }
- }
-
- renderContent() {
- if (typeof katex !== "undefined") {
- const container = this.root.querySelector("#katex-container");
- katex.render(this.textContent, container, this.options);
- }
- }
- }
-
- DMath.katexAdded = false;
- DMath.inlineMathRendered = false;
- window.DMath = DMath; // TODO: check if this can be removed, or if we should expose a distill global
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- function collect_citations(dom = document) {
- const citations = new Set();
- const citeTags = dom.querySelectorAll("d-cite");
- for (const tag of citeTags) {
- const keyString = tag.getAttribute("key") || tag.getAttribute("bibtex-key");
- const keys = keyString.split(",").map((k) => k.trim());
- for (const key of keys) {
- citations.add(key);
- }
- }
- return [...citations];
- }
-
- function author_string(ent, template, sep, finalSep) {
- if (ent.author == null) {
- return "";
- }
- var names = ent.author.split(" and ");
- let name_strings = names.map((name) => {
- name = name.trim();
- if (name.indexOf(",") != -1) {
- var last = name.split(",")[0].trim();
- var firsts = name.split(",")[1];
- } else if (name.indexOf(" ") != -1) {
- var last = name.split(" ").slice(-1)[0].trim();
- var firsts = name.split(" ").slice(0, -1).join(" ");
- } else {
- var last = name.trim();
- }
- var initials = "";
- if (firsts != undefined) {
- initials = firsts
- .trim()
- .split(" ")
- .map((s) => s.trim()[0]);
- initials = initials.join(".") + ".";
- }
- return template.replace("${F}", firsts).replace("${L}", last).replace("${I}", initials).trim(); // in case one of first or last was empty
- });
- if (names.length > 1) {
- var str = name_strings.slice(0, names.length - 1).join(sep);
- str += (finalSep || sep) + name_strings[names.length - 1];
- return str;
- } else {
- return name_strings[0];
- }
- }
-
- function venue_string(ent) {
- var cite = ent.journal || ent.booktitle || "";
- if ("volume" in ent) {
- var issue = ent.issue || ent.number;
- issue = issue != undefined ? "(" + issue + ")" : "";
- cite += ", Vol " + ent.volume + issue;
- }
- if ("pages" in ent) {
- cite += ", pp. " + ent.pages;
- }
- if (cite != "") cite += ". ";
- if ("publisher" in ent) {
- cite += ent.publisher;
- if (cite[cite.length - 1] != ".") cite += ".";
- }
- return cite;
- }
-
- function link_string(ent) {
- if ("url" in ent) {
- var url = ent.url;
- var arxiv_match = /arxiv\.org\/abs\/([0-9\.]*)/.exec(url);
- if (arxiv_match != null) {
- url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`;
- }
-
- if (url.slice(-4) == ".pdf") {
- var label = "PDF";
- } else if (url.slice(-5) == ".html") {
- var label = "HTML";
- }
- return `
[${label || "link"}] `;
- } /* else if ("doi" in ent){
- return `
[DOI] `;
- }*/ else {
- return "";
- }
- }
- function doi_string(ent, new_line) {
- if ("doi" in ent) {
- return `${new_line ? "
" : ""}
DOI: ${ent.doi} `;
- } else {
- return "";
- }
- }
-
- function title_string(ent) {
- return '
' + ent.title + " ";
- }
-
- function bibliography_cite(ent, fancy) {
- if (ent) {
- var cite = title_string(ent);
- cite += link_string(ent) + "
";
- if (ent.author) {
- cite += author_string(ent, "${L}, ${I}", ", ", " and ");
- if (ent.year || ent.date) {
- cite += ", ";
- }
- }
- if (ent.year || ent.date) {
- cite += (ent.year || ent.date) + ". ";
- } else {
- cite += ". ";
- }
- cite += venue_string(ent);
- cite += doi_string(ent);
- return cite;
- /*var cite = author_string(ent, "${L}, ${I}", ", ", " and ");
- if (ent.year || ent.date){
- cite += ", " + (ent.year || ent.date) + ". "
- } else {
- cite += ". "
- }
- cite += "
" + ent.title + " . ";
- cite += venue_string(ent);
- cite += doi_string(ent);
- cite += link_string(ent);
- return cite*/
- } else {
- return "?";
- }
- }
-
- function hover_cite(ent) {
- if (ent) {
- var cite = "";
- cite += "
" + ent.title + " ";
- cite += link_string(ent);
- cite += "
";
-
- var a_str = author_string(ent, "${I} ${L}", ", ") + ".";
- var v_str = venue_string(ent).trim() + " " + ent.year + ". " + doi_string(ent, true);
-
- if ((a_str + v_str).length < Math.min(40, ent.title.length)) {
- cite += a_str + " " + v_str;
- } else {
- cite += a_str + "
" + v_str;
- }
- return cite;
- } else {
- return "?";
- }
- }
-
- function domContentLoaded() {
- return ["interactive", "complete"].indexOf(document.readyState) !== -1;
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- function _moveLegacyAffiliationFormatIntoArray(frontMatter) {
- // authors used to have propoerties "affiliation" and "affiliationURL".
- // We now encourage using an array for affiliations containing objects with
- // properties "name" and "url".
- for (let author of frontMatter.authors) {
- const hasOldStyle = Boolean(author.affiliation);
- const hasNewStyle = Boolean(author.affiliations);
- if (!hasOldStyle) continue;
- if (hasNewStyle) {
- console.warn(
- `Author ${author.author} has both old-style ("affiliation" & "affiliationURL") and new style ("affiliations") affiliation information!`
- );
- } else {
- let newAffiliation = {
- name: author.affiliation,
- };
- if (author.affiliationURL) newAffiliation.url = author.affiliationURL;
- author.affiliations = [newAffiliation];
- }
- }
- return frontMatter;
- }
-
- function parseFrontmatter(element) {
- const scriptTag = element.firstElementChild;
- if (scriptTag) {
- const type = scriptTag.getAttribute("type");
- if (type.split("/")[1] == "json") {
- const content = scriptTag.textContent;
- const parsed = JSON.parse(content);
- return _moveLegacyAffiliationFormatIntoArray(parsed);
- } else {
- console.error("Distill only supports JSON frontmatter tags anymore; no more YAML.");
- }
- } else {
- console.error(
- "You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates."
- );
- }
- return {};
- }
-
- class FrontMatter$1 extends HTMLElement {
- static get is() {
- return "d-front-matter";
- }
-
- constructor() {
- super();
-
- const options = {
- childList: true,
- characterData: true,
- subtree: true,
- };
- const observer = new MutationObserver((entries) => {
- for (const entry of entries) {
- if (entry.target.nodeName === "SCRIPT" || entry.type === "characterData") {
- const data = parseFrontmatter(this);
- this.notify(data);
- }
- }
- });
- observer.observe(this, options);
- }
-
- notify(data) {
- const options = { detail: data, bubbles: true };
- const event = new CustomEvent("onFrontMatterChanged", options);
- document.dispatchEvent(event);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // no appendix -> add appendix
- // title in front, no h1 -> add it
- // no title in front, h1 -> read and put into frontMatter
- // footnote -> footnote list
- // break up bib
- // if citation, no bib-list -> add citation-list
-
- // if authors, no byline -> add byline
-
- function optionalComponents(dom, data) {
- const body = dom.body;
- const article = body.querySelector("d-article");
-
- // If we don't have an article tag, something weird is going on—giving up.
- if (!article) {
- console.warn("No d-article tag found; skipping adding optional components!");
- return;
- }
-
- let byline = dom.querySelector("d-byline");
- if (!byline) {
- if (data.authors) {
- byline = dom.createElement("d-byline");
- // body.insertBefore(byline, article);
- } else {
- console.warn("No authors found in front matter; please add them before submission!");
- }
- }
-
- let title = dom.querySelector("d-title");
- if (!title) {
- title = dom.createElement("d-title");
- body.insertBefore(title, byline);
- }
-
- let h1 = title.querySelector("h1");
- if (!h1) {
- h1 = dom.createElement("h1");
- h1.textContent = data.title;
- title.insertBefore(h1, title.firstChild);
- }
-
- const hasPassword = typeof data.password !== "undefined";
- let interstitial = body.querySelector("d-interstitial");
- if (hasPassword && !interstitial) {
- const inBrowser = typeof window !== "undefined";
- const onLocalhost = inBrowser && window.location.hostname.includes("localhost");
- if (!inBrowser || !onLocalhost) {
- interstitial = dom.createElement("d-interstitial");
- interstitial.password = data.password;
- body.insertBefore(interstitial, body.firstChild);
- }
- } else if (!hasPassword && interstitial) {
- interstitial.parentElement.removeChild(this);
- }
-
- let appendix = dom.querySelector("d-appendix");
- if (!appendix) {
- appendix = dom.createElement("d-appendix");
- dom.body.appendChild(appendix);
- }
-
- let footnoteList = dom.querySelector("d-footnote-list");
- if (!footnoteList) {
- footnoteList = dom.createElement("d-footnote-list");
- appendix.appendChild(footnoteList);
- }
-
- let citationList = dom.querySelector("d-citation-list");
- if (!citationList) {
- citationList = dom.createElement("d-citation-list");
- appendix.appendChild(citationList);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const frontMatter = new FrontMatter();
-
- const Controller = {
- frontMatter: frontMatter,
- waitingOn: {
- bibliography: [],
- citations: [],
- },
- listeners: {
- onCiteKeyCreated(event) {
- const [citeTag, keys] = event.detail;
-
- // ensure we have citations
- if (!frontMatter.citationsCollected) {
- // console.debug('onCiteKeyCreated, but unresolved dependency ("citations"). Enqueing.');
- Controller.waitingOn.citations.push(() => Controller.listeners.onCiteKeyCreated(event));
- return;
- }
-
- // ensure we have a loaded bibliography
- if (!frontMatter.bibliographyParsed) {
- // console.debug('onCiteKeyCreated, but unresolved dependency ("bibliography"). Enqueing.');
- Controller.waitingOn.bibliography.push(() => Controller.listeners.onCiteKeyCreated(event));
- return;
- }
-
- const numbers = keys.map((key) => frontMatter.citations.indexOf(key));
- citeTag.numbers = numbers;
- const entries = keys.map((key) => frontMatter.bibliography.get(key));
- citeTag.entries = entries;
- },
-
- onCiteKeyChanged() {
- // const [citeTag, keys] = event.detail;
-
- // update citations
- frontMatter.citations = collect_citations();
- frontMatter.citationsCollected = true;
- for (const waitingCallback of Controller.waitingOn.citations.slice()) {
- waitingCallback();
- }
-
- // update bibliography
- const citationListTag = document.querySelector("d-citation-list");
- const bibliographyEntries = new Map(
- frontMatter.citations.map((citationKey) => {
- return [citationKey, frontMatter.bibliography.get(citationKey)];
- })
- );
- citationListTag.citations = bibliographyEntries;
-
- const citeTags = document.querySelectorAll("d-cite");
- for (const citeTag of citeTags) {
- console.log(citeTag);
- const keys = citeTag.keys;
- const numbers = keys.map((key) => frontMatter.citations.indexOf(key));
- citeTag.numbers = numbers;
- const entries = keys.map((key) => frontMatter.bibliography.get(key));
- citeTag.entries = entries;
- }
- },
-
- onCiteKeyRemoved(event) {
- Controller.listeners.onCiteKeyChanged(event);
- },
-
- onBibliographyChanged(event) {
- const citationListTag = document.querySelector("d-citation-list");
-
- const bibliography = event.detail;
-
- frontMatter.bibliography = bibliography;
- frontMatter.bibliographyParsed = true;
- for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {
- waitingCallback();
- }
-
- // ensure we have citations
- if (!frontMatter.citationsCollected) {
- Controller.waitingOn.citations.push(function () {
- Controller.listeners.onBibliographyChanged({
- target: event.target,
- detail: event.detail,
- });
- });
- return;
- }
-
- if (citationListTag.hasAttribute("distill-prerendered")) {
- console.debug("Citation list was prerendered; not updating it.");
- } else {
- const entries = new Map(
- frontMatter.citations.map((citationKey) => {
- return [citationKey, frontMatter.bibliography.get(citationKey)];
- })
- );
- citationListTag.citations = entries;
- }
- },
-
- onFootnoteChanged() {
- // const footnote = event.detail;
- //TODO: optimize to only update current footnote
- const footnotesList = document.querySelector("d-footnote-list");
- if (footnotesList) {
- const footnotes = document.querySelectorAll("d-footnote");
- footnotesList.footnotes = footnotes;
- }
- },
-
- onFrontMatterChanged(event) {
- const data = event.detail;
- mergeFromYMLFrontmatter(frontMatter, data);
-
- const interstitial = document.querySelector("d-interstitial");
- if (interstitial) {
- if (typeof frontMatter.password !== "undefined") {
- interstitial.password = frontMatter.password;
- } else {
- interstitial.parentElement.removeChild(interstitial);
- }
- }
-
- const prerendered = document.body.hasAttribute("distill-prerendered");
- if (!prerendered && domContentLoaded()) {
- optionalComponents(document, frontMatter);
-
- const appendix = document.querySelector("distill-appendix");
- if (appendix) {
- appendix.frontMatter = frontMatter;
- }
-
- const byline = document.querySelector("d-byline");
- if (byline) {
- byline.frontMatter = frontMatter;
- }
-
- if (data.katex) {
- DMath.katexOptions = data.katex;
- }
- }
- },
-
- DOMContentLoaded() {
- if (Controller.loaded) {
- console.warn("Controller received DOMContentLoaded but was already loaded!");
- return;
- } else if (!domContentLoaded()) {
- console.warn("Controller received DOMContentLoaded at document.readyState: " + document.readyState + "!");
- return;
- } else {
- Controller.loaded = true;
- console.debug("Runlevel 4: Controller running DOMContentLoaded");
- }
-
- const frontMatterTag = document.querySelector("d-front-matter");
- if (frontMatterTag) {
- const data = parseFrontmatter(frontMatterTag);
- Controller.listeners.onFrontMatterChanged({ detail: data });
- }
-
- // Resolving "citations" dependency due to initial DOM load
- frontMatter.citations = collect_citations();
- frontMatter.citationsCollected = true;
- for (const waitingCallback of Controller.waitingOn.citations.slice()) {
- waitingCallback();
- }
-
- if (frontMatter.bibliographyParsed) {
- for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {
- waitingCallback();
- }
- }
-
- const footnotesList = document.querySelector("d-footnote-list");
- if (footnotesList) {
- const footnotes = document.querySelectorAll("d-footnote");
- footnotesList.footnotes = footnotes;
- }
- },
- }, // listeners
- }; // Controller
-
- var base =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml {\n font-size: 14px;\n\tline-height: 1.6em;\n /* font-family: "Libre Franklin", "Helvetica Neue", sans-serif; */\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;\n /*, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";*/\n text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\n@media(min-width: 768px) {\n html {\n font-size: 16px;\n }\n}\n\nbody {\n margin: 0;\n}\n\na {\n color: #004276;\n}\n\nfigure {\n margin: 0;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th {\n\ttext-align: left;\n}\n\ntable thead {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\ntable thead th {\n padding-bottom: 0.5em;\n}\n\ntable tbody :first-child td {\n padding-top: 0.5em;\n}\n\npre {\n overflow: auto;\n max-width: 100%;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nsup, sub {\n vertical-align: baseline;\n position: relative;\n top: -0.4em;\n line-height: 1em;\n}\n\nsub {\n top: 0.4em;\n}\n\n.kicker,\n.marker {\n font-size: 15px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* Headline */\n\n@media(min-width: 1024px) {\n d-title h1 span {\n display: block;\n }\n}\n\n/* Figure */\n\nfigure {\n position: relative;\n margin-bottom: 2.5em;\n margin-top: 1.5em;\n}\n\nfigcaption+figure {\n\n}\n\nfigure img {\n width: 100%;\n}\n\nfigure svg text,\nfigure svg tspan {\n}\n\nfigcaption,\n.figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n\n@media(min-width: 1024px) {\nfigcaption,\n.figcaption {\n font-size: 13px;\n }\n}\n\nfigure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\nfigcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nfigcaption b,\nfigcaption strong, {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n';
-
- var layout =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@supports not (display: grid) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n display: block;\n padding: 8px;\n }\n}\n\n.base-grid,\ndistill-header,\nd-title,\nd-abstract,\nd-article,\nd-appendix,\ndistill-appendix,\nd-byline,\nd-footnote-list,\nd-citation-list,\ndistill-footer {\n display: grid;\n justify-items: stretch;\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\n grid-column-gap: 8px;\n}\n\n.grid {\n display: grid;\n grid-column-gap: 8px;\n}\n\n@media(min-width: 768px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1000px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1180px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 32px;\n }\n\n .grid {\n grid-column-gap: 32px;\n }\n}\n\n\n\n\n.base-grid {\n grid-column: screen;\n}\n\n/* .l-body,\nd-article > * {\n grid-column: text;\n}\n\n.l-page,\nd-title > *,\nd-figure {\n grid-column: page;\n} */\n\n.l-gutter {\n grid-column: gutter;\n}\n\n.l-text,\n.l-body {\n grid-column: text;\n}\n\n.l-page {\n grid-column: page;\n}\n\n.l-body-outset {\n grid-column: middle;\n}\n\n.l-page-outset {\n grid-column: page;\n}\n\n.l-screen {\n grid-column: screen;\n}\n\n.l-screen-inset {\n grid-column: screen;\n padding-left: 16px;\n padding-left: 16px;\n}\n\n\n/* Aside */\n\nd-article aside {\n grid-column: gutter;\n font-size: 12px;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.6)\n}\n\n@media(min-width: 768px) {\n aside {\n grid-column: gutter;\n }\n\n .side {\n grid-column: gutter;\n }\n}\n';
-
- var print =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@media print {\n\n @page {\n size: 8in 11in;\n @bottom-right {\n content: counter(page) " of " counter(pages);\n }\n }\n\n html {\n /* no general margins -- CSS Grid takes care of those */\n }\n\n p, code {\n page-break-inside: avoid;\n }\n\n h2, h3 {\n page-break-after: avoid;\n }\n\n d-header {\n visibility: hidden;\n }\n\n d-footer {\n display: none!important;\n }\n\n}\n';
-
- var byline =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n';
-
- var article =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n';
-
- var title =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n';
-
- // Copyright 2018 The Distill Template Authors
-
- const styles = base + layout + title + byline + article + math + print;
-
- function makeStyleTag(dom) {
- const styleTagId = "distill-prerendered-styles";
- const prerenderedTag = dom.getElementById(styleTagId);
- if (!prerenderedTag) {
- const styleTag = dom.createElement("style");
- styleTag.id = styleTagId;
- styleTag.type = "text/css";
- const cssTextTag = dom.createTextNode(styles);
- styleTag.appendChild(cssTextTag);
- const firstScriptTag = dom.head.querySelector("script");
- dom.head.insertBefore(styleTag, firstScriptTag);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- function addPolyfill(polyfill, polyfillLoadedCallback) {
- console.debug("Runlevel 0: Polyfill required: " + polyfill.name);
- const script = document.createElement("script");
- script.src = polyfill.url;
- script.async = false;
- if (polyfillLoadedCallback) {
- script.onload = function () {
- polyfillLoadedCallback(polyfill);
- };
- }
- script.onerror = function () {
- new Error("Runlevel 0: Polyfills failed to load script " + polyfill.name);
- };
- document.head.appendChild(script);
- }
-
- const polyfills = [
- {
- name: "WebComponents",
- support: function () {
- return (
- "customElements" in window &&
- "attachShadow" in Element.prototype &&
- "getRootNode" in Element.prototype &&
- "content" in document.createElement("template") &&
- "Promise" in window &&
- "from" in Array
- );
- },
- url: "https://distill.pub/third-party/polyfills/webcomponents-lite.js",
- },
- {
- name: "IntersectionObserver",
- support: function () {
- return "IntersectionObserver" in window && "IntersectionObserverEntry" in window;
- },
- url: "https://distill.pub/third-party/polyfills/intersection-observer.js",
- },
- ];
-
- class Polyfills {
- static browserSupportsAllFeatures() {
- return polyfills.every((poly) => poly.support());
- }
-
- static load(callback) {
- // Define an intermediate callback that checks if all is loaded.
- const polyfillLoaded = function (polyfill) {
- polyfill.loaded = true;
- console.debug("Runlevel 0: Polyfill has finished loading: " + polyfill.name);
- // console.debug(window[polyfill.name]);
- if (Polyfills.neededPolyfills.every((poly) => poly.loaded)) {
- console.debug("Runlevel 0: All required polyfills have finished loading.");
- console.debug("Runlevel 0->1.");
- window.distillRunlevel = 1;
- callback();
- }
- };
- // Add polyfill script tags
- for (const polyfill of Polyfills.neededPolyfills) {
- addPolyfill(polyfill, polyfillLoaded);
- }
- }
-
- static get neededPolyfills() {
- if (!Polyfills._neededPolyfills) {
- Polyfills._neededPolyfills = polyfills.filter((poly) => !poly.support());
- }
- return Polyfills._neededPolyfills;
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // const marginSmall = 16;
- // const marginLarge = 3 * marginSmall;
- // const margin = marginSmall + marginLarge;
- // const gutter = marginSmall;
- // const outsetAmount = margin / 2;
- // const numCols = 4;
- // const numGutters = numCols - 1;
- // const columnWidth = (768 - 2 * marginLarge - numGutters * gutter) / numCols;
- //
- // const screenwidth = 768;
- // const pageWidth = screenwidth - 2 * marginLarge;
- // const bodyWidth = pageWidth - columnWidth - gutter;
-
- function body(selector) {
- return `${selector} {
- grid-column: left / text;
- }
- `;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const T$1 = Template(
- "d-abstract",
- `
-
-
-
-`
- );
-
- class Abstract extends T$1(HTMLElement) {}
-
- // Copyright 2018 The Distill Template Authors
-
- const T$2 = Template(
- "d-appendix",
- `
-
-
-`,
- false
- );
-
- class Appendix extends T$2(HTMLElement) {}
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // import { Template } from '../mixins/template';
- // import { Controller } from '../controller';
-
- const isOnlyWhitespace = /^\s*$/;
-
- class Article extends HTMLElement {
- static get is() {
- return "d-article";
- }
-
- constructor() {
- super();
-
- new MutationObserver((mutations) => {
- for (const mutation of mutations) {
- for (const addedNode of mutation.addedNodes) {
- switch (addedNode.nodeName) {
- case "#text":
- {
- // usually text nodes are only linebreaks.
- const text = addedNode.nodeValue;
- if (!isOnlyWhitespace.test(text)) {
- console.warn(
- "Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a
or tag. We found the following text: " +
- text
- );
- const wrapper = document.createElement("span");
- wrapper.innerHTML = addedNode.nodeValue;
- addedNode.parentNode.insertBefore(wrapper, addedNode);
- addedNode.parentNode.removeChild(addedNode);
- }
- }
- break;
- }
- }
- }
- }).observe(this, { childList: true });
- }
- }
-
- var commonjsGlobal =
- typeof globalThis !== "undefined"
- ? globalThis
- : typeof window !== "undefined"
- ? window
- : typeof global !== "undefined"
- ? global
- : typeof self !== "undefined"
- ? self
- : {};
-
- function createCommonjsModule(fn, module) {
- return (module = { exports: {} }), fn(module, module.exports), module.exports;
- }
-
- var bibtexParse = createCommonjsModule(function (module, exports) {
- /* start bibtexParse 0.0.22 */
-
- //Original work by Henrik Muehe (c) 2010
- //
- //CommonJS port by Mikola Lysenko 2013
- //
- //Port to Browser lib by ORCID / RCPETERS
- //
- //Issues:
- //no comment handling within strings
- //no string concatenation
- //no variable values yet
- //Grammar implemented here:
- //bibtex -> (string | preamble | comment | entry)*;
- //string -> '@STRING' '{' key_equals_value '}';
- //preamble -> '@PREAMBLE' '{' value '}';
- //comment -> '@COMMENT' '{' value '}';
- //entry -> '@' key '{' key ',' key_value_list '}';
- //key_value_list -> key_equals_value (',' key_equals_value)*;
- //key_equals_value -> key '=' value;
- //value -> value_quotes | value_braces | key;
- //value_quotes -> '"' .*? '"'; // not quite
- //value_braces -> '{' .*? '"'; // not quite
- (function (exports) {
- function BibtexParser() {
- this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
- this.notKey = [",", "{", "}", " ", "="];
- this.pos = 0;
- this.input = "";
- this.entries = new Array();
-
- this.currentEntry = "";
-
- this.setInput = function (t) {
- this.input = t;
- };
-
- this.getEntries = function () {
- return this.entries;
- };
-
- this.isWhitespace = function (s) {
- return s == " " || s == "\r" || s == "\t" || s == "\n";
- };
-
- this.match = function (s, canCommentOut) {
- if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;
- this.skipWhitespace(canCommentOut);
- if (this.input.substring(this.pos, this.pos + s.length) == s) {
- this.pos += s.length;
- } else {
- throw "Token mismatch, expected " + s + ", found " + this.input.substring(this.pos);
- }
- this.skipWhitespace(canCommentOut);
- };
-
- this.tryMatch = function (s, canCommentOut) {
- if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;
- this.skipWhitespace(canCommentOut);
- if (this.input.substring(this.pos, this.pos + s.length) == s) {
- return true;
- } else {
- return false;
- }
- };
-
- /* when search for a match all text can be ignored, not just white space */
- this.matchAt = function () {
- while (this.input.length > this.pos && this.input[this.pos] != "@") {
- this.pos++;
- }
- if (this.input[this.pos] == "@") {
- return true;
- }
- return false;
- };
-
- this.skipWhitespace = function (canCommentOut) {
- while (this.isWhitespace(this.input[this.pos])) {
- this.pos++;
- }
- if (this.input[this.pos] == "%" && canCommentOut == true) {
- while (this.input[this.pos] != "\n") {
- this.pos++;
- }
- this.skipWhitespace(canCommentOut);
- }
- };
-
- this.value_braces = function () {
- var bracecount = 0;
- this.match("{", false);
- var start = this.pos;
- var escaped = false;
- while (true) {
- if (!escaped) {
- if (this.input[this.pos] == "}") {
- if (bracecount > 0) {
- bracecount--;
- } else {
- var end = this.pos;
- this.match("}", false);
- return this.input.substring(start, end);
- }
- } else if (this.input[this.pos] == "{") {
- bracecount++;
- } else if (this.pos >= this.input.length - 1) {
- throw "Unterminated value";
- }
- }
- if (this.input[this.pos] == "\\" && escaped == false) escaped = true;
- else escaped = false;
- this.pos++;
- }
- };
-
- this.value_comment = function () {
- var str = "";
- var brcktCnt = 0;
- while (!(this.tryMatch("}", false) && brcktCnt == 0)) {
- str = str + this.input[this.pos];
- if (this.input[this.pos] == "{") brcktCnt++;
- if (this.input[this.pos] == "}") brcktCnt--;
- if (this.pos >= this.input.length - 1) {
- throw "Unterminated value:" + this.input.substring(start);
- }
- this.pos++;
- }
- return str;
- };
-
- this.value_quotes = function () {
- this.match('"', false);
- var start = this.pos;
- var escaped = false;
- while (true) {
- if (!escaped) {
- if (this.input[this.pos] == '"') {
- var end = this.pos;
- this.match('"', false);
- return this.input.substring(start, end);
- } else if (this.pos >= this.input.length - 1) {
- throw "Unterminated value:" + this.input.substring(start);
- }
- }
- if (this.input[this.pos] == "\\" && escaped == false) escaped = true;
- else escaped = false;
- this.pos++;
- }
- };
-
- this.single_value = function () {
- var start = this.pos;
- if (this.tryMatch("{")) {
- return this.value_braces();
- } else if (this.tryMatch('"')) {
- return this.value_quotes();
- } else {
- var k = this.key();
- if (k.match("^[0-9]+$")) return k;
- else if (this.months.indexOf(k.toLowerCase()) >= 0) return k.toLowerCase();
- else throw "Value expected:" + this.input.substring(start) + " for key: " + k;
- }
- };
-
- this.value = function () {
- var values = [];
- values.push(this.single_value());
- while (this.tryMatch("#")) {
- this.match("#");
- values.push(this.single_value());
- }
- return values.join("");
- };
-
- this.key = function () {
- var start = this.pos;
- while (true) {
- if (this.pos >= this.input.length) {
- throw "Runaway key";
- } // а-яА-Я is Cyrillic
- //console.log(this.input[this.pos]);
- if (this.notKey.indexOf(this.input[this.pos]) >= 0) {
- return this.input.substring(start, this.pos);
- } else {
- this.pos++;
- }
- }
- };
-
- this.key_equals_value = function () {
- var key = this.key();
- if (this.tryMatch("=")) {
- this.match("=");
- var val = this.value();
- return [key, val];
- } else {
- throw "... = value expected, equals sign missing:" + this.input.substring(this.pos);
- }
- };
-
- this.key_value_list = function () {
- var kv = this.key_equals_value();
- this.currentEntry["entryTags"] = {};
- this.currentEntry["entryTags"][kv[0]] = kv[1];
- while (this.tryMatch(",")) {
- this.match(",");
- // fixes problems with commas at the end of a list
- if (this.tryMatch("}")) {
- break;
- }
- kv = this.key_equals_value();
- this.currentEntry["entryTags"][kv[0]] = kv[1];
- }
- };
-
- this.entry_body = function (d) {
- this.currentEntry = {};
- this.currentEntry["citationKey"] = this.key();
- this.currentEntry["entryType"] = d.substring(1);
- this.match(",");
- this.key_value_list();
- this.entries.push(this.currentEntry);
- };
-
- this.directive = function () {
- this.match("@");
- return "@" + this.key();
- };
-
- this.preamble = function () {
- this.currentEntry = {};
- this.currentEntry["entryType"] = "PREAMBLE";
- this.currentEntry["entry"] = this.value_comment();
- this.entries.push(this.currentEntry);
- };
-
- this.comment = function () {
- this.currentEntry = {};
- this.currentEntry["entryType"] = "COMMENT";
- this.currentEntry["entry"] = this.value_comment();
- this.entries.push(this.currentEntry);
- };
-
- this.entry = function (d) {
- this.entry_body(d);
- };
-
- this.bibtex = function () {
- while (this.matchAt()) {
- var d = this.directive();
- this.match("{");
- if (d == "@STRING") {
- this.string();
- } else if (d == "@PREAMBLE") {
- this.preamble();
- } else if (d == "@COMMENT") {
- this.comment();
- } else {
- this.entry(d);
- }
- this.match("}");
- }
- };
- }
- exports.toJSON = function (bibtex) {
- var b = new BibtexParser();
- b.setInput(bibtex);
- b.bibtex();
- return b.entries;
- };
-
- /* added during hackathon don't hate on me */
- exports.toBibtex = function (json) {
- var out = "";
- for (var i in json) {
- out += "@" + json[i].entryType;
- out += "{";
- if (json[i].citationKey) out += json[i].citationKey + ", ";
- if (json[i].entry) out += json[i].entry;
- if (json[i].entryTags) {
- var tags = "";
- for (var jdx in json[i].entryTags) {
- if (tags.length != 0) tags += ", ";
- tags += jdx + "= {" + json[i].entryTags[jdx] + "}";
- }
- out += tags;
- }
- out += "}\n\n";
- }
- return out;
- };
- })(exports);
-
- /* end bibtexParse */
- });
-
- // Copyright 2018 The Distill Template Authors
-
- function normalizeTag(string) {
- return string
- .replace(/[\t\n ]+/g, " ")
- .replace(/{\\["^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char)
- .replace(/{\\([a-zA-Z])}/g, (full, char) => char);
- }
-
- function parseBibtex(bibtex) {
- const bibliography = new Map();
- const parsedEntries = bibtexParse.toJSON(bibtex);
- for (const entry of parsedEntries) {
- // normalize tags; note entryTags is an object, not Map
- for (const [key, value] of Object.entries(entry.entryTags)) {
- entry.entryTags[key.toLowerCase()] = normalizeTag(value);
- }
- entry.entryTags.type = entry.entryType;
- // add to bibliography
- bibliography.set(entry.citationKey, entry.entryTags);
- }
- return bibliography;
- }
-
- function serializeFrontmatterToBibtex(frontMatter) {
- return `@article{${frontMatter.slug},
- author = {${frontMatter.bibtexAuthors}},
- title = {${frontMatter.title}},
- journal = {${frontMatter.journal.title}},
- year = {${frontMatter.publishedYear}},
- note = {${frontMatter.url}},
- doi = {${frontMatter.doi}}
-}`;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- class Bibliography extends HTMLElement {
- static get is() {
- return "d-bibliography";
- }
-
- constructor() {
- super();
-
- // set up mutation observer
- const options = {
- childList: true,
- characterData: true,
- subtree: true,
- };
- const observer = new MutationObserver((entries) => {
- for (const entry of entries) {
- if (entry.target.nodeName === "SCRIPT" || entry.type === "characterData") {
- this.parseIfPossible();
- }
- }
- });
- observer.observe(this, options);
- }
-
- connectedCallback() {
- requestAnimationFrame(() => {
- this.parseIfPossible();
- });
- }
-
- parseIfPossible() {
- const scriptTag = this.querySelector("script");
- if (!scriptTag) return;
- if (scriptTag.type == "text/bibtex") {
- const newBibtex = scriptTag.textContent;
- if (this.bibtex !== newBibtex) {
- this.bibtex = newBibtex;
- const bibliography = parseBibtex(this.bibtex);
- this.notify(bibliography);
- }
- } else if (scriptTag.type == "text/json") {
- const bibliography = new Map(JSON.parse(scriptTag.textContent));
- this.notify(bibliography);
- } else {
- console.warn("Unsupported bibliography script tag type: " + scriptTag.type);
- }
- }
-
- notify(bibliography) {
- const options = { detail: bibliography, bubbles: true };
- const event = new CustomEvent("onBibliographyChanged", options);
- this.dispatchEvent(event);
- }
-
- /* observe 'src' attribute */
-
- static get observedAttributes() {
- return ["src"];
- }
-
- receivedBibtex(event) {
- const bibliography = parseBibtex(event.target.response);
- this.notify(bibliography);
- }
-
- attributeChangedCallback(name, oldValue, newValue) {
- var oReq = new XMLHttpRequest();
- oReq.onload = (e) => this.receivedBibtex(e);
- oReq.onerror = () => console.warn(`Could not load Bibtex! (tried ${newValue})`);
- oReq.responseType = "text";
- oReq.open("GET", newValue, true);
- oReq.send();
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // import style from '../styles/d-byline.css';
-
- function bylineTemplate(frontMatter) {
- return `
-
-
-
Authors
-
Affiliations
- ${frontMatter.authors
- .map(
- (author) => `
-
- ${
- author.personalURL
- ? `
- ${author.name} `
- : `
- ${author.name} `
- }
-
-
- ${author.affiliations
- .map((affiliation) =>
- affiliation.url
- ? `${affiliation.name} `
- : `${affiliation.name} `
- )
- .join(", ")}
-
- `
- )
- .join("")}
-
-
-
Published
- ${
- frontMatter.publishedDate
- ? `
-
${frontMatter.publishedMonth} ${frontMatter.publishedDay}, ${frontMatter.publishedYear}
`
- : `
-
Not published yet.
`
- }
-
-
-`;
- }
-
- class Byline extends HTMLElement {
- static get is() {
- return "d-byline";
- }
-
- set frontMatter(frontMatter) {
- this.innerHTML = bylineTemplate(frontMatter);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const T$3 = Template(
- "d-cite",
- `
-
-
-
-
-
-
-
-`
- );
-
- class Cite extends T$3(HTMLElement) {
- /* Lifecycle */
- constructor() {
- super();
- this._numbers = [];
- this._entries = [];
- }
-
- connectedCallback() {
- this.outerSpan = this.root.querySelector("#citation-");
- this.innerSpan = this.root.querySelector(".citation-number");
- this.hoverBox = this.root.querySelector("d-hover-box");
- window.customElements.whenDefined("d-hover-box").then(() => {
- this.hoverBox.listen(this);
- });
- // in case this component got connected after values were set
- if (this.numbers) {
- this.displayNumbers(this.numbers);
- }
- if (this.entries) {
- this.displayEntries(this.entries);
- }
- }
-
- //TODO This causes an infinite loop on firefox with polyfills.
- // This is only needed for interactive editing so no priority.
- // disconnectedCallback() {
- // const options = { detail: [this, this.keys], bubbles: true };
- // const event = new CustomEvent('onCiteKeyRemoved', options);
- // document.dispatchEvent(event);
- // }
-
- /* observe 'key' attribute */
-
- static get observedAttributes() {
- return ["key", "bibtex-key"];
- }
-
- attributeChangedCallback(name, oldValue, newValue) {
- const eventName = oldValue ? "onCiteKeyChanged" : "onCiteKeyCreated";
- const keys = newValue.split(",").map((k) => k.trim());
- const options = { detail: [this, keys], bubbles: true };
- const event = new CustomEvent(eventName, options);
- document.dispatchEvent(event);
- }
-
- set key(value) {
- this.setAttribute("key", value);
- }
-
- get key() {
- return this.getAttribute("key") || this.getAttribute("bibtex-key");
- }
-
- get keys() {
- const result = this.key.split(",");
- console.log(result);
- return result;
- }
-
- /* Setters & Rendering */
-
- set numbers(numbers) {
- this._numbers = numbers;
- this.displayNumbers(numbers);
- }
-
- get numbers() {
- return this._numbers;
- }
-
- displayNumbers(numbers) {
- if (!this.innerSpan) return;
- const numberStrings = numbers.map((index) => {
- return index == -1 ? "?" : index + 1 + "";
- });
- const textContent = "[" + numberStrings.join(", ") + "]";
- this.innerSpan.textContent = textContent;
- }
-
- set entries(entries) {
- this._entries = entries;
- this.displayEntries(entries);
- }
-
- get entries() {
- return this._entries;
- }
-
- displayEntries(entries) {
- if (!this.hoverBox) return;
- this.hoverBox.innerHTML = `
- ${entries
- .map(hover_cite)
- .map((html) => `${html} `)
- .join("\n")}
- `;
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const styles$1 = `
-d-citation-list {
- contain: style;
-}
-
-d-citation-list .references {
- grid-column: text;
-}
-
-d-citation-list .references .title {
- font-weight: 500;
-}
-`;
-
- function renderCitationList(element, entries, dom = document) {
- if (entries.size > 0) {
- element.style.display = "";
- let list = element.querySelector(".references");
- if (list) {
- list.innerHTML = "";
- } else {
- const stylesTag = dom.createElement("style");
- stylesTag.innerHTML = styles$1;
- element.appendChild(stylesTag);
-
- const heading = dom.createElement("h3");
- heading.id = "references";
- heading.textContent = "References";
- element.appendChild(heading);
-
- list = dom.createElement("ol");
- list.id = "references-list";
- list.className = "references";
- element.appendChild(list);
- }
-
- for (const [key, entry] of entries) {
- const listItem = dom.createElement("li");
- listItem.id = key;
- listItem.innerHTML = bibliography_cite(entry);
- list.appendChild(listItem);
- }
- } else {
- element.style.display = "none";
- }
- }
-
- class CitationList extends HTMLElement {
- static get is() {
- return "d-citation-list";
- }
-
- connectedCallback() {
- if (!this.hasAttribute("distill-prerendered")) {
- this.style.display = "none";
- }
- }
-
- set citations(citations) {
- renderCitationList(this, citations);
- }
- }
-
- var prism = createCommonjsModule(function (module) {
- /* **********************************************
- Begin prism-core.js
- ********************************************** */
-
- var _self =
- typeof window !== "undefined"
- ? window // if in browser
- : typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope
- ? self // if in worker
- : {}; // if in node js
-
- /**
- * Prism: Lightweight, robust, elegant syntax highlighting
- * MIT license http://www.opensource.org/licenses/mit-license.php/
- * @author Lea Verou http://lea.verou.me
- */
-
- var Prism = (function (_self) {
- // Private helper vars
- var lang = /\blang(?:uage)?-([\w-]+)\b/i;
- var uniqueId = 0;
-
- var _ = {
- manual: _self.Prism && _self.Prism.manual,
- disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
- util: {
- encode: function encode(tokens) {
- if (tokens instanceof Token) {
- return new Token(tokens.type, encode(tokens.content), tokens.alias);
- } else if (Array.isArray(tokens)) {
- return tokens.map(encode);
- } else {
- return tokens
- .replace(/&/g, "&")
- .replace(/" + env.content + "" + env.tag + ">";
- };
-
- /**
- * @param {string} text
- * @param {LinkedList} tokenList
- * @param {any} grammar
- * @param {LinkedListNode} startNode
- * @param {number} startPos
- * @param {boolean} [oneshot=false]
- * @param {string} [target]
- */
- function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) {
- for (var token in grammar) {
- if (!grammar.hasOwnProperty(token) || !grammar[token]) {
- continue;
- }
-
- var patterns = grammar[token];
- patterns = Array.isArray(patterns) ? patterns : [patterns];
-
- for (var j = 0; j < patterns.length; ++j) {
- if (target && target == token + "," + j) {
- return;
- }
-
- var pattern = patterns[j],
- inside = pattern.inside,
- lookbehind = !!pattern.lookbehind,
- greedy = !!pattern.greedy,
- lookbehindLength = 0,
- alias = pattern.alias;
-
- if (greedy && !pattern.pattern.global) {
- // Without the global flag, lastIndex won't work
- var flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];
- pattern.pattern = RegExp(pattern.pattern.source, flags + "g");
- }
-
- pattern = pattern.pattern || pattern;
-
- for (
- // iterate the token list and keep track of the current token/string position
- var currentNode = startNode.next, pos = startPos;
- currentNode !== tokenList.tail;
- pos += currentNode.value.length, currentNode = currentNode.next
- ) {
- var str = currentNode.value;
-
- if (tokenList.length > text.length) {
- // Something went terribly wrong, ABORT, ABORT!
- return;
- }
-
- if (str instanceof Token) {
- continue;
- }
-
- var removeCount = 1; // this is the to parameter of removeBetween
-
- if (greedy && currentNode != tokenList.tail.prev) {
- pattern.lastIndex = pos;
- var match = pattern.exec(text);
- if (!match) {
- break;
- }
-
- var from = match.index + (lookbehind && match[1] ? match[1].length : 0);
- var to = match.index + match[0].length;
- var p = pos;
-
- // find the node that contains the match
- p += currentNode.value.length;
- while (from >= p) {
- currentNode = currentNode.next;
- p += currentNode.value.length;
- }
- // adjust pos (and p)
- p -= currentNode.value.length;
- pos = p;
-
- // the current node is a Token, then the match starts inside another Token, which is invalid
- if (currentNode.value instanceof Token) {
- continue;
- }
-
- // find the last node which is affected by this match
- for (var k = currentNode; k !== tokenList.tail && (p < to || (typeof k.value === "string" && !k.prev.value.greedy)); k = k.next) {
- removeCount++;
- p += k.value.length;
- }
- removeCount--;
-
- // replace with the new match
- str = text.slice(pos, p);
- match.index -= pos;
- } else {
- pattern.lastIndex = 0;
-
- var match = pattern.exec(str);
- }
-
- if (!match) {
- if (oneshot) {
- break;
- }
-
- continue;
- }
-
- if (lookbehind) {
- lookbehindLength = match[1] ? match[1].length : 0;
- }
-
- var from = match.index + lookbehindLength,
- match = match[0].slice(lookbehindLength),
- to = from + match.length,
- before = str.slice(0, from),
- after = str.slice(to);
-
- var removeFrom = currentNode.prev;
-
- if (before) {
- removeFrom = addAfter(tokenList, removeFrom, before);
- pos += before.length;
- }
-
- removeRange(tokenList, removeFrom, removeCount);
-
- var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy);
- currentNode = addAfter(tokenList, removeFrom, wrapped);
-
- if (after) {
- addAfter(tokenList, currentNode, after);
- }
-
- if (removeCount > 1) matchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + "," + j);
-
- if (oneshot) break;
- }
- }
- }
- }
-
- /**
- * @typedef LinkedListNode
- * @property {T} value
- * @property {LinkedListNode | null} prev The previous node.
- * @property {LinkedListNode | null} next The next node.
- * @template T
- */
-
- /**
- * @template T
- */
- function LinkedList() {
- /** @type {LinkedListNode} */
- var head = { value: null, prev: null, next: null };
- /** @type {LinkedListNode} */
- var tail = { value: null, prev: head, next: null };
- head.next = tail;
-
- /** @type {LinkedListNode} */
- this.head = head;
- /** @type {LinkedListNode} */
- this.tail = tail;
- this.length = 0;
- }
-
- /**
- * Adds a new node with the given value to the list.
- * @param {LinkedList} list
- * @param {LinkedListNode} node
- * @param {T} value
- * @returns {LinkedListNode} The added node.
- * @template T
- */
- function addAfter(list, node, value) {
- // assumes that node != list.tail && values.length >= 0
- var next = node.next;
-
- var newNode = { value: value, prev: node, next: next };
- node.next = newNode;
- next.prev = newNode;
- list.length++;
-
- return newNode;
- }
- /**
- * Removes `count` nodes after the given node. The given node will not be removed.
- * @param {LinkedList} list
- * @param {LinkedListNode} node
- * @param {number} count
- * @template T
- */
- function removeRange(list, node, count) {
- var next = node.next;
- for (var i = 0; i < count && next !== list.tail; i++) {
- next = next.next;
- }
- node.next = next;
- next.prev = node;
- list.length -= i;
- }
- /**
- * @param {LinkedList} list
- * @returns {T[]}
- * @template T
- */
- function toArray(list) {
- var array = [];
- var node = list.head.next;
- while (node !== list.tail) {
- array.push(node.value);
- node = node.next;
- }
- return array;
- }
-
- if (!_self.document) {
- if (!_self.addEventListener) {
- // in Node.js
- return _;
- }
-
- if (!_.disableWorkerMessageHandler) {
- // In worker
- _self.addEventListener(
- "message",
- function (evt) {
- var message = JSON.parse(evt.data),
- lang = message.language,
- code = message.code,
- immediateClose = message.immediateClose;
-
- _self.postMessage(_.highlight(code, _.languages[lang], lang));
- if (immediateClose) {
- _self.close();
- }
- },
- false
- );
- }
-
- return _;
- }
-
- //Get current script and highlight
- var script = _.util.currentScript();
-
- if (script) {
- _.filename = script.src;
-
- if (script.hasAttribute("data-manual")) {
- _.manual = true;
- }
- }
-
- function highlightAutomaticallyCallback() {
- if (!_.manual) {
- _.highlightAll();
- }
- }
-
- if (!_.manual) {
- // If the document state is "loading", then we'll use DOMContentLoaded.
- // If the document state is "interactive" and the prism.js script is deferred, then we'll also use the
- // DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they
- // might take longer one animation frame to execute which can create a race condition where only some plugins have
- // been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.
- // See https://github.com/PrismJS/prism/issues/2102
- var readyState = document.readyState;
- if (readyState === "loading" || (readyState === "interactive" && script && script.defer)) {
- document.addEventListener("DOMContentLoaded", highlightAutomaticallyCallback);
- } else {
- if (window.requestAnimationFrame) {
- window.requestAnimationFrame(highlightAutomaticallyCallback);
- } else {
- window.setTimeout(highlightAutomaticallyCallback, 16);
- }
- }
- }
-
- return _;
- })(_self);
-
- if (module.exports) {
- module.exports = Prism;
- }
-
- // hack for components to work correctly in node.js
- if (typeof commonjsGlobal !== "undefined") {
- commonjsGlobal.Prism = Prism;
- }
-
- /* **********************************************
- Begin prism-markup.js
- ********************************************** */
-
- Prism.languages.markup = {
- comment: //,
- prolog: /<\?[\s\S]+?\?>/,
- doctype: {
- pattern: /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:(?!)*\]\s*)?>/i,
- greedy: true,
- },
- cdata: //i,
- tag: {
- pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,
- greedy: true,
- inside: {
- tag: {
- pattern: /^<\/?[^\s>\/]+/i,
- inside: {
- punctuation: /^<\/?/,
- namespace: /^[^\s>\/:]+:/,
- },
- },
- "attr-value": {
- pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,
- inside: {
- punctuation: [
- /^=/,
- {
- pattern: /^(\s*)["']|["']$/,
- lookbehind: true,
- },
- ],
- },
- },
- punctuation: /\/?>/,
- "attr-name": {
- pattern: /[^\s>\/]+/,
- inside: {
- namespace: /^[^\s>\/:]+:/,
- },
- },
- },
- },
- entity: /?[\da-z]{1,8};/i,
- };
-
- Prism.languages.markup["tag"].inside["attr-value"].inside["entity"] = Prism.languages.markup["entity"];
-
- // Plugin to make entity title show the real entity, idea by Roman Komarov
- Prism.hooks.add("wrap", function (env) {
- if (env.type === "entity") {
- env.attributes["title"] = env.content.replace(/&/, "&");
- }
- });
-
- Object.defineProperty(Prism.languages.markup.tag, "addInlined", {
- /**
- * Adds an inlined language to markup.
- *
- * An example of an inlined language is CSS with `
-
-
-
-`
- );
-
- class Code extends Mutating(T$4(HTMLElement)) {
- renderContent() {
- // check if language can be highlighted
- this.languageName = this.getAttribute("language");
- if (!this.languageName) {
- console.warn(
- 'You need to provide a language attribute to your block to let us know how to highlight your code; e.g.:\n zeros = np.zeros(shape) .'
- );
- return;
- }
- const language = prism.languages[this.languageName];
- if (language == undefined) {
- console.warn(`Distill does not yet support highlighting your code block in "${this.languageName}'.`);
- return;
- }
-
- let content = this.textContent;
- const codeTag = this.shadowRoot.querySelector("#code-container");
-
- if (this.hasAttribute("block")) {
- // normalize the tab indents
- content = content.replace(/\n/, "");
- const tabs = content.match(/\s*/);
- content = content.replace(new RegExp("\n" + tabs, "g"), "\n");
- content = content.trim();
- // wrap code block in pre tag if needed
- if (codeTag.parentNode instanceof ShadowRoot) {
- const preTag = document.createElement("pre");
- this.shadowRoot.removeChild(codeTag);
- preTag.appendChild(codeTag);
- this.shadowRoot.appendChild(preTag);
- }
- }
-
- codeTag.className = `language-${this.languageName}`;
- codeTag.innerHTML = prism.highlight(content, language);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const T$5 = Template(
- "d-footnote",
- `
-
-
-
-
-
-
-
-
-
-
-`
- );
-
- class Footnote extends T$5(HTMLElement) {
- constructor() {
- super();
-
- const options = {
- childList: true,
- characterData: true,
- subtree: true,
- };
- const observer = new MutationObserver(this.notify);
- observer.observe(this, options);
- }
-
- notify() {
- const options = { detail: this, bubbles: true };
- const event = new CustomEvent("onFootnoteChanged", options);
- document.dispatchEvent(event);
- }
-
- connectedCallback() {
- // listen and notify about changes to slotted content
- // const slot = this.shadowRoot.querySelector('#slot');
- // console.warn(slot.textContent);
- // slot.addEventListener('slotchange', this.notify);
- this.hoverBox = this.root.querySelector("d-hover-box");
- window.customElements.whenDefined("d-hover-box").then(() => {
- this.hoverBox.listen(this);
- });
- // create numeric ID
- Footnote.currentFootnoteId += 1;
- const IdString = Footnote.currentFootnoteId.toString();
- this.root.host.id = "d-footnote-" + IdString;
-
- // set up hidden hover box
- const id = "dt-fn-hover-box-" + IdString;
- this.hoverBox.id = id;
-
- // set up visible footnote marker
- const span = this.root.querySelector("#fn-");
- span.setAttribute("id", "fn-" + IdString);
- span.setAttribute("data-hover-ref", id);
- span.textContent = IdString;
- }
- }
-
- Footnote.currentFootnoteId = 0;
-
- // Copyright 2018 The Distill Template Authors
-
- const T$6 = Template(
- "d-footnote-list",
- `
-
-
-Footnotes
-
-`,
- false
- );
-
- class FootnoteList extends T$6(HTMLElement) {
- connectedCallback() {
- super.connectedCallback();
-
- this.list = this.root.querySelector("ol");
- // footnotes list is initially hidden
- this.root.style.display = "none";
- // look through document and register existing footnotes
- // Store.subscribeTo('footnotes', (footnote) => {
- // this.renderFootnote(footnote);
- // });
- }
-
- // TODO: could optimize this to accept individual footnotes?
- set footnotes(footnotes) {
- this.list.innerHTML = "";
- if (footnotes.length) {
- // ensure footnote list is visible
- this.root.style.display = "";
-
- for (const footnote of footnotes) {
- // construct and append list item to show footnote
- const listItem = document.createElement("li");
- listItem.id = footnote.id + "-listing";
- listItem.innerHTML = footnote.innerHTML;
-
- const backlink = document.createElement("a");
- backlink.setAttribute("class", "footnote-backlink");
- backlink.textContent = "[↩]";
- backlink.href = "#" + footnote.id;
-
- listItem.appendChild(backlink);
- this.list.appendChild(listItem);
- }
- } else {
- // ensure footnote list is invisible
- this.root.style.display = "none";
- }
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const T$7 = Template(
- "d-hover-box",
- `
-
-
-
-`
- );
-
- class HoverBox extends T$7(HTMLElement) {
- constructor() {
- super();
- }
-
- connectedCallback() {}
-
- listen(element) {
- // console.log(element)
- this.bindDivEvents(this);
- this.bindTriggerEvents(element);
- // this.style.display = "block";
- }
-
- bindDivEvents(element) {
- // For mice, same behavior as hovering on links
- element.addEventListener("mouseover", () => {
- if (!this.visible) this.showAtNode(element);
- this.stopTimeout();
- });
- element.addEventListener("mouseout", () => {
- this.extendTimeout(500);
- });
- // Don't trigger body touchstart event when touching within box
- element.addEventListener(
- "touchstart",
- (event) => {
- event.stopPropagation();
- },
- { passive: true }
- );
- // Close box when touching outside box
- document.body.addEventListener(
- "touchstart",
- () => {
- this.hide();
- },
- { passive: true }
- );
- }
-
- bindTriggerEvents(node) {
- node.addEventListener("mouseover", () => {
- if (!this.visible) {
- this.showAtNode(node);
- }
- this.stopTimeout();
- });
-
- node.addEventListener("mouseout", () => {
- this.extendTimeout(300);
- });
-
- node.addEventListener(
- "touchstart",
- (event) => {
- if (this.visible) {
- this.hide();
- } else {
- this.showAtNode(node);
- }
- // Don't trigger body touchstart event when touching link
- event.stopPropagation();
- },
- { passive: true }
- );
- }
-
- show(position) {
- this.visible = true;
- this.style.display = "block";
- // 10px extra offset from element
- this.style.top = Math.round(position[1] + 10) + "px";
- }
-
- showAtNode(node) {
- // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
- const bbox = node.getBoundingClientRect();
- this.show([node.offsetLeft + bbox.width, node.offsetTop + bbox.height]);
- }
-
- hide() {
- this.visible = false;
- this.style.display = "none";
- this.stopTimeout();
- }
-
- stopTimeout() {
- if (this.timeout) {
- clearTimeout(this.timeout);
- }
- }
-
- extendTimeout(time) {
- this.stopTimeout();
- this.timeout = setTimeout(() => {
- this.hide();
- }, time);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- class Title extends HTMLElement {
- static get is() {
- return "d-title";
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const T$8 = Template(
- "d-references",
- `
-
-`,
- false
- );
-
- class References extends T$8(HTMLElement) {}
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- class TOC extends HTMLElement {
- static get is() {
- return "d-toc";
- }
-
- connectedCallback() {
- if (!this.getAttribute("prerendered")) {
- window.onload = () => {
- const article = document.querySelector("d-article");
- const headings = article.querySelectorAll("h2, h3");
- renderTOC(this, headings);
- };
- }
- }
- }
-
- function renderTOC(element, headings) {
- let ToC = `
-
-
- Table of contents
- `;
-
- for (const el of headings) {
- // should element be included in TOC?
- const isInTitle = el.parentElement.tagName == "D-TITLE";
- const isException = el.getAttribute("no-toc");
- if (isInTitle || isException) continue;
- // create TOC entry
- const title = el.textContent;
- const link = "#" + el.getAttribute("id");
-
- let newLine = "" + '' + title + " " + " ";
- if (el.tagName == "H3") {
- newLine = "";
- } else {
- newLine += " ";
- }
- ToC += newLine;
- }
-
- ToC += " ";
- element.innerHTML = ToC;
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // Figure
- //
- // d-figure provides a state-machine of visibility events:
- //
- // scroll out of view
- // +----------------+
- // *do work here* | |
- // +----------------+ +-+---------+ +-v---------+
- // | ready +----> onscreen | | offscreen |
- // +----------------+ +---------^-+ +---------+-+
- // | |
- // +----------------+
- // scroll into view
- //
-
- class Figure extends HTMLElement {
- static get is() {
- return "d-figure";
- }
-
- static get readyQueue() {
- if (!Figure._readyQueue) {
- Figure._readyQueue = [];
- }
- return Figure._readyQueue;
- }
-
- static addToReadyQueue(figure) {
- if (Figure.readyQueue.indexOf(figure) === -1) {
- Figure.readyQueue.push(figure);
- Figure.runReadyQueue();
- }
- }
-
- static runReadyQueue() {
- // console.log("Checking to run readyQueue, length: " + Figure.readyQueue.length + ", scrolling: " + Figure.isScrolling);
- // if (Figure.isScrolling) return;
- // console.log("Running ready Queue");
- const figure = Figure.readyQueue
- .sort((a, b) => a._seenOnScreen - b._seenOnScreen)
- .filter((figure) => !figure._ready)
- .pop();
- if (figure) {
- figure.ready();
- requestAnimationFrame(Figure.runReadyQueue);
- }
- }
-
- constructor() {
- super();
- // debugger
- this._ready = false;
- this._onscreen = false;
- this._offscreen = true;
- }
-
- connectedCallback() {
- this.loadsWhileScrolling = this.hasAttribute("loadsWhileScrolling");
- Figure.marginObserver.observe(this);
- Figure.directObserver.observe(this);
- }
-
- disconnectedCallback() {
- Figure.marginObserver.unobserve(this);
- Figure.directObserver.unobserve(this);
- }
-
- // We use two separate observers:
- // One with an extra 1000px margin to warn if the viewpoint gets close,
- // And one for the actual on/off screen events
-
- static get marginObserver() {
- if (!Figure._marginObserver) {
- // if (!('IntersectionObserver' in window)) {
- // throw new Error('no interscetionobbserver!');
- // }
- const viewportHeight = window.innerHeight;
- const margin = Math.floor(2 * viewportHeight);
- const options = {
- rootMargin: margin + "px 0px " + margin + "px 0px",
- threshold: 0.01,
- };
- const callback = Figure.didObserveMarginIntersection;
- const observer = new IntersectionObserver(callback, options);
- Figure._marginObserver = observer;
- }
- return Figure._marginObserver;
- }
-
- static didObserveMarginIntersection(entries) {
- for (const entry of entries) {
- const figure = entry.target;
- if (entry.isIntersecting && !figure._ready) {
- Figure.addToReadyQueue(figure);
- }
- }
- }
-
- static get directObserver() {
- if (!Figure._directObserver) {
- Figure._directObserver = new IntersectionObserver(Figure.didObserveDirectIntersection, {
- rootMargin: "0px",
- threshold: [0, 1.0],
- });
- }
- return Figure._directObserver;
- }
-
- static didObserveDirectIntersection(entries) {
- for (const entry of entries) {
- const figure = entry.target;
- if (entry.isIntersecting) {
- figure._seenOnScreen = new Date();
- // if (!figure._ready) { figure.ready(); }
- if (figure._offscreen) {
- figure.onscreen();
- }
- } else {
- if (figure._onscreen) {
- figure.offscreen();
- }
- }
- }
- }
-
- // Notify listeners that registered late, too:
-
- addEventListener(eventName, callback) {
- super.addEventListener(eventName, callback);
- // if we had already dispatched something while presumingly no one was listening, we do so again
- // debugger
- if (eventName === "ready") {
- if (Figure.readyQueue.indexOf(this) !== -1) {
- this._ready = false;
- Figure.runReadyQueue();
- }
- }
- if (eventName === "onscreen") {
- this.onscreen();
- }
- }
-
- // Custom Events
-
- ready() {
- // debugger
- this._ready = true;
- Figure.marginObserver.unobserve(this);
- const event = new CustomEvent("ready");
- this.dispatchEvent(event);
- }
-
- onscreen() {
- this._onscreen = true;
- this._offscreen = false;
- const event = new CustomEvent("onscreen");
- this.dispatchEvent(event);
- }
-
- offscreen() {
- this._onscreen = false;
- this._offscreen = true;
- const event = new CustomEvent("offscreen");
- this.dispatchEvent(event);
- }
- }
-
- if (typeof window !== "undefined") {
- Figure.isScrolling = false;
- let timeout;
- const resetTimer = () => {
- Figure.isScrolling = true;
- clearTimeout(timeout);
- timeout = setTimeout(() => {
- Figure.isScrolling = false;
- Figure.runReadyQueue();
- }, 500);
- };
- window.addEventListener("scroll", resetTimer, true);
- }
-
- // Copyright 2018 The Distill Template Authors
-
- // This overlay is not secure.
- // It is only meant as a social deterrent.
-
- const productionHostname = "distill.pub";
- const T$9 = Template(
- "d-interstitial",
- `
-
-
-
-
-
This article is in review.
-
Do not share this URL or the contents of this article. Thank you!
-
-
Enter the password we shared with you as part of the review process to view the article.
-
-
-`
- );
-
- class Interstitial extends T$9(HTMLElement) {
- connectedCallback() {
- if (this.shouldRemoveSelf()) {
- this.parentElement.removeChild(this);
- } else {
- const passwordInput = this.root.querySelector("#interstitial-password-input");
- passwordInput.oninput = (event) => this.passwordChanged(event);
- }
- }
-
- passwordChanged(event) {
- const entered = event.target.value;
- if (entered === this.password) {
- console.log("Correct password entered.");
- this.parentElement.removeChild(this);
- if (typeof Storage !== "undefined") {
- console.log("Saved that correct password was entered.");
- localStorage.setItem(this.localStorageIdentifier(), "true");
- }
- }
- }
-
- shouldRemoveSelf() {
- // should never be visible in production
- if (window && window.location.hostname === productionHostname) {
- console.warn("Interstitial found on production, hiding it.");
- return true;
- }
- // should only have to enter password once
- if (typeof Storage !== "undefined") {
- if (localStorage.getItem(this.localStorageIdentifier()) === "true") {
- console.log("Loaded that correct password was entered before; skipping interstitial.");
- return true;
- }
- }
- // otherwise, leave visible
- return false;
- }
-
- localStorageIdentifier() {
- const prefix = "distill-drafts";
- const suffix = "interstitial-password-correct";
- return prefix + (window ? window.location.pathname : "-") + suffix;
- }
- }
-
- function ascending(a, b) {
- return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
- }
-
- function bisector(compare) {
- if (compare.length === 1) compare = ascendingComparator(compare);
- return {
- left: function (a, x, lo, hi) {
- if (lo == null) lo = 0;
- if (hi == null) hi = a.length;
- while (lo < hi) {
- var mid = (lo + hi) >>> 1;
- if (compare(a[mid], x) < 0) lo = mid + 1;
- else hi = mid;
- }
- return lo;
- },
- right: function (a, x, lo, hi) {
- if (lo == null) lo = 0;
- if (hi == null) hi = a.length;
- while (lo < hi) {
- var mid = (lo + hi) >>> 1;
- if (compare(a[mid], x) > 0) hi = mid;
- else lo = mid + 1;
- }
- return lo;
- },
- };
- }
-
- function ascendingComparator(f) {
- return function (d, x) {
- return ascending(f(d), x);
- };
- }
-
- var ascendingBisect = bisector(ascending);
- var bisectRight = ascendingBisect.right;
-
- function range(start, stop, step) {
- (start = +start), (stop = +stop), (step = (n = arguments.length) < 2 ? ((stop = start), (start = 0), 1) : n < 3 ? 1 : +step);
-
- var i = -1,
- n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
- range = new Array(n);
-
- while (++i < n) {
- range[i] = start + i * step;
- }
-
- return range;
- }
-
- var e10 = Math.sqrt(50),
- e5 = Math.sqrt(10),
- e2 = Math.sqrt(2);
-
- function ticks(start, stop, count) {
- var reverse,
- i = -1,
- n,
- ticks,
- step;
-
- (stop = +stop), (start = +start), (count = +count);
- if (start === stop && count > 0) return [start];
- if ((reverse = stop < start)) (n = start), (start = stop), (stop = n);
- if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
-
- if (step > 0) {
- start = Math.ceil(start / step);
- stop = Math.floor(stop / step);
- ticks = new Array((n = Math.ceil(stop - start + 1)));
- while (++i < n) ticks[i] = (start + i) * step;
- } else {
- start = Math.floor(start * step);
- stop = Math.ceil(stop * step);
- ticks = new Array((n = Math.ceil(start - stop + 1)));
- while (++i < n) ticks[i] = (start - i) / step;
- }
-
- if (reverse) ticks.reverse();
-
- return ticks;
- }
-
- function tickIncrement(start, stop, count) {
- var step = (stop - start) / Math.max(0, count),
- power = Math.floor(Math.log(step) / Math.LN10),
- error = step / Math.pow(10, power);
- return power >= 0
- ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
- : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
- }
-
- function tickStep(start, stop, count) {
- var step0 = Math.abs(stop - start) / Math.max(0, count),
- step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
- error = step0 / step1;
- if (error >= e10) step1 *= 10;
- else if (error >= e5) step1 *= 5;
- else if (error >= e2) step1 *= 2;
- return stop < start ? -step1 : step1;
- }
-
- function initRange(domain, range) {
- switch (arguments.length) {
- case 0:
- break;
- case 1:
- this.range(domain);
- break;
- default:
- this.range(range).domain(domain);
- break;
- }
- return this;
- }
-
- function define(constructor, factory, prototype) {
- constructor.prototype = factory.prototype = prototype;
- prototype.constructor = constructor;
- }
-
- function extend(parent, definition) {
- var prototype = Object.create(parent.prototype);
- for (var key in definition) prototype[key] = definition[key];
- return prototype;
- }
-
- function Color() {}
-
- var darker = 0.7;
- var brighter = 1 / darker;
-
- var reI = "\\s*([+-]?\\d+)\\s*",
- reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
- reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
- reHex = /^#([0-9a-f]{3,8})$/,
- reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
- reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
- reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
- reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"),
- reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"),
- reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
-
- var named = {
- aliceblue: 0xf0f8ff,
- antiquewhite: 0xfaebd7,
- aqua: 0x00ffff,
- aquamarine: 0x7fffd4,
- azure: 0xf0ffff,
- beige: 0xf5f5dc,
- bisque: 0xffe4c4,
- black: 0x000000,
- blanchedalmond: 0xffebcd,
- blue: 0x0000ff,
- blueviolet: 0x8a2be2,
- brown: 0xa52a2a,
- burlywood: 0xdeb887,
- cadetblue: 0x5f9ea0,
- chartreuse: 0x7fff00,
- chocolate: 0xd2691e,
- coral: 0xff7f50,
- cornflowerblue: 0x6495ed,
- cornsilk: 0xfff8dc,
- crimson: 0xdc143c,
- cyan: 0x00ffff,
- darkblue: 0x00008b,
- darkcyan: 0x008b8b,
- darkgoldenrod: 0xb8860b,
- darkgray: 0xa9a9a9,
- darkgreen: 0x006400,
- darkgrey: 0xa9a9a9,
- darkkhaki: 0xbdb76b,
- darkmagenta: 0x8b008b,
- darkolivegreen: 0x556b2f,
- darkorange: 0xff8c00,
- darkorchid: 0x9932cc,
- darkred: 0x8b0000,
- darksalmon: 0xe9967a,
- darkseagreen: 0x8fbc8f,
- darkslateblue: 0x483d8b,
- darkslategray: 0x2f4f4f,
- darkslategrey: 0x2f4f4f,
- darkturquoise: 0x00ced1,
- darkviolet: 0x9400d3,
- deeppink: 0xff1493,
- deepskyblue: 0x00bfff,
- dimgray: 0x696969,
- dimgrey: 0x696969,
- dodgerblue: 0x1e90ff,
- firebrick: 0xb22222,
- floralwhite: 0xfffaf0,
- forestgreen: 0x228b22,
- fuchsia: 0xff00ff,
- gainsboro: 0xdcdcdc,
- ghostwhite: 0xf8f8ff,
- gold: 0xffd700,
- goldenrod: 0xdaa520,
- gray: 0x808080,
- green: 0x008000,
- greenyellow: 0xadff2f,
- grey: 0x808080,
- honeydew: 0xf0fff0,
- hotpink: 0xff69b4,
- indianred: 0xcd5c5c,
- indigo: 0x4b0082,
- ivory: 0xfffff0,
- khaki: 0xf0e68c,
- lavender: 0xe6e6fa,
- lavenderblush: 0xfff0f5,
- lawngreen: 0x7cfc00,
- lemonchiffon: 0xfffacd,
- lightblue: 0xadd8e6,
- lightcoral: 0xf08080,
- lightcyan: 0xe0ffff,
- lightgoldenrodyellow: 0xfafad2,
- lightgray: 0xd3d3d3,
- lightgreen: 0x90ee90,
- lightgrey: 0xd3d3d3,
- lightpink: 0xffb6c1,
- lightsalmon: 0xffa07a,
- lightseagreen: 0x20b2aa,
- lightskyblue: 0x87cefa,
- lightslategray: 0x778899,
- lightslategrey: 0x778899,
- lightsteelblue: 0xb0c4de,
- lightyellow: 0xffffe0,
- lime: 0x00ff00,
- limegreen: 0x32cd32,
- linen: 0xfaf0e6,
- magenta: 0xff00ff,
- maroon: 0x800000,
- mediumaquamarine: 0x66cdaa,
- mediumblue: 0x0000cd,
- mediumorchid: 0xba55d3,
- mediumpurple: 0x9370db,
- mediumseagreen: 0x3cb371,
- mediumslateblue: 0x7b68ee,
- mediumspringgreen: 0x00fa9a,
- mediumturquoise: 0x48d1cc,
- mediumvioletred: 0xc71585,
- midnightblue: 0x191970,
- mintcream: 0xf5fffa,
- mistyrose: 0xffe4e1,
- moccasin: 0xffe4b5,
- navajowhite: 0xffdead,
- navy: 0x000080,
- oldlace: 0xfdf5e6,
- olive: 0x808000,
- olivedrab: 0x6b8e23,
- orange: 0xffa500,
- orangered: 0xff4500,
- orchid: 0xda70d6,
- palegoldenrod: 0xeee8aa,
- palegreen: 0x98fb98,
- paleturquoise: 0xafeeee,
- palevioletred: 0xdb7093,
- papayawhip: 0xffefd5,
- peachpuff: 0xffdab9,
- peru: 0xcd853f,
- pink: 0xffc0cb,
- plum: 0xdda0dd,
- powderblue: 0xb0e0e6,
- purple: 0x800080,
- rebeccapurple: 0x663399,
- red: 0xff0000,
- rosybrown: 0xbc8f8f,
- royalblue: 0x4169e1,
- saddlebrown: 0x8b4513,
- salmon: 0xfa8072,
- sandybrown: 0xf4a460,
- seagreen: 0x2e8b57,
- seashell: 0xfff5ee,
- sienna: 0xa0522d,
- silver: 0xc0c0c0,
- skyblue: 0x87ceeb,
- slateblue: 0x6a5acd,
- slategray: 0x708090,
- slategrey: 0x708090,
- snow: 0xfffafa,
- springgreen: 0x00ff7f,
- steelblue: 0x4682b4,
- tan: 0xd2b48c,
- teal: 0x008080,
- thistle: 0xd8bfd8,
- tomato: 0xff6347,
- turquoise: 0x40e0d0,
- violet: 0xee82ee,
- wheat: 0xf5deb3,
- white: 0xffffff,
- whitesmoke: 0xf5f5f5,
- yellow: 0xffff00,
- yellowgreen: 0x9acd32,
- };
-
- define(Color, color, {
- copy: function (channels) {
- return Object.assign(new this.constructor(), this, channels);
- },
- displayable: function () {
- return this.rgb().displayable();
- },
- hex: color_formatHex, // Deprecated! Use color.formatHex.
- formatHex: color_formatHex,
- formatHsl: color_formatHsl,
- formatRgb: color_formatRgb,
- toString: color_formatRgb,
- });
-
- function color_formatHex() {
- return this.rgb().formatHex();
- }
-
- function color_formatHsl() {
- return hslConvert(this).formatHsl();
- }
-
- function color_formatRgb() {
- return this.rgb().formatRgb();
- }
-
- function color(format) {
- var m, l;
- format = (format + "").trim().toLowerCase();
- return (m = reHex.exec(format))
- ? ((l = m[1].length),
- (m = parseInt(m[1], 16)),
- l === 6
- ? rgbn(m) // #ff0000
- : l === 3
- ? new Rgb(((m >> 8) & 0xf) | ((m >> 4) & 0xf0), ((m >> 4) & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
- : l === 8
- ? rgba((m >> 24) & 0xff, (m >> 16) & 0xff, (m >> 8) & 0xff, (m & 0xff) / 0xff) // #ff000000
- : l === 4
- ? rgba(
- ((m >> 12) & 0xf) | ((m >> 8) & 0xf0),
- ((m >> 8) & 0xf) | ((m >> 4) & 0xf0),
- ((m >> 4) & 0xf) | (m & 0xf0),
- (((m & 0xf) << 4) | (m & 0xf)) / 0xff
- ) // #f000
- : null) // invalid hex
- : (m = reRgbInteger.exec(format))
- ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
- : (m = reRgbPercent.exec(format))
- ? new Rgb((m[1] * 255) / 100, (m[2] * 255) / 100, (m[3] * 255) / 100, 1) // rgb(100%, 0%, 0%)
- : (m = reRgbaInteger.exec(format))
- ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
- : (m = reRgbaPercent.exec(format))
- ? rgba((m[1] * 255) / 100, (m[2] * 255) / 100, (m[3] * 255) / 100, m[4]) // rgb(100%, 0%, 0%, 1)
- : (m = reHslPercent.exec(format))
- ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
- : (m = reHslaPercent.exec(format))
- ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
- : named.hasOwnProperty(format)
- ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
- : format === "transparent"
- ? new Rgb(NaN, NaN, NaN, 0)
- : null;
- }
-
- function rgbn(n) {
- return new Rgb((n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff, 1);
- }
-
- function rgba(r, g, b, a) {
- if (a <= 0) r = g = b = NaN;
- return new Rgb(r, g, b, a);
- }
-
- function rgbConvert(o) {
- if (!(o instanceof Color)) o = color(o);
- if (!o) return new Rgb();
- o = o.rgb();
- return new Rgb(o.r, o.g, o.b, o.opacity);
- }
-
- function rgb(r, g, b, opacity) {
- return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
- }
-
- function Rgb(r, g, b, opacity) {
- this.r = +r;
- this.g = +g;
- this.b = +b;
- this.opacity = +opacity;
- }
-
- define(
- Rgb,
- rgb,
- extend(Color, {
- brighter: function (k) {
- k = k == null ? brighter : Math.pow(brighter, k);
- return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
- },
- darker: function (k) {
- k = k == null ? darker : Math.pow(darker, k);
- return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
- },
- rgb: function () {
- return this;
- },
- displayable: function () {
- return (
- -0.5 <= this.r &&
- this.r < 255.5 &&
- -0.5 <= this.g &&
- this.g < 255.5 &&
- -0.5 <= this.b &&
- this.b < 255.5 &&
- 0 <= this.opacity &&
- this.opacity <= 1
- );
- },
- hex: rgb_formatHex, // Deprecated! Use color.formatHex.
- formatHex: rgb_formatHex,
- formatRgb: rgb_formatRgb,
- toString: rgb_formatRgb,
- })
- );
-
- function rgb_formatHex() {
- return "#" + hex(this.r) + hex(this.g) + hex(this.b);
- }
-
- function rgb_formatRgb() {
- var a = this.opacity;
- a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
- return (
- (a === 1 ? "rgb(" : "rgba(") +
- Math.max(0, Math.min(255, Math.round(this.r) || 0)) +
- ", " +
- Math.max(0, Math.min(255, Math.round(this.g) || 0)) +
- ", " +
- Math.max(0, Math.min(255, Math.round(this.b) || 0)) +
- (a === 1 ? ")" : ", " + a + ")")
- );
- }
-
- function hex(value) {
- value = Math.max(0, Math.min(255, Math.round(value) || 0));
- return (value < 16 ? "0" : "") + value.toString(16);
- }
-
- function hsla(h, s, l, a) {
- if (a <= 0) h = s = l = NaN;
- else if (l <= 0 || l >= 1) h = s = NaN;
- else if (s <= 0) h = NaN;
- return new Hsl(h, s, l, a);
- }
-
- function hslConvert(o) {
- if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
- if (!(o instanceof Color)) o = color(o);
- if (!o) return new Hsl();
- if (o instanceof Hsl) return o;
- o = o.rgb();
- var r = o.r / 255,
- g = o.g / 255,
- b = o.b / 255,
- min = Math.min(r, g, b),
- max = Math.max(r, g, b),
- h = NaN,
- s = max - min,
- l = (max + min) / 2;
- if (s) {
- if (r === max) h = (g - b) / s + (g < b) * 6;
- else if (g === max) h = (b - r) / s + 2;
- else h = (r - g) / s + 4;
- s /= l < 0.5 ? max + min : 2 - max - min;
- h *= 60;
- } else {
- s = l > 0 && l < 1 ? 0 : h;
- }
- return new Hsl(h, s, l, o.opacity);
- }
-
- function hsl(h, s, l, opacity) {
- return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
- }
-
- function Hsl(h, s, l, opacity) {
- this.h = +h;
- this.s = +s;
- this.l = +l;
- this.opacity = +opacity;
- }
-
- define(
- Hsl,
- hsl,
- extend(Color, {
- brighter: function (k) {
- k = k == null ? brighter : Math.pow(brighter, k);
- return new Hsl(this.h, this.s, this.l * k, this.opacity);
- },
- darker: function (k) {
- k = k == null ? darker : Math.pow(darker, k);
- return new Hsl(this.h, this.s, this.l * k, this.opacity);
- },
- rgb: function () {
- var h = (this.h % 360) + (this.h < 0) * 360,
- s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
- l = this.l,
- m2 = l + (l < 0.5 ? l : 1 - l) * s,
- m1 = 2 * l - m2;
- return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity);
- },
- displayable: function () {
- return ((0 <= this.s && this.s <= 1) || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;
- },
- formatHsl: function () {
- var a = this.opacity;
- a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
- return (
- (a === 1 ? "hsl(" : "hsla(") +
- (this.h || 0) +
- ", " +
- (this.s || 0) * 100 +
- "%, " +
- (this.l || 0) * 100 +
- "%" +
- (a === 1 ? ")" : ", " + a + ")")
- );
- },
- })
- );
-
- /* From FvD 13.37, CSS Color Module Level 3 */
- function hsl2rgb(h, m1, m2) {
- return (h < 60 ? m1 + ((m2 - m1) * h) / 60 : h < 180 ? m2 : h < 240 ? m1 + ((m2 - m1) * (240 - h)) / 60 : m1) * 255;
- }
-
- var deg2rad = Math.PI / 180;
- var rad2deg = 180 / Math.PI;
-
- // https://observablehq.com/@mbostock/lab-and-rgb
- var K = 18,
- Xn = 0.96422,
- Yn = 1,
- Zn = 0.82521,
- t0 = 4 / 29,
- t1 = 6 / 29,
- t2 = 3 * t1 * t1,
- t3 = t1 * t1 * t1;
-
- function labConvert(o) {
- if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
- if (o instanceof Hcl) return hcl2lab(o);
- if (!(o instanceof Rgb)) o = rgbConvert(o);
- var r = rgb2lrgb(o.r),
- g = rgb2lrgb(o.g),
- b = rgb2lrgb(o.b),
- y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn),
- x,
- z;
- if (r === g && g === b) x = z = y;
- else {
- x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
- z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
- }
- return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
- }
-
- function lab(l, a, b, opacity) {
- return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
- }
-
- function Lab(l, a, b, opacity) {
- this.l = +l;
- this.a = +a;
- this.b = +b;
- this.opacity = +opacity;
- }
-
- define(
- Lab,
- lab,
- extend(Color, {
- brighter: function (k) {
- return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
- },
- darker: function (k) {
- return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
- },
- rgb: function () {
- var y = (this.l + 16) / 116,
- x = isNaN(this.a) ? y : y + this.a / 500,
- z = isNaN(this.b) ? y : y - this.b / 200;
- x = Xn * lab2xyz(x);
- y = Yn * lab2xyz(y);
- z = Zn * lab2xyz(z);
- return new Rgb(
- lrgb2rgb(3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
- lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.033454 * z),
- lrgb2rgb(0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
- this.opacity
- );
- },
- })
- );
-
- function xyz2lab(t) {
- return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
- }
-
- function lab2xyz(t) {
- return t > t1 ? t * t * t : t2 * (t - t0);
- }
-
- function lrgb2rgb(x) {
- return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
- }
-
- function rgb2lrgb(x) {
- return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
- }
-
- function hclConvert(o) {
- if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
- if (!(o instanceof Lab)) o = labConvert(o);
- if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);
- var h = Math.atan2(o.b, o.a) * rad2deg;
- return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
- }
-
- function hcl(h, c, l, opacity) {
- return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
- }
-
- function Hcl(h, c, l, opacity) {
- this.h = +h;
- this.c = +c;
- this.l = +l;
- this.opacity = +opacity;
- }
-
- function hcl2lab(o) {
- if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);
- var h = o.h * deg2rad;
- return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
- }
-
- define(
- Hcl,
- hcl,
- extend(Color, {
- brighter: function (k) {
- return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
- },
- darker: function (k) {
- return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
- },
- rgb: function () {
- return hcl2lab(this).rgb();
- },
- })
- );
-
- var A = -0.14861,
- B = +1.78277,
- C = -0.29227,
- D = -0.90649,
- E = +1.97294,
- ED = E * D,
- EB = E * B,
- BC_DA = B * C - D * A;
-
- function cubehelixConvert(o) {
- if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
- if (!(o instanceof Rgb)) o = rgbConvert(o);
- var r = o.r / 255,
- g = o.g / 255,
- b = o.b / 255,
- l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
- bl = b - l,
- k = (E * (g - l) - C * bl) / D,
- s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
- h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
- return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
- }
-
- function cubehelix(h, s, l, opacity) {
- return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
- }
-
- function Cubehelix(h, s, l, opacity) {
- this.h = +h;
- this.s = +s;
- this.l = +l;
- this.opacity = +opacity;
- }
-
- define(
- Cubehelix,
- cubehelix,
- extend(Color, {
- brighter: function (k) {
- k = k == null ? brighter : Math.pow(brighter, k);
- return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
- },
- darker: function (k) {
- k = k == null ? darker : Math.pow(darker, k);
- return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
- },
- rgb: function () {
- var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
- l = +this.l,
- a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
- cosh = Math.cos(h),
- sinh = Math.sin(h);
- return new Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);
- },
- })
- );
-
- function constant(x) {
- return function () {
- return x;
- };
- }
-
- function linear(a, d) {
- return function (t) {
- return a + t * d;
- };
- }
-
- function exponential(a, b, y) {
- return (
- (a = Math.pow(a, y)),
- (b = Math.pow(b, y) - a),
- (y = 1 / y),
- function (t) {
- return Math.pow(a + t * b, y);
- }
- );
- }
-
- function gamma(y) {
- return (y = +y) === 1
- ? nogamma
- : function (a, b) {
- return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);
- };
- }
-
- function nogamma(a, b) {
- var d = b - a;
- return d ? linear(a, d) : constant(isNaN(a) ? b : a);
- }
-
- var rgb$1 = (function rgbGamma(y) {
- var color = gamma(y);
-
- function rgb$1(start, end) {
- var r = color((start = rgb(start)).r, (end = rgb(end)).r),
- g = color(start.g, end.g),
- b = color(start.b, end.b),
- opacity = nogamma(start.opacity, end.opacity);
- return function (t) {
- start.r = r(t);
- start.g = g(t);
- start.b = b(t);
- start.opacity = opacity(t);
- return start + "";
- };
- }
-
- rgb$1.gamma = rgbGamma;
-
- return rgb$1;
- })(1);
-
- function numberArray(a, b) {
- if (!b) b = [];
- var n = a ? Math.min(b.length, a.length) : 0,
- c = b.slice(),
- i;
- return function (t) {
- for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;
- return c;
- };
- }
-
- function isNumberArray(x) {
- return ArrayBuffer.isView(x) && !(x instanceof DataView);
- }
-
- function genericArray(a, b) {
- var nb = b ? b.length : 0,
- na = a ? Math.min(nb, a.length) : 0,
- x = new Array(na),
- c = new Array(nb),
- i;
-
- for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);
- for (; i < nb; ++i) c[i] = b[i];
-
- return function (t) {
- for (i = 0; i < na; ++i) c[i] = x[i](t);
- return c;
- };
- }
-
- function date(a, b) {
- var d = new Date();
- return (
- (a = +a),
- (b = +b),
- function (t) {
- return d.setTime(a * (1 - t) + b * t), d;
- }
- );
- }
-
- function interpolateNumber(a, b) {
- return (
- (a = +a),
- (b = +b),
- function (t) {
- return a * (1 - t) + b * t;
- }
- );
- }
-
- function object(a, b) {
- var i = {},
- c = {},
- k;
-
- if (a === null || typeof a !== "object") a = {};
- if (b === null || typeof b !== "object") b = {};
-
- for (k in b) {
- if (k in a) {
- i[k] = interpolate(a[k], b[k]);
- } else {
- c[k] = b[k];
- }
- }
-
- return function (t) {
- for (k in i) c[k] = i[k](t);
- return c;
- };
- }
-
- var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
- reB = new RegExp(reA.source, "g");
-
- function zero(b) {
- return function () {
- return b;
- };
- }
-
- function one(b) {
- return function (t) {
- return b(t) + "";
- };
- }
-
- function string(a, b) {
- var bi = (reA.lastIndex = reB.lastIndex = 0), // scan index for next number in b
- am, // current match in a
- bm, // current match in b
- bs, // string preceding current number in b, if any
- i = -1, // index in s
- s = [], // string constants and placeholders
- q = []; // number interpolators
-
- // Coerce inputs to strings.
- (a = a + ""), (b = b + "");
-
- // Interpolate pairs of numbers in a & b.
- while ((am = reA.exec(a)) && (bm = reB.exec(b))) {
- if ((bs = bm.index) > bi) {
- // a string precedes the next number in b
- bs = b.slice(bi, bs);
- if (s[i])
- s[i] += bs; // coalesce with previous string
- else s[++i] = bs;
- }
- if ((am = am[0]) === (bm = bm[0])) {
- // numbers in a & b match
- if (s[i])
- s[i] += bm; // coalesce with previous string
- else s[++i] = bm;
- } else {
- // interpolate non-matching numbers
- s[++i] = null;
- q.push({ i: i, x: interpolateNumber(am, bm) });
- }
- bi = reB.lastIndex;
- }
-
- // Add remains of b.
- if (bi < b.length) {
- bs = b.slice(bi);
- if (s[i])
- s[i] += bs; // coalesce with previous string
- else s[++i] = bs;
- }
-
- // Special optimization for only a single match.
- // Otherwise, interpolate each of the numbers and rejoin the string.
- return s.length < 2
- ? q[0]
- ? one(q[0].x)
- : zero(b)
- : ((b = q.length),
- function (t) {
- for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
- return s.join("");
- });
- }
-
- function interpolate(a, b) {
- var t = typeof b,
- c;
- return b == null || t === "boolean"
- ? constant(b)
- : (t === "number"
- ? interpolateNumber
- : t === "string"
- ? (c = color(b))
- ? ((b = c), rgb$1)
- : string
- : b instanceof color
- ? rgb$1
- : b instanceof Date
- ? date
- : isNumberArray(b)
- ? numberArray
- : Array.isArray(b)
- ? genericArray
- : (typeof b.valueOf !== "function" && typeof b.toString !== "function") || isNaN(b)
- ? object
- : interpolateNumber)(a, b);
- }
-
- function interpolateRound(a, b) {
- return (
- (a = +a),
- (b = +b),
- function (t) {
- return Math.round(a * (1 - t) + b * t);
- }
- );
- }
-
- function constant$1(x) {
- return function () {
- return x;
- };
- }
-
- function number(x) {
- return +x;
- }
-
- var unit = [0, 1];
-
- function identity(x) {
- return x;
- }
-
- function normalize(a, b) {
- return (b -= a = +a)
- ? function (x) {
- return (x - a) / b;
- }
- : constant$1(isNaN(b) ? NaN : 0.5);
- }
-
- function clamper(a, b) {
- var t;
- if (a > b) (t = a), (a = b), (b = t);
- return function (x) {
- return Math.max(a, Math.min(b, x));
- };
- }
-
- // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
- // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
- function bimap(domain, range, interpolate) {
- var d0 = domain[0],
- d1 = domain[1],
- r0 = range[0],
- r1 = range[1];
- if (d1 < d0) (d0 = normalize(d1, d0)), (r0 = interpolate(r1, r0));
- else (d0 = normalize(d0, d1)), (r0 = interpolate(r0, r1));
- return function (x) {
- return r0(d0(x));
- };
- }
-
- function polymap(domain, range, interpolate) {
- var j = Math.min(domain.length, range.length) - 1,
- d = new Array(j),
- r = new Array(j),
- i = -1;
-
- // Reverse descending domains.
- if (domain[j] < domain[0]) {
- domain = domain.slice().reverse();
- range = range.slice().reverse();
- }
-
- while (++i < j) {
- d[i] = normalize(domain[i], domain[i + 1]);
- r[i] = interpolate(range[i], range[i + 1]);
- }
-
- return function (x) {
- var i = bisectRight(domain, x, 1, j) - 1;
- return r[i](d[i](x));
- };
- }
-
- function copy(source, target) {
- return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp()).unknown(source.unknown());
- }
-
- function transformer() {
- var domain = unit,
- range = unit,
- interpolate$1 = interpolate,
- transform,
- untransform,
- unknown,
- clamp = identity,
- piecewise,
- output,
- input;
-
- function rescale() {
- var n = Math.min(domain.length, range.length);
- if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);
- piecewise = n > 2 ? polymap : bimap;
- output = input = null;
- return scale;
- }
-
- function scale(x) {
- return isNaN((x = +x)) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x)));
- }
-
- scale.invert = function (y) {
- return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));
- };
-
- scale.domain = function (_) {
- return arguments.length ? ((domain = Array.from(_, number)), rescale()) : domain.slice();
- };
-
- scale.range = function (_) {
- return arguments.length ? ((range = Array.from(_)), rescale()) : range.slice();
- };
-
- scale.rangeRound = function (_) {
- return (range = Array.from(_)), (interpolate$1 = interpolateRound), rescale();
- };
-
- scale.clamp = function (_) {
- return arguments.length ? ((clamp = _ ? true : identity), rescale()) : clamp !== identity;
- };
-
- scale.interpolate = function (_) {
- return arguments.length ? ((interpolate$1 = _), rescale()) : interpolate$1;
- };
-
- scale.unknown = function (_) {
- return arguments.length ? ((unknown = _), scale) : unknown;
- };
-
- return function (t, u) {
- (transform = t), (untransform = u);
- return rescale();
- };
- }
-
- function continuous() {
- return transformer()(identity, identity);
- }
-
- // Computes the decimal coefficient and exponent of the specified number x with
- // significant digits p, where x is positive and p is in [1, 21] or undefined.
- // For example, formatDecimal(1.23) returns ["123", 0].
- function formatDecimal(x, p) {
- if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
- var i,
- coefficient = x.slice(0, i);
-
- // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
- // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
- return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1)];
- }
-
- function exponent(x) {
- return (x = formatDecimal(Math.abs(x))), x ? x[1] : NaN;
- }
-
- function formatGroup(grouping, thousands) {
- return function (value, width) {
- var i = value.length,
- t = [],
- j = 0,
- g = grouping[0],
- length = 0;
-
- while (i > 0 && g > 0) {
- if (length + g + 1 > width) g = Math.max(1, width - length);
- t.push(value.substring((i -= g), i + g));
- if ((length += g + 1) > width) break;
- g = grouping[(j = (j + 1) % grouping.length)];
- }
-
- return t.reverse().join(thousands);
- };
- }
-
- function formatNumerals(numerals) {
- return function (value) {
- return value.replace(/[0-9]/g, function (i) {
- return numerals[+i];
- });
- };
- }
-
- // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
- var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
-
- function formatSpecifier(specifier) {
- if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
- var match;
- return new FormatSpecifier({
- fill: match[1],
- align: match[2],
- sign: match[3],
- symbol: match[4],
- zero: match[5],
- width: match[6],
- comma: match[7],
- precision: match[8] && match[8].slice(1),
- trim: match[9],
- type: match[10],
- });
- }
-
- formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
-
- function FormatSpecifier(specifier) {
- this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
- this.align = specifier.align === undefined ? ">" : specifier.align + "";
- this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
- this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
- this.zero = !!specifier.zero;
- this.width = specifier.width === undefined ? undefined : +specifier.width;
- this.comma = !!specifier.comma;
- this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
- this.trim = !!specifier.trim;
- this.type = specifier.type === undefined ? "" : specifier.type + "";
- }
-
- FormatSpecifier.prototype.toString = function () {
- return (
- this.fill +
- this.align +
- this.sign +
- this.symbol +
- (this.zero ? "0" : "") +
- (this.width === undefined ? "" : Math.max(1, this.width | 0)) +
- (this.comma ? "," : "") +
- (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) +
- (this.trim ? "~" : "") +
- this.type
- );
- };
-
- // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
- function formatTrim(s) {
- out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
- switch (s[i]) {
- case ".":
- i0 = i1 = i;
- break;
- case "0":
- if (i0 === 0) i0 = i;
- i1 = i;
- break;
- default:
- if (!+s[i]) break out;
- if (i0 > 0) i0 = 0;
- break;
- }
- }
- return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
- }
-
- var prefixExponent;
-
- function formatPrefixAuto(x, p) {
- var d = formatDecimal(x, p);
- if (!d) return x + "";
- var coefficient = d[0],
- exponent = d[1],
- i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
- n = coefficient.length;
- return i === n
- ? coefficient
- : i > n
- ? coefficient + new Array(i - n + 1).join("0")
- : i > 0
- ? coefficient.slice(0, i) + "." + coefficient.slice(i)
- : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
- }
-
- function formatRounded(x, p) {
- var d = formatDecimal(x, p);
- if (!d) return x + "";
- var coefficient = d[0],
- exponent = d[1];
- return exponent < 0
- ? "0." + new Array(-exponent).join("0") + coefficient
- : coefficient.length > exponent + 1
- ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
- : coefficient + new Array(exponent - coefficient.length + 2).join("0");
- }
-
- var formatTypes = {
- "%": function (x, p) {
- return (x * 100).toFixed(p);
- },
- b: function (x) {
- return Math.round(x).toString(2);
- },
- c: function (x) {
- return x + "";
- },
- d: function (x) {
- return Math.round(x).toString(10);
- },
- e: function (x, p) {
- return x.toExponential(p);
- },
- f: function (x, p) {
- return x.toFixed(p);
- },
- g: function (x, p) {
- return x.toPrecision(p);
- },
- o: function (x) {
- return Math.round(x).toString(8);
- },
- p: function (x, p) {
- return formatRounded(x * 100, p);
- },
- r: formatRounded,
- s: formatPrefixAuto,
- X: function (x) {
- return Math.round(x).toString(16).toUpperCase();
- },
- x: function (x) {
- return Math.round(x).toString(16);
- },
- };
-
- function identity$1(x) {
- return x;
- }
-
- var map = Array.prototype.map,
- prefixes = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
-
- function formatLocale(locale) {
- var group =
- locale.grouping === undefined || locale.thousands === undefined
- ? identity$1
- : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),
- currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
- currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
- decimal = locale.decimal === undefined ? "." : locale.decimal + "",
- numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map.call(locale.numerals, String)),
- percent = locale.percent === undefined ? "%" : locale.percent + "",
- minus = locale.minus === undefined ? "-" : locale.minus + "",
- nan = locale.nan === undefined ? "NaN" : locale.nan + "";
-
- function newFormat(specifier) {
- specifier = formatSpecifier(specifier);
-
- var fill = specifier.fill,
- align = specifier.align,
- sign = specifier.sign,
- symbol = specifier.symbol,
- zero = specifier.zero,
- width = specifier.width,
- comma = specifier.comma,
- precision = specifier.precision,
- trim = specifier.trim,
- type = specifier.type;
-
- // The "n" type is an alias for ",g".
- if (type === "n") (comma = true), (type = "g");
- // The "" type, and any invalid type, is an alias for ".12~g".
- else if (!formatTypes[type]) precision === undefined && (precision = 12), (trim = true), (type = "g");
-
- // If zero fill is specified, padding goes after sign and before digits.
- if (zero || (fill === "0" && align === "=")) (zero = true), (fill = "0"), (align = "=");
-
- // Compute the prefix and suffix.
- // For SI-prefix, the suffix is lazily computed.
- var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
- suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
-
- // What format function should we use?
- // Is this an integer type?
- // Can this type generate exponential notation?
- var formatType = formatTypes[type],
- maybeSuffix = /[defgprs%]/.test(type);
-
- // Set the default precision if not specified,
- // or clamp the specified precision to the supported range.
- // For significant precision, it must be in [1, 21].
- // For fixed precision, it must be in [0, 20].
- precision = precision === undefined ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
-
- function format(value) {
- var valuePrefix = prefix,
- valueSuffix = suffix,
- i,
- n,
- c;
-
- if (type === "c") {
- valueSuffix = formatType(value) + valueSuffix;
- value = "";
- } else {
- value = +value;
-
- // Determine the sign. -0 is not less than 0, but 1 / -0 is!
- var valueNegative = value < 0 || 1 / value < 0;
-
- // Perform the initial formatting.
- value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
-
- // Trim insignificant zeros.
- if (trim) value = formatTrim(value);
-
- // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
- if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
-
- // Compute the prefix and suffix.
- valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
- valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
-
- // Break the formatted value into the integer “value” part that can be
- // grouped, and fractional or exponential “suffix” part that is not.
- if (maybeSuffix) {
- (i = -1), (n = value.length);
- while (++i < n) {
- if (((c = value.charCodeAt(i)), 48 > c || c > 57)) {
- valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
- value = value.slice(0, i);
- break;
- }
- }
- }
- }
-
- // If the fill character is not "0", grouping is applied before padding.
- if (comma && !zero) value = group(value, Infinity);
-
- // Compute the padding.
- var length = valuePrefix.length + value.length + valueSuffix.length,
- padding = length < width ? new Array(width - length + 1).join(fill) : "";
-
- // If the fill character is "0", grouping is applied after padding.
- if (comma && zero) (value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity)), (padding = "");
-
- // Reconstruct the final output based on the desired alignment.
- switch (align) {
- case "<":
- value = valuePrefix + value + valueSuffix + padding;
- break;
- case "=":
- value = valuePrefix + padding + value + valueSuffix;
- break;
- case "^":
- value = padding.slice(0, (length = padding.length >> 1)) + valuePrefix + value + valueSuffix + padding.slice(length);
- break;
- default:
- value = padding + valuePrefix + value + valueSuffix;
- break;
- }
-
- return numerals(value);
- }
-
- format.toString = function () {
- return specifier + "";
- };
-
- return format;
- }
-
- function formatPrefix(specifier, value) {
- var f = newFormat(((specifier = formatSpecifier(specifier)), (specifier.type = "f"), specifier)),
- e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
- k = Math.pow(10, -e),
- prefix = prefixes[8 + e / 3];
- return function (value) {
- return f(k * value) + prefix;
- };
- }
-
- return {
- format: newFormat,
- formatPrefix: formatPrefix,
- };
- }
-
- var locale;
- var format;
- var formatPrefix;
-
- defaultLocale({
- decimal: ".",
- thousands: ",",
- grouping: [3],
- currency: ["$", ""],
- minus: "-",
- });
-
- function defaultLocale(definition) {
- locale = formatLocale(definition);
- format = locale.format;
- formatPrefix = locale.formatPrefix;
- return locale;
- }
-
- function precisionFixed(step) {
- return Math.max(0, -exponent(Math.abs(step)));
- }
-
- function precisionPrefix(step, value) {
- return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));
- }
-
- function precisionRound(step, max) {
- (step = Math.abs(step)), (max = Math.abs(max) - step);
- return Math.max(0, exponent(max) - exponent(step)) + 1;
- }
-
- function tickFormat(start, stop, count, specifier) {
- var step = tickStep(start, stop, count),
- precision;
- specifier = formatSpecifier(specifier == null ? ",f" : specifier);
- switch (specifier.type) {
- case "s": {
- var value = Math.max(Math.abs(start), Math.abs(stop));
- if (specifier.precision == null && !isNaN((precision = precisionPrefix(step, value)))) specifier.precision = precision;
- return formatPrefix(specifier, value);
- }
- case "":
- case "e":
- case "g":
- case "p":
- case "r": {
- if (specifier.precision == null && !isNaN((precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))))
- specifier.precision = precision - (specifier.type === "e");
- break;
- }
- case "f":
- case "%": {
- if (specifier.precision == null && !isNaN((precision = precisionFixed(step)))) specifier.precision = precision - (specifier.type === "%") * 2;
- break;
- }
- }
- return format(specifier);
- }
-
- function linearish(scale) {
- var domain = scale.domain;
-
- scale.ticks = function (count) {
- var d = domain();
- return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
- };
-
- scale.tickFormat = function (count, specifier) {
- var d = domain();
- return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
- };
-
- scale.nice = function (count) {
- if (count == null) count = 10;
-
- var d = domain(),
- i0 = 0,
- i1 = d.length - 1,
- start = d[i0],
- stop = d[i1],
- step;
-
- if (stop < start) {
- (step = start), (start = stop), (stop = step);
- (step = i0), (i0 = i1), (i1 = step);
- }
-
- step = tickIncrement(start, stop, count);
-
- if (step > 0) {
- start = Math.floor(start / step) * step;
- stop = Math.ceil(stop / step) * step;
- step = tickIncrement(start, stop, count);
- } else if (step < 0) {
- start = Math.ceil(start * step) / step;
- stop = Math.floor(stop * step) / step;
- step = tickIncrement(start, stop, count);
- }
-
- if (step > 0) {
- d[i0] = Math.floor(start / step) * step;
- d[i1] = Math.ceil(stop / step) * step;
- domain(d);
- } else if (step < 0) {
- d[i0] = Math.ceil(start * step) / step;
- d[i1] = Math.floor(stop * step) / step;
- domain(d);
- }
-
- return scale;
- };
-
- return scale;
- }
-
- function linear$1() {
- var scale = continuous();
-
- scale.copy = function () {
- return copy(scale, linear$1());
- };
-
- initRange.apply(scale, arguments);
-
- return linearish(scale);
- }
-
- var t0$1 = new Date(),
- t1$1 = new Date();
-
- function newInterval(floori, offseti, count, field) {
- function interval(date) {
- return floori((date = arguments.length === 0 ? new Date() : new Date(+date))), date;
- }
-
- interval.floor = function (date) {
- return floori((date = new Date(+date))), date;
- };
-
- interval.ceil = function (date) {
- return floori((date = new Date(date - 1))), offseti(date, 1), floori(date), date;
- };
-
- interval.round = function (date) {
- var d0 = interval(date),
- d1 = interval.ceil(date);
- return date - d0 < d1 - date ? d0 : d1;
- };
-
- interval.offset = function (date, step) {
- return offseti((date = new Date(+date)), step == null ? 1 : Math.floor(step)), date;
- };
-
- interval.range = function (start, stop, step) {
- var range = [],
- previous;
- start = interval.ceil(start);
- step = step == null ? 1 : Math.floor(step);
- if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
- do range.push((previous = new Date(+start))), offseti(start, step), floori(start);
- while (previous < start && start < stop);
- return range;
- };
-
- interval.filter = function (test) {
- return newInterval(
- function (date) {
- if (date >= date) while ((floori(date), !test(date))) date.setTime(date - 1);
- },
- function (date, step) {
- if (date >= date) {
- if (step < 0)
- while (++step <= 0) {
- while ((offseti(date, -1), !test(date))) {} // eslint-disable-line no-empty
- }
- else
- while (--step >= 0) {
- while ((offseti(date, +1), !test(date))) {} // eslint-disable-line no-empty
- }
- }
- }
- );
- };
-
- if (count) {
- interval.count = function (start, end) {
- t0$1.setTime(+start), t1$1.setTime(+end);
- floori(t0$1), floori(t1$1);
- return Math.floor(count(t0$1, t1$1));
- };
-
- interval.every = function (step) {
- step = Math.floor(step);
- return !isFinite(step) || !(step > 0)
- ? null
- : !(step > 1)
- ? interval
- : interval.filter(
- field
- ? function (d) {
- return field(d) % step === 0;
- }
- : function (d) {
- return interval.count(0, d) % step === 0;
- }
- );
- };
- }
-
- return interval;
- }
-
- var millisecond = newInterval(
- function () {
- // noop
- },
- function (date, step) {
- date.setTime(+date + step);
- },
- function (start, end) {
- return end - start;
- }
- );
-
- // An optimized implementation for this simple case.
- millisecond.every = function (k) {
- k = Math.floor(k);
- if (!isFinite(k) || !(k > 0)) return null;
- if (!(k > 1)) return millisecond;
- return newInterval(
- function (date) {
- date.setTime(Math.floor(date / k) * k);
- },
- function (date, step) {
- date.setTime(+date + step * k);
- },
- function (start, end) {
- return (end - start) / k;
- }
- );
- };
-
- var durationSecond = 1e3;
- var durationMinute = 6e4;
- var durationHour = 36e5;
- var durationDay = 864e5;
- var durationWeek = 6048e5;
-
- var second = newInterval(
- function (date) {
- date.setTime(date - date.getMilliseconds());
- },
- function (date, step) {
- date.setTime(+date + step * durationSecond);
- },
- function (start, end) {
- return (end - start) / durationSecond;
- },
- function (date) {
- return date.getUTCSeconds();
- }
- );
-
- var minute = newInterval(
- function (date) {
- date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
- },
- function (date, step) {
- date.setTime(+date + step * durationMinute);
- },
- function (start, end) {
- return (end - start) / durationMinute;
- },
- function (date) {
- return date.getMinutes();
- }
- );
-
- var hour = newInterval(
- function (date) {
- date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
- },
- function (date, step) {
- date.setTime(+date + step * durationHour);
- },
- function (start, end) {
- return (end - start) / durationHour;
- },
- function (date) {
- return date.getHours();
- }
- );
-
- var day = newInterval(
- function (date) {
- date.setHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setDate(date.getDate() + step);
- },
- function (start, end) {
- return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
- },
- function (date) {
- return date.getDate() - 1;
- }
- );
-
- function weekday(i) {
- return newInterval(
- function (date) {
- date.setDate(date.getDate() - ((date.getDay() + 7 - i) % 7));
- date.setHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setDate(date.getDate() + step * 7);
- },
- function (start, end) {
- return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
- }
- );
- }
-
- var sunday = weekday(0);
- var monday = weekday(1);
- var tuesday = weekday(2);
- var wednesday = weekday(3);
- var thursday = weekday(4);
- var friday = weekday(5);
- var saturday = weekday(6);
-
- var month = newInterval(
- function (date) {
- date.setDate(1);
- date.setHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setMonth(date.getMonth() + step);
- },
- function (start, end) {
- return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
- },
- function (date) {
- return date.getMonth();
- }
- );
-
- var year = newInterval(
- function (date) {
- date.setMonth(0, 1);
- date.setHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setFullYear(date.getFullYear() + step);
- },
- function (start, end) {
- return end.getFullYear() - start.getFullYear();
- },
- function (date) {
- return date.getFullYear();
- }
- );
-
- // An optimized implementation for this simple case.
- year.every = function (k) {
- return !isFinite((k = Math.floor(k))) || !(k > 0)
- ? null
- : newInterval(
- function (date) {
- date.setFullYear(Math.floor(date.getFullYear() / k) * k);
- date.setMonth(0, 1);
- date.setHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setFullYear(date.getFullYear() + step * k);
- }
- );
- };
-
- var utcMinute = newInterval(
- function (date) {
- date.setUTCSeconds(0, 0);
- },
- function (date, step) {
- date.setTime(+date + step * durationMinute);
- },
- function (start, end) {
- return (end - start) / durationMinute;
- },
- function (date) {
- return date.getUTCMinutes();
- }
- );
-
- var utcHour = newInterval(
- function (date) {
- date.setUTCMinutes(0, 0, 0);
- },
- function (date, step) {
- date.setTime(+date + step * durationHour);
- },
- function (start, end) {
- return (end - start) / durationHour;
- },
- function (date) {
- return date.getUTCHours();
- }
- );
-
- var utcDay = newInterval(
- function (date) {
- date.setUTCHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setUTCDate(date.getUTCDate() + step);
- },
- function (start, end) {
- return (end - start) / durationDay;
- },
- function (date) {
- return date.getUTCDate() - 1;
- }
- );
-
- function utcWeekday(i) {
- return newInterval(
- function (date) {
- date.setUTCDate(date.getUTCDate() - ((date.getUTCDay() + 7 - i) % 7));
- date.setUTCHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setUTCDate(date.getUTCDate() + step * 7);
- },
- function (start, end) {
- return (end - start) / durationWeek;
- }
- );
- }
-
- var utcSunday = utcWeekday(0);
- var utcMonday = utcWeekday(1);
- var utcTuesday = utcWeekday(2);
- var utcWednesday = utcWeekday(3);
- var utcThursday = utcWeekday(4);
- var utcFriday = utcWeekday(5);
- var utcSaturday = utcWeekday(6);
-
- var utcMonth = newInterval(
- function (date) {
- date.setUTCDate(1);
- date.setUTCHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setUTCMonth(date.getUTCMonth() + step);
- },
- function (start, end) {
- return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
- },
- function (date) {
- return date.getUTCMonth();
- }
- );
-
- var utcYear = newInterval(
- function (date) {
- date.setUTCMonth(0, 1);
- date.setUTCHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setUTCFullYear(date.getUTCFullYear() + step);
- },
- function (start, end) {
- return end.getUTCFullYear() - start.getUTCFullYear();
- },
- function (date) {
- return date.getUTCFullYear();
- }
- );
-
- // An optimized implementation for this simple case.
- utcYear.every = function (k) {
- return !isFinite((k = Math.floor(k))) || !(k > 0)
- ? null
- : newInterval(
- function (date) {
- date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
- date.setUTCMonth(0, 1);
- date.setUTCHours(0, 0, 0, 0);
- },
- function (date, step) {
- date.setUTCFullYear(date.getUTCFullYear() + step * k);
- }
- );
- };
-
- function localDate(d) {
- if (0 <= d.y && d.y < 100) {
- var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
- date.setFullYear(d.y);
- return date;
- }
- return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
- }
-
- function utcDate(d) {
- if (0 <= d.y && d.y < 100) {
- var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
- date.setUTCFullYear(d.y);
- return date;
- }
- return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
- }
-
- function newDate(y, m, d) {
- return { y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0 };
- }
-
- function formatLocale$1(locale) {
- var locale_dateTime = locale.dateTime,
- locale_date = locale.date,
- locale_time = locale.time,
- locale_periods = locale.periods,
- locale_weekdays = locale.days,
- locale_shortWeekdays = locale.shortDays,
- locale_months = locale.months,
- locale_shortMonths = locale.shortMonths;
-
- var periodRe = formatRe(locale_periods),
- periodLookup = formatLookup(locale_periods),
- weekdayRe = formatRe(locale_weekdays),
- weekdayLookup = formatLookup(locale_weekdays),
- shortWeekdayRe = formatRe(locale_shortWeekdays),
- shortWeekdayLookup = formatLookup(locale_shortWeekdays),
- monthRe = formatRe(locale_months),
- monthLookup = formatLookup(locale_months),
- shortMonthRe = formatRe(locale_shortMonths),
- shortMonthLookup = formatLookup(locale_shortMonths);
-
- var formats = {
- a: formatShortWeekday,
- A: formatWeekday,
- b: formatShortMonth,
- B: formatMonth,
- c: null,
- d: formatDayOfMonth,
- e: formatDayOfMonth,
- f: formatMicroseconds,
- H: formatHour24,
- I: formatHour12,
- j: formatDayOfYear,
- L: formatMilliseconds,
- m: formatMonthNumber,
- M: formatMinutes,
- p: formatPeriod,
- q: formatQuarter,
- Q: formatUnixTimestamp,
- s: formatUnixTimestampSeconds,
- S: formatSeconds,
- u: formatWeekdayNumberMonday,
- U: formatWeekNumberSunday,
- V: formatWeekNumberISO,
- w: formatWeekdayNumberSunday,
- W: formatWeekNumberMonday,
- x: null,
- X: null,
- y: formatYear,
- Y: formatFullYear,
- Z: formatZone,
- "%": formatLiteralPercent,
- };
-
- var utcFormats = {
- a: formatUTCShortWeekday,
- A: formatUTCWeekday,
- b: formatUTCShortMonth,
- B: formatUTCMonth,
- c: null,
- d: formatUTCDayOfMonth,
- e: formatUTCDayOfMonth,
- f: formatUTCMicroseconds,
- H: formatUTCHour24,
- I: formatUTCHour12,
- j: formatUTCDayOfYear,
- L: formatUTCMilliseconds,
- m: formatUTCMonthNumber,
- M: formatUTCMinutes,
- p: formatUTCPeriod,
- q: formatUTCQuarter,
- Q: formatUnixTimestamp,
- s: formatUnixTimestampSeconds,
- S: formatUTCSeconds,
- u: formatUTCWeekdayNumberMonday,
- U: formatUTCWeekNumberSunday,
- V: formatUTCWeekNumberISO,
- w: formatUTCWeekdayNumberSunday,
- W: formatUTCWeekNumberMonday,
- x: null,
- X: null,
- y: formatUTCYear,
- Y: formatUTCFullYear,
- Z: formatUTCZone,
- "%": formatLiteralPercent,
- };
-
- var parses = {
- a: parseShortWeekday,
- A: parseWeekday,
- b: parseShortMonth,
- B: parseMonth,
- c: parseLocaleDateTime,
- d: parseDayOfMonth,
- e: parseDayOfMonth,
- f: parseMicroseconds,
- H: parseHour24,
- I: parseHour24,
- j: parseDayOfYear,
- L: parseMilliseconds,
- m: parseMonthNumber,
- M: parseMinutes,
- p: parsePeriod,
- q: parseQuarter,
- Q: parseUnixTimestamp,
- s: parseUnixTimestampSeconds,
- S: parseSeconds,
- u: parseWeekdayNumberMonday,
- U: parseWeekNumberSunday,
- V: parseWeekNumberISO,
- w: parseWeekdayNumberSunday,
- W: parseWeekNumberMonday,
- x: parseLocaleDate,
- X: parseLocaleTime,
- y: parseYear,
- Y: parseFullYear,
- Z: parseZone,
- "%": parseLiteralPercent,
- };
-
- // These recursive directive definitions must be deferred.
- formats.x = newFormat(locale_date, formats);
- formats.X = newFormat(locale_time, formats);
- formats.c = newFormat(locale_dateTime, formats);
- utcFormats.x = newFormat(locale_date, utcFormats);
- utcFormats.X = newFormat(locale_time, utcFormats);
- utcFormats.c = newFormat(locale_dateTime, utcFormats);
-
- function newFormat(specifier, formats) {
- return function (date) {
- var string = [],
- i = -1,
- j = 0,
- n = specifier.length,
- c,
- pad,
- format;
-
- if (!(date instanceof Date)) date = new Date(+date);
-
- while (++i < n) {
- if (specifier.charCodeAt(i) === 37) {
- string.push(specifier.slice(j, i));
- if ((pad = pads[(c = specifier.charAt(++i))]) != null) c = specifier.charAt(++i);
- else pad = c === "e" ? " " : "0";
- if ((format = formats[c])) c = format(date, pad);
- string.push(c);
- j = i + 1;
- }
- }
-
- string.push(specifier.slice(j, i));
- return string.join("");
- };
- }
-
- function newParse(specifier, Z) {
- return function (string) {
- var d = newDate(1900, undefined, 1),
- i = parseSpecifier(d, specifier, (string += ""), 0),
- week,
- day$1;
- if (i != string.length) return null;
-
- // If a UNIX timestamp is specified, return it.
- if ("Q" in d) return new Date(d.Q);
- if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));
-
- // If this is utcParse, never use the local timezone.
- if (Z && !("Z" in d)) d.Z = 0;
-
- // The am-pm flag is 0 for AM, and 1 for PM.
- if ("p" in d) d.H = (d.H % 12) + d.p * 12;
-
- // If the month was not specified, inherit from the quarter.
- if (d.m === undefined) d.m = "q" in d ? d.q : 0;
-
- // Convert day-of-week and week-of-year to day-of-year.
- if ("V" in d) {
- if (d.V < 1 || d.V > 53) return null;
- if (!("w" in d)) d.w = 1;
- if ("Z" in d) {
- (week = utcDate(newDate(d.y, 0, 1))), (day$1 = week.getUTCDay());
- week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
- week = utcDay.offset(week, (d.V - 1) * 7);
- d.y = week.getUTCFullYear();
- d.m = week.getUTCMonth();
- d.d = week.getUTCDate() + ((d.w + 6) % 7);
- } else {
- (week = localDate(newDate(d.y, 0, 1))), (day$1 = week.getDay());
- week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);
- week = day.offset(week, (d.V - 1) * 7);
- d.y = week.getFullYear();
- d.m = week.getMonth();
- d.d = week.getDate() + ((d.w + 6) % 7);
- }
- } else if ("W" in d || "U" in d) {
- if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
- day$1 = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
- d.m = 0;
- d.d = "W" in d ? ((d.w + 6) % 7) + d.W * 7 - ((day$1 + 5) % 7) : d.w + d.U * 7 - ((day$1 + 6) % 7);
- }
-
- // If a time zone is specified, all fields are interpreted as UTC and then
- // offset according to the specified time zone.
- if ("Z" in d) {
- d.H += (d.Z / 100) | 0;
- d.M += d.Z % 100;
- return utcDate(d);
- }
-
- // Otherwise, all fields are in local time.
- return localDate(d);
- };
- }
-
- function parseSpecifier(d, specifier, string, j) {
- var i = 0,
- n = specifier.length,
- m = string.length,
- c,
- parse;
-
- while (i < n) {
- if (j >= m) return -1;
- c = specifier.charCodeAt(i++);
- if (c === 37) {
- c = specifier.charAt(i++);
- parse = parses[c in pads ? specifier.charAt(i++) : c];
- if (!parse || (j = parse(d, string, j)) < 0) return -1;
- } else if (c != string.charCodeAt(j++)) {
- return -1;
- }
- }
-
- return j;
- }
-
- function parsePeriod(d, string, i) {
- var n = periodRe.exec(string.slice(i));
- return n ? ((d.p = periodLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
- }
-
- function parseShortWeekday(d, string, i) {
- var n = shortWeekdayRe.exec(string.slice(i));
- return n ? ((d.w = shortWeekdayLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
- }
-
- function parseWeekday(d, string, i) {
- var n = weekdayRe.exec(string.slice(i));
- return n ? ((d.w = weekdayLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
- }
-
- function parseShortMonth(d, string, i) {
- var n = shortMonthRe.exec(string.slice(i));
- return n ? ((d.m = shortMonthLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
- }
-
- function parseMonth(d, string, i) {
- var n = monthRe.exec(string.slice(i));
- return n ? ((d.m = monthLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
- }
-
- function parseLocaleDateTime(d, string, i) {
- return parseSpecifier(d, locale_dateTime, string, i);
- }
-
- function parseLocaleDate(d, string, i) {
- return parseSpecifier(d, locale_date, string, i);
- }
-
- function parseLocaleTime(d, string, i) {
- return parseSpecifier(d, locale_time, string, i);
- }
-
- function formatShortWeekday(d) {
- return locale_shortWeekdays[d.getDay()];
- }
-
- function formatWeekday(d) {
- return locale_weekdays[d.getDay()];
- }
-
- function formatShortMonth(d) {
- return locale_shortMonths[d.getMonth()];
- }
-
- function formatMonth(d) {
- return locale_months[d.getMonth()];
- }
-
- function formatPeriod(d) {
- return locale_periods[+(d.getHours() >= 12)];
- }
-
- function formatQuarter(d) {
- return 1 + ~~(d.getMonth() / 3);
- }
-
- function formatUTCShortWeekday(d) {
- return locale_shortWeekdays[d.getUTCDay()];
- }
-
- function formatUTCWeekday(d) {
- return locale_weekdays[d.getUTCDay()];
- }
-
- function formatUTCShortMonth(d) {
- return locale_shortMonths[d.getUTCMonth()];
- }
-
- function formatUTCMonth(d) {
- return locale_months[d.getUTCMonth()];
- }
-
- function formatUTCPeriod(d) {
- return locale_periods[+(d.getUTCHours() >= 12)];
- }
-
- function formatUTCQuarter(d) {
- return 1 + ~~(d.getUTCMonth() / 3);
- }
-
- return {
- format: function (specifier) {
- var f = newFormat((specifier += ""), formats);
- f.toString = function () {
- return specifier;
- };
- return f;
- },
- parse: function (specifier) {
- var p = newParse((specifier += ""), false);
- p.toString = function () {
- return specifier;
- };
- return p;
- },
- utcFormat: function (specifier) {
- var f = newFormat((specifier += ""), utcFormats);
- f.toString = function () {
- return specifier;
- };
- return f;
- },
- utcParse: function (specifier) {
- var p = newParse((specifier += ""), true);
- p.toString = function () {
- return specifier;
- };
- return p;
- },
- };
- }
-
- var pads = { "-": "", _: " ", 0: "0" },
- numberRe = /^\s*\d+/, // note: ignores next directive
- percentRe = /^%/,
- requoteRe = /[\\^$*+?|[\]().{}]/g;
-
- function pad(value, fill, width) {
- var sign = value < 0 ? "-" : "",
- string = (sign ? -value : value) + "",
- length = string.length;
- return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
- }
-
- function requote(s) {
- return s.replace(requoteRe, "\\$&");
- }
-
- function formatRe(names) {
- return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
- }
-
- function formatLookup(names) {
- var map = {},
- i = -1,
- n = names.length;
- while (++i < n) map[names[i].toLowerCase()] = i;
- return map;
- }
-
- function parseWeekdayNumberSunday(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 1));
- return n ? ((d.w = +n[0]), i + n[0].length) : -1;
- }
-
- function parseWeekdayNumberMonday(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 1));
- return n ? ((d.u = +n[0]), i + n[0].length) : -1;
- }
-
- function parseWeekNumberSunday(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.U = +n[0]), i + n[0].length) : -1;
- }
-
- function parseWeekNumberISO(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.V = +n[0]), i + n[0].length) : -1;
- }
-
- function parseWeekNumberMonday(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.W = +n[0]), i + n[0].length) : -1;
- }
-
- function parseFullYear(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 4));
- return n ? ((d.y = +n[0]), i + n[0].length) : -1;
- }
-
- function parseYear(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000)), i + n[0].length) : -1;
- }
-
- function parseZone(d, string, i) {
- var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
- return n ? ((d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00"))), i + n[0].length) : -1;
- }
-
- function parseQuarter(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 1));
- return n ? ((d.q = n[0] * 3 - 3), i + n[0].length) : -1;
- }
-
- function parseMonthNumber(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.m = n[0] - 1), i + n[0].length) : -1;
- }
-
- function parseDayOfMonth(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.d = +n[0]), i + n[0].length) : -1;
- }
-
- function parseDayOfYear(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 3));
- return n ? ((d.m = 0), (d.d = +n[0]), i + n[0].length) : -1;
- }
-
- function parseHour24(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.H = +n[0]), i + n[0].length) : -1;
- }
-
- function parseMinutes(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.M = +n[0]), i + n[0].length) : -1;
- }
-
- function parseSeconds(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 2));
- return n ? ((d.S = +n[0]), i + n[0].length) : -1;
- }
-
- function parseMilliseconds(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 3));
- return n ? ((d.L = +n[0]), i + n[0].length) : -1;
- }
-
- function parseMicroseconds(d, string, i) {
- var n = numberRe.exec(string.slice(i, i + 6));
- return n ? ((d.L = Math.floor(n[0] / 1000)), i + n[0].length) : -1;
- }
-
- function parseLiteralPercent(d, string, i) {
- var n = percentRe.exec(string.slice(i, i + 1));
- return n ? i + n[0].length : -1;
- }
-
- function parseUnixTimestamp(d, string, i) {
- var n = numberRe.exec(string.slice(i));
- return n ? ((d.Q = +n[0]), i + n[0].length) : -1;
- }
-
- function parseUnixTimestampSeconds(d, string, i) {
- var n = numberRe.exec(string.slice(i));
- return n ? ((d.s = +n[0]), i + n[0].length) : -1;
- }
-
- function formatDayOfMonth(d, p) {
- return pad(d.getDate(), p, 2);
- }
-
- function formatHour24(d, p) {
- return pad(d.getHours(), p, 2);
- }
-
- function formatHour12(d, p) {
- return pad(d.getHours() % 12 || 12, p, 2);
- }
-
- function formatDayOfYear(d, p) {
- return pad(1 + day.count(year(d), d), p, 3);
- }
-
- function formatMilliseconds(d, p) {
- return pad(d.getMilliseconds(), p, 3);
- }
-
- function formatMicroseconds(d, p) {
- return formatMilliseconds(d, p) + "000";
- }
-
- function formatMonthNumber(d, p) {
- return pad(d.getMonth() + 1, p, 2);
- }
-
- function formatMinutes(d, p) {
- return pad(d.getMinutes(), p, 2);
- }
-
- function formatSeconds(d, p) {
- return pad(d.getSeconds(), p, 2);
- }
-
- function formatWeekdayNumberMonday(d) {
- var day = d.getDay();
- return day === 0 ? 7 : day;
- }
-
- function formatWeekNumberSunday(d, p) {
- return pad(sunday.count(year(d) - 1, d), p, 2);
- }
-
- function formatWeekNumberISO(d, p) {
- var day = d.getDay();
- d = day >= 4 || day === 0 ? thursday(d) : thursday.ceil(d);
- return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);
- }
-
- function formatWeekdayNumberSunday(d) {
- return d.getDay();
- }
-
- function formatWeekNumberMonday(d, p) {
- return pad(monday.count(year(d) - 1, d), p, 2);
- }
-
- function formatYear(d, p) {
- return pad(d.getFullYear() % 100, p, 2);
- }
-
- function formatFullYear(d, p) {
- return pad(d.getFullYear() % 10000, p, 4);
- }
-
- function formatZone(d) {
- var z = d.getTimezoneOffset();
- return (z > 0 ? "-" : ((z *= -1), "+")) + pad((z / 60) | 0, "0", 2) + pad(z % 60, "0", 2);
- }
-
- function formatUTCDayOfMonth(d, p) {
- return pad(d.getUTCDate(), p, 2);
- }
-
- function formatUTCHour24(d, p) {
- return pad(d.getUTCHours(), p, 2);
- }
-
- function formatUTCHour12(d, p) {
- return pad(d.getUTCHours() % 12 || 12, p, 2);
- }
-
- function formatUTCDayOfYear(d, p) {
- return pad(1 + utcDay.count(utcYear(d), d), p, 3);
- }
-
- function formatUTCMilliseconds(d, p) {
- return pad(d.getUTCMilliseconds(), p, 3);
- }
-
- function formatUTCMicroseconds(d, p) {
- return formatUTCMilliseconds(d, p) + "000";
- }
-
- function formatUTCMonthNumber(d, p) {
- return pad(d.getUTCMonth() + 1, p, 2);
- }
-
- function formatUTCMinutes(d, p) {
- return pad(d.getUTCMinutes(), p, 2);
- }
-
- function formatUTCSeconds(d, p) {
- return pad(d.getUTCSeconds(), p, 2);
- }
-
- function formatUTCWeekdayNumberMonday(d) {
- var dow = d.getUTCDay();
- return dow === 0 ? 7 : dow;
- }
-
- function formatUTCWeekNumberSunday(d, p) {
- return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);
- }
-
- function formatUTCWeekNumberISO(d, p) {
- var day = d.getUTCDay();
- d = day >= 4 || day === 0 ? utcThursday(d) : utcThursday.ceil(d);
- return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
- }
-
- function formatUTCWeekdayNumberSunday(d) {
- return d.getUTCDay();
- }
-
- function formatUTCWeekNumberMonday(d, p) {
- return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);
- }
-
- function formatUTCYear(d, p) {
- return pad(d.getUTCFullYear() % 100, p, 2);
- }
-
- function formatUTCFullYear(d, p) {
- return pad(d.getUTCFullYear() % 10000, p, 4);
- }
-
- function formatUTCZone() {
- return "+0000";
- }
-
- function formatLiteralPercent() {
- return "%";
- }
-
- function formatUnixTimestamp(d) {
- return +d;
- }
-
- function formatUnixTimestampSeconds(d) {
- return Math.floor(+d / 1000);
- }
-
- var locale$1;
- var timeFormat;
- var timeParse;
- var utcFormat;
- var utcParse;
-
- defaultLocale$1({
- dateTime: "%x, %X",
- date: "%-m/%-d/%Y",
- time: "%-I:%M:%S %p",
- periods: ["AM", "PM"],
- days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
- shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
- months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
- shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
- });
-
- function defaultLocale$1(definition) {
- locale$1 = formatLocale$1(definition);
- timeFormat = locale$1.format;
- timeParse = locale$1.parse;
- utcFormat = locale$1.utcFormat;
- utcParse = locale$1.utcParse;
- return locale$1;
- }
-
- var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
-
- function formatIsoNative(date) {
- return date.toISOString();
- }
-
- var formatIso = Date.prototype.toISOString ? formatIsoNative : utcFormat(isoSpecifier);
-
- function parseIsoNative(string) {
- var date = new Date(string);
- return isNaN(date) ? null : date;
- }
-
- var parseIso = +new Date("2000-01-01T00:00:00.000Z") ? parseIsoNative : utcParse(isoSpecifier);
-
- var noop = { value: function () {} };
-
- function dispatch() {
- for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
- if (!(t = arguments[i] + "") || t in _ || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
- _[t] = [];
- }
- return new Dispatch(_);
- }
-
- function Dispatch(_) {
- this._ = _;
- }
-
- function parseTypenames(typenames, types) {
- return typenames
- .trim()
- .split(/^|\s+/)
- .map(function (t) {
- var name = "",
- i = t.indexOf(".");
- if (i >= 0) (name = t.slice(i + 1)), (t = t.slice(0, i));
- if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
- return { type: t, name: name };
- });
- }
-
- Dispatch.prototype = dispatch.prototype = {
- constructor: Dispatch,
- on: function (typename, callback) {
- var _ = this._,
- T = parseTypenames(typename + "", _),
- t,
- i = -1,
- n = T.length;
-
- // If no callback was specified, return the callback of the given type and name.
- if (arguments.length < 2) {
- while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
- return;
- }
-
- // If a type was specified, set the callback for the given type and name.
- // Otherwise, if a null callback was specified, remove callbacks of the given name.
- if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
- while (++i < n) {
- if ((t = (typename = T[i]).type)) _[t] = set(_[t], typename.name, callback);
- else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
- }
-
- return this;
- },
- copy: function () {
- var copy = {},
- _ = this._;
- for (var t in _) copy[t] = _[t].slice();
- return new Dispatch(copy);
- },
- call: function (type, that) {
- if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
- if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
- for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
- },
- apply: function (type, that, args) {
- if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
- for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
- },
- };
-
- function get(type, name) {
- for (var i = 0, n = type.length, c; i < n; ++i) {
- if ((c = type[i]).name === name) {
- return c.value;
- }
- }
- }
-
- function set(type, name, callback) {
- for (var i = 0, n = type.length; i < n; ++i) {
- if (type[i].name === name) {
- (type[i] = noop), (type = type.slice(0, i).concat(type.slice(i + 1)));
- break;
- }
- }
- if (callback != null) type.push({ name: name, value: callback });
- return type;
- }
-
- var xhtml = "http://www.w3.org/1999/xhtml";
-
- var namespaces = {
- svg: "http://www.w3.org/2000/svg",
- xhtml: xhtml,
- xlink: "http://www.w3.org/1999/xlink",
- xml: "http://www.w3.org/XML/1998/namespace",
- xmlns: "http://www.w3.org/2000/xmlns/",
- };
-
- function namespace(name) {
- var prefix = (name += ""),
- i = prefix.indexOf(":");
- if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
- return namespaces.hasOwnProperty(prefix) ? { space: namespaces[prefix], local: name } : name;
- }
-
- function creatorInherit(name) {
- return function () {
- var document = this.ownerDocument,
- uri = this.namespaceURI;
- return uri === xhtml && document.documentElement.namespaceURI === xhtml ? document.createElement(name) : document.createElementNS(uri, name);
- };
- }
-
- function creatorFixed(fullname) {
- return function () {
- return this.ownerDocument.createElementNS(fullname.space, fullname.local);
- };
- }
-
- function creator(name) {
- var fullname = namespace(name);
- return (fullname.local ? creatorFixed : creatorInherit)(fullname);
- }
-
- function none() {}
-
- function selector(selector) {
- return selector == null
- ? none
- : function () {
- return this.querySelector(selector);
- };
- }
-
- function selection_select(select) {
- if (typeof select !== "function") select = selector(select);
-
- for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
- for (var group = groups[j], n = group.length, subgroup = (subgroups[j] = new Array(n)), node, subnode, i = 0; i < n; ++i) {
- if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
- if ("__data__" in node) subnode.__data__ = node.__data__;
- subgroup[i] = subnode;
- }
- }
- }
-
- return new Selection(subgroups, this._parents);
- }
-
- function empty() {
- return [];
- }
-
- function selectorAll(selector) {
- return selector == null
- ? empty
- : function () {
- return this.querySelectorAll(selector);
- };
- }
-
- function selection_selectAll(select) {
- if (typeof select !== "function") select = selectorAll(select);
-
- for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
- for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
- if ((node = group[i])) {
- subgroups.push(select.call(node, node.__data__, i, group));
- parents.push(node);
- }
- }
- }
-
- return new Selection(subgroups, parents);
- }
-
- function matcher(selector) {
- return function () {
- return this.matches(selector);
- };
- }
-
- function selection_filter(match) {
- if (typeof match !== "function") match = matcher(match);
-
- for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
- for (var group = groups[j], n = group.length, subgroup = (subgroups[j] = []), node, i = 0; i < n; ++i) {
- if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
- subgroup.push(node);
- }
- }
- }
-
- return new Selection(subgroups, this._parents);
- }
-
- function sparse(update) {
- return new Array(update.length);
- }
-
- function selection_enter() {
- return new Selection(this._enter || this._groups.map(sparse), this._parents);
- }
-
- function EnterNode(parent, datum) {
- this.ownerDocument = parent.ownerDocument;
- this.namespaceURI = parent.namespaceURI;
- this._next = null;
- this._parent = parent;
- this.__data__ = datum;
- }
-
- EnterNode.prototype = {
- constructor: EnterNode,
- appendChild: function (child) {
- return this._parent.insertBefore(child, this._next);
- },
- insertBefore: function (child, next) {
- return this._parent.insertBefore(child, next);
- },
- querySelector: function (selector) {
- return this._parent.querySelector(selector);
- },
- querySelectorAll: function (selector) {
- return this._parent.querySelectorAll(selector);
- },
- };
-
- function constant$2(x) {
- return function () {
- return x;
- };
- }
-
- var keyPrefix = "$"; // Protect against keys like “__proto__”.
-
- function bindIndex(parent, group, enter, update, exit, data) {
- var i = 0,
- node,
- groupLength = group.length,
- dataLength = data.length;
-
- // Put any non-null nodes that fit into update.
- // Put any null nodes into enter.
- // Put any remaining data into enter.
- for (; i < dataLength; ++i) {
- if ((node = group[i])) {
- node.__data__ = data[i];
- update[i] = node;
- } else {
- enter[i] = new EnterNode(parent, data[i]);
- }
- }
-
- // Put any non-null nodes that don’t fit into exit.
- for (; i < groupLength; ++i) {
- if ((node = group[i])) {
- exit[i] = node;
- }
- }
- }
-
- function bindKey(parent, group, enter, update, exit, data, key) {
- var i,
- node,
- nodeByKeyValue = {},
- groupLength = group.length,
- dataLength = data.length,
- keyValues = new Array(groupLength),
- keyValue;
-
- // Compute the key for each node.
- // If multiple nodes have the same key, the duplicates are added to exit.
- for (i = 0; i < groupLength; ++i) {
- if ((node = group[i])) {
- keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
- if (keyValue in nodeByKeyValue) {
- exit[i] = node;
- } else {
- nodeByKeyValue[keyValue] = node;
- }
- }
- }
-
- // Compute the key for each datum.
- // If there a node associated with this key, join and add it to update.
- // If there is not (or the key is a duplicate), add it to enter.
- for (i = 0; i < dataLength; ++i) {
- keyValue = keyPrefix + key.call(parent, data[i], i, data);
- if ((node = nodeByKeyValue[keyValue])) {
- update[i] = node;
- node.__data__ = data[i];
- nodeByKeyValue[keyValue] = null;
- } else {
- enter[i] = new EnterNode(parent, data[i]);
- }
- }
-
- // Add any remaining nodes that were not bound to data to exit.
- for (i = 0; i < groupLength; ++i) {
- if ((node = group[i]) && nodeByKeyValue[keyValues[i]] === node) {
- exit[i] = node;
- }
- }
- }
-
- function selection_data(value, key) {
- if (!value) {
- (data = new Array(this.size())), (j = -1);
- this.each(function (d) {
- data[++j] = d;
- });
- return data;
- }
-
- var bind = key ? bindKey : bindIndex,
- parents = this._parents,
- groups = this._groups;
-
- if (typeof value !== "function") value = constant$2(value);
-
- for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
- var parent = parents[j],
- group = groups[j],
- groupLength = group.length,
- data = value.call(parent, parent && parent.__data__, j, parents),
- dataLength = data.length,
- enterGroup = (enter[j] = new Array(dataLength)),
- updateGroup = (update[j] = new Array(dataLength)),
- exitGroup = (exit[j] = new Array(groupLength));
-
- bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
-
- // Now connect the enter nodes to their following update node, such that
- // appendChild can insert the materialized enter node before this node,
- // rather than at the end of the parent node.
- for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
- if ((previous = enterGroup[i0])) {
- if (i0 >= i1) i1 = i0 + 1;
- while (!(next = updateGroup[i1]) && ++i1 < dataLength);
- previous._next = next || null;
- }
- }
- }
-
- update = new Selection(update, parents);
- update._enter = enter;
- update._exit = exit;
- return update;
- }
-
- function selection_exit() {
- return new Selection(this._exit || this._groups.map(sparse), this._parents);
- }
-
- function selection_join(onenter, onupdate, onexit) {
- var enter = this.enter(),
- update = this,
- exit = this.exit();
- enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + "");
- if (onupdate != null) update = onupdate(update);
- if (onexit == null) exit.remove();
- else onexit(exit);
- return enter && update ? enter.merge(update).order() : update;
- }
-
- function selection_merge(selection) {
- for (
- var groups0 = this._groups,
- groups1 = selection._groups,
- m0 = groups0.length,
- m1 = groups1.length,
- m = Math.min(m0, m1),
- merges = new Array(m0),
- j = 0;
- j < m;
- ++j
- ) {
- for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = (merges[j] = new Array(n)), node, i = 0; i < n; ++i) {
- if ((node = group0[i] || group1[i])) {
- merge[i] = node;
- }
- }
- }
-
- for (; j < m0; ++j) {
- merges[j] = groups0[j];
- }
-
- return new Selection(merges, this._parents);
- }
-
- function selection_order() {
- for (var groups = this._groups, j = -1, m = groups.length; ++j < m; ) {
- for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {
- if ((node = group[i])) {
- if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);
- next = node;
- }
- }
- }
-
- return this;
- }
-
- function selection_sort(compare) {
- if (!compare) compare = ascending$1;
-
- function compareNode(a, b) {
- return a && b ? compare(a.__data__, b.__data__) : !a - !b;
- }
-
- for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
- for (var group = groups[j], n = group.length, sortgroup = (sortgroups[j] = new Array(n)), node, i = 0; i < n; ++i) {
- if ((node = group[i])) {
- sortgroup[i] = node;
- }
- }
- sortgroup.sort(compareNode);
- }
-
- return new Selection(sortgroups, this._parents).order();
- }
-
- function ascending$1(a, b) {
- return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
- }
-
- function selection_call() {
- var callback = arguments[0];
- arguments[0] = this;
- callback.apply(null, arguments);
- return this;
- }
-
- function selection_nodes() {
- var nodes = new Array(this.size()),
- i = -1;
- this.each(function () {
- nodes[++i] = this;
- });
- return nodes;
- }
-
- function selection_node() {
- for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
- for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
- var node = group[i];
- if (node) return node;
- }
- }
-
- return null;
- }
-
- function selection_size() {
- var size = 0;
- this.each(function () {
- ++size;
- });
- return size;
- }
-
- function selection_empty() {
- return !this.node();
- }
-
- function selection_each(callback) {
- for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
- for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
- if ((node = group[i])) callback.call(node, node.__data__, i, group);
- }
- }
-
- return this;
- }
-
- function attrRemove(name) {
- return function () {
- this.removeAttribute(name);
- };
- }
-
- function attrRemoveNS(fullname) {
- return function () {
- this.removeAttributeNS(fullname.space, fullname.local);
- };
- }
-
- function attrConstant(name, value) {
- return function () {
- this.setAttribute(name, value);
- };
- }
-
- function attrConstantNS(fullname, value) {
- return function () {
- this.setAttributeNS(fullname.space, fullname.local, value);
- };
- }
-
- function attrFunction(name, value) {
- return function () {
- var v = value.apply(this, arguments);
- if (v == null) this.removeAttribute(name);
- else this.setAttribute(name, v);
- };
- }
-
- function attrFunctionNS(fullname, value) {
- return function () {
- var v = value.apply(this, arguments);
- if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
- else this.setAttributeNS(fullname.space, fullname.local, v);
- };
- }
-
- function selection_attr(name, value) {
- var fullname = namespace(name);
-
- if (arguments.length < 2) {
- var node = this.node();
- return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname);
- }
-
- return this.each(
- (value == null
- ? fullname.local
- ? attrRemoveNS
- : attrRemove
- : typeof value === "function"
- ? fullname.local
- ? attrFunctionNS
- : attrFunction
- : fullname.local
- ? attrConstantNS
- : attrConstant)(fullname, value)
- );
- }
-
- function defaultView(node) {
- return (
- (node.ownerDocument && node.ownerDocument.defaultView) || // node is a Node
- (node.document && node) || // node is a Window
- node.defaultView
- ); // node is a Document
- }
-
- function styleRemove(name) {
- return function () {
- this.style.removeProperty(name);
- };
- }
-
- function styleConstant(name, value, priority) {
- return function () {
- this.style.setProperty(name, value, priority);
- };
- }
-
- function styleFunction(name, value, priority) {
- return function () {
- var v = value.apply(this, arguments);
- if (v == null) this.style.removeProperty(name);
- else this.style.setProperty(name, v, priority);
- };
- }
-
- function selection_style(name, value, priority) {
- return arguments.length > 1
- ? this.each(
- (value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)
- )
- : styleValue(this.node(), name);
- }
-
- function styleValue(node, name) {
- return node.style.getPropertyValue(name) || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
- }
-
- function propertyRemove(name) {
- return function () {
- delete this[name];
- };
- }
-
- function propertyConstant(name, value) {
- return function () {
- this[name] = value;
- };
- }
-
- function propertyFunction(name, value) {
- return function () {
- var v = value.apply(this, arguments);
- if (v == null) delete this[name];
- else this[name] = v;
- };
- }
-
- function selection_property(name, value) {
- return arguments.length > 1
- ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value))
- : this.node()[name];
- }
-
- function classArray(string) {
- return string.trim().split(/^|\s+/);
- }
-
- function classList(node) {
- return node.classList || new ClassList(node);
- }
-
- function ClassList(node) {
- this._node = node;
- this._names = classArray(node.getAttribute("class") || "");
- }
-
- ClassList.prototype = {
- add: function (name) {
- var i = this._names.indexOf(name);
- if (i < 0) {
- this._names.push(name);
- this._node.setAttribute("class", this._names.join(" "));
- }
- },
- remove: function (name) {
- var i = this._names.indexOf(name);
- if (i >= 0) {
- this._names.splice(i, 1);
- this._node.setAttribute("class", this._names.join(" "));
- }
- },
- contains: function (name) {
- return this._names.indexOf(name) >= 0;
- },
- };
-
- function classedAdd(node, names) {
- var list = classList(node),
- i = -1,
- n = names.length;
- while (++i < n) list.add(names[i]);
- }
-
- function classedRemove(node, names) {
- var list = classList(node),
- i = -1,
- n = names.length;
- while (++i < n) list.remove(names[i]);
- }
-
- function classedTrue(names) {
- return function () {
- classedAdd(this, names);
- };
- }
-
- function classedFalse(names) {
- return function () {
- classedRemove(this, names);
- };
- }
-
- function classedFunction(names, value) {
- return function () {
- (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
- };
- }
-
- function selection_classed(name, value) {
- var names = classArray(name + "");
-
- if (arguments.length < 2) {
- var list = classList(this.node()),
- i = -1,
- n = names.length;
- while (++i < n) if (!list.contains(names[i])) return false;
- return true;
- }
-
- return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value));
- }
-
- function textRemove() {
- this.textContent = "";
- }
-
- function textConstant(value) {
- return function () {
- this.textContent = value;
- };
- }
-
- function textFunction(value) {
- return function () {
- var v = value.apply(this, arguments);
- this.textContent = v == null ? "" : v;
- };
- }
-
- function selection_text(value) {
- return arguments.length
- ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value))
- : this.node().textContent;
- }
-
- function htmlRemove() {
- this.innerHTML = "";
- }
-
- function htmlConstant(value) {
- return function () {
- this.innerHTML = value;
- };
- }
-
- function htmlFunction(value) {
- return function () {
- var v = value.apply(this, arguments);
- this.innerHTML = v == null ? "" : v;
- };
- }
-
- function selection_html(value) {
- return arguments.length
- ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value))
- : this.node().innerHTML;
- }
-
- function raise() {
- if (this.nextSibling) this.parentNode.appendChild(this);
- }
-
- function selection_raise() {
- return this.each(raise);
- }
-
- function lower() {
- if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
- }
-
- function selection_lower() {
- return this.each(lower);
- }
-
- function selection_append(name) {
- var create = typeof name === "function" ? name : creator(name);
- return this.select(function () {
- return this.appendChild(create.apply(this, arguments));
- });
- }
-
- function constantNull() {
- return null;
- }
-
- function selection_insert(name, before) {
- var create = typeof name === "function" ? name : creator(name),
- select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
- return this.select(function () {
- return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
- });
- }
-
- function remove() {
- var parent = this.parentNode;
- if (parent) parent.removeChild(this);
- }
-
- function selection_remove() {
- return this.each(remove);
- }
-
- function selection_cloneShallow() {
- var clone = this.cloneNode(false),
- parent = this.parentNode;
- return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
- }
-
- function selection_cloneDeep() {
- var clone = this.cloneNode(true),
- parent = this.parentNode;
- return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
- }
-
- function selection_clone(deep) {
- return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
- }
-
- function selection_datum(value) {
- return arguments.length ? this.property("__data__", value) : this.node().__data__;
- }
-
- var filterEvents = {};
-
- var event = null;
-
- if (typeof document !== "undefined") {
- var element = document.documentElement;
- if (!("onmouseenter" in element)) {
- filterEvents = { mouseenter: "mouseover", mouseleave: "mouseout" };
- }
- }
-
- function filterContextListener(listener, index, group) {
- listener = contextListener(listener, index, group);
- return function (event) {
- var related = event.relatedTarget;
- if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
- listener.call(this, event);
- }
- };
- }
-
- function contextListener(listener, index, group) {
- return function (event1) {
- var event0 = event; // Events can be reentrant (e.g., focus).
- event = event1;
- try {
- listener.call(this, this.__data__, index, group);
- } finally {
- event = event0;
- }
- };
- }
-
- function parseTypenames$1(typenames) {
- return typenames
- .trim()
- .split(/^|\s+/)
- .map(function (t) {
- var name = "",
- i = t.indexOf(".");
- if (i >= 0) (name = t.slice(i + 1)), (t = t.slice(0, i));
- return { type: t, name: name };
- });
- }
-
- function onRemove(typename) {
- return function () {
- var on = this.__on;
- if (!on) return;
- for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
- if (((o = on[j]), (!typename.type || o.type === typename.type) && o.name === typename.name)) {
- this.removeEventListener(o.type, o.listener, o.capture);
- } else {
- on[++i] = o;
- }
- }
- if (++i) on.length = i;
- else delete this.__on;
- };
- }
-
- function onAdd(typename, value, capture) {
- var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
- return function (d, i, group) {
- var on = this.__on,
- o,
- listener = wrap(value, i, group);
- if (on)
- for (var j = 0, m = on.length; j < m; ++j) {
- if ((o = on[j]).type === typename.type && o.name === typename.name) {
- this.removeEventListener(o.type, o.listener, o.capture);
- this.addEventListener(o.type, (o.listener = listener), (o.capture = capture));
- o.value = value;
- return;
- }
- }
- this.addEventListener(typename.type, listener, capture);
- o = {
- type: typename.type,
- name: typename.name,
- value: value,
- listener: listener,
- capture: capture,
- };
- if (!on) this.__on = [o];
- else on.push(o);
- };
- }
-
- function selection_on(typename, value, capture) {
- var typenames = parseTypenames$1(typename + ""),
- i,
- n = typenames.length,
- t;
-
- if (arguments.length < 2) {
- var on = this.node().__on;
- if (on)
- for (var j = 0, m = on.length, o; j < m; ++j) {
- for (i = 0, o = on[j]; i < n; ++i) {
- if ((t = typenames[i]).type === o.type && t.name === o.name) {
- return o.value;
- }
- }
- }
- return;
- }
-
- on = value ? onAdd : onRemove;
- if (capture == null) capture = false;
- for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
- return this;
- }
-
- function customEvent(event1, listener, that, args) {
- var event0 = event;
- event1.sourceEvent = event;
- event = event1;
- try {
- return listener.apply(that, args);
- } finally {
- event = event0;
- }
- }
-
- function dispatchEvent(node, type, params) {
- var window = defaultView(node),
- event = window.CustomEvent;
-
- if (typeof event === "function") {
- event = new event(type, params);
- } else {
- event = window.document.createEvent("Event");
- if (params) event.initEvent(type, params.bubbles, params.cancelable), (event.detail = params.detail);
- else event.initEvent(type, false, false);
- }
-
- node.dispatchEvent(event);
- }
-
- function dispatchConstant(type, params) {
- return function () {
- return dispatchEvent(this, type, params);
- };
- }
-
- function dispatchFunction(type, params) {
- return function () {
- return dispatchEvent(this, type, params.apply(this, arguments));
- };
- }
-
- function selection_dispatch(type, params) {
- return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type, params));
- }
-
- var root = [null];
-
- function Selection(groups, parents) {
- this._groups = groups;
- this._parents = parents;
- }
-
- function selection() {
- return new Selection([[document.documentElement]], root);
- }
-
- Selection.prototype = selection.prototype = {
- constructor: Selection,
- select: selection_select,
- selectAll: selection_selectAll,
- filter: selection_filter,
- data: selection_data,
- enter: selection_enter,
- exit: selection_exit,
- join: selection_join,
- merge: selection_merge,
- order: selection_order,
- sort: selection_sort,
- call: selection_call,
- nodes: selection_nodes,
- node: selection_node,
- size: selection_size,
- empty: selection_empty,
- each: selection_each,
- attr: selection_attr,
- style: selection_style,
- property: selection_property,
- classed: selection_classed,
- text: selection_text,
- html: selection_html,
- raise: selection_raise,
- lower: selection_lower,
- append: selection_append,
- insert: selection_insert,
- remove: selection_remove,
- clone: selection_clone,
- datum: selection_datum,
- on: selection_on,
- dispatch: selection_dispatch,
- };
-
- function select(selector) {
- return typeof selector === "string"
- ? new Selection([[document.querySelector(selector)]], [document.documentElement])
- : new Selection([[selector]], root);
- }
-
- function sourceEvent() {
- var current = event,
- source;
- while ((source = current.sourceEvent)) current = source;
- return current;
- }
-
- function point(node, event) {
- var svg = node.ownerSVGElement || node;
-
- if (svg.createSVGPoint) {
- var point = svg.createSVGPoint();
- (point.x = event.clientX), (point.y = event.clientY);
- point = point.matrixTransform(node.getScreenCTM().inverse());
- return [point.x, point.y];
- }
-
- var rect = node.getBoundingClientRect();
- return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
- }
-
- function mouse(node) {
- var event = sourceEvent();
- if (event.changedTouches) event = event.changedTouches[0];
- return point(node, event);
- }
-
- function touch(node, touches, identifier) {
- if (arguments.length < 3) (identifier = touches), (touches = sourceEvent().changedTouches);
-
- for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
- if ((touch = touches[i]).identifier === identifier) {
- return point(node, touch);
- }
- }
-
- return null;
- }
-
- function nopropagation() {
- event.stopImmediatePropagation();
- }
-
- function noevent() {
- event.preventDefault();
- event.stopImmediatePropagation();
- }
-
- function nodrag(view) {
- var root = view.document.documentElement,
- selection = select(view).on("dragstart.drag", noevent, true);
- if ("onselectstart" in root) {
- selection.on("selectstart.drag", noevent, true);
- } else {
- root.__noselect = root.style.MozUserSelect;
- root.style.MozUserSelect = "none";
- }
- }
-
- function yesdrag(view, noclick) {
- var root = view.document.documentElement,
- selection = select(view).on("dragstart.drag", null);
- if (noclick) {
- selection.on("click.drag", noevent, true);
- setTimeout(function () {
- selection.on("click.drag", null);
- }, 0);
- }
- if ("onselectstart" in root) {
- selection.on("selectstart.drag", null);
- } else {
- root.style.MozUserSelect = root.__noselect;
- delete root.__noselect;
- }
- }
-
- function constant$3(x) {
- return function () {
- return x;
- };
- }
-
- function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
- this.target = target;
- this.type = type;
- this.subject = subject;
- this.identifier = id;
- this.active = active;
- this.x = x;
- this.y = y;
- this.dx = dx;
- this.dy = dy;
- this._ = dispatch;
- }
-
- DragEvent.prototype.on = function () {
- var value = this._.on.apply(this._, arguments);
- return value === this._ ? this : value;
- };
-
- // Ignore right-click, since that should open the context menu.
- function defaultFilter() {
- return !event.ctrlKey && !event.button;
- }
-
- function defaultContainer() {
- return this.parentNode;
- }
-
- function defaultSubject(d) {
- return d == null ? { x: event.x, y: event.y } : d;
- }
-
- function defaultTouchable() {
- return navigator.maxTouchPoints || "ontouchstart" in this;
- }
-
- function drag() {
- var filter = defaultFilter,
- container = defaultContainer,
- subject = defaultSubject,
- touchable = defaultTouchable,
- gestures = {},
- listeners = dispatch("start", "drag", "end"),
- active = 0,
- mousedownx,
- mousedowny,
- mousemoving,
- touchending,
- clickDistance2 = 0;
-
- function drag(selection) {
- selection
- .on("mousedown.drag", mousedowned)
- .filter(touchable)
- .on("touchstart.drag", touchstarted)
- .on("touchmove.drag", touchmoved)
- .on("touchend.drag touchcancel.drag", touchended)
- .style("touch-action", "none")
- .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
- }
-
- function mousedowned() {
- if (touchending || !filter.apply(this, arguments)) return;
- var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
- if (!gesture) return;
- select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
- nodrag(event.view);
- nopropagation();
- mousemoving = false;
- mousedownx = event.clientX;
- mousedowny = event.clientY;
- gesture("start");
- }
-
- function mousemoved() {
- noevent();
- if (!mousemoving) {
- var dx = event.clientX - mousedownx,
- dy = event.clientY - mousedowny;
- mousemoving = dx * dx + dy * dy > clickDistance2;
- }
- gestures.mouse("drag");
- }
-
- function mouseupped() {
- select(event.view).on("mousemove.drag mouseup.drag", null);
- yesdrag(event.view, mousemoving);
- noevent();
- gestures.mouse("end");
- }
-
- function touchstarted() {
- if (!filter.apply(this, arguments)) return;
- var touches = event.changedTouches,
- c = container.apply(this, arguments),
- n = touches.length,
- i,
- gesture;
-
- for (i = 0; i < n; ++i) {
- if ((gesture = beforestart(touches[i].identifier, c, touch, this, arguments))) {
- nopropagation();
- gesture("start");
- }
- }
- }
-
- function touchmoved() {
- var touches = event.changedTouches,
- n = touches.length,
- i,
- gesture;
-
- for (i = 0; i < n; ++i) {
- if ((gesture = gestures[touches[i].identifier])) {
- noevent();
- gesture("drag");
- }
- }
- }
-
- function touchended() {
- var touches = event.changedTouches,
- n = touches.length,
- i,
- gesture;
-
- if (touchending) clearTimeout(touchending);
- touchending = setTimeout(function () {
- touchending = null;
- }, 500); // Ghost clicks are delayed!
- for (i = 0; i < n; ++i) {
- if ((gesture = gestures[touches[i].identifier])) {
- nopropagation();
- gesture("end");
- }
- }
- }
-
- function beforestart(id, container, point, that, args) {
- var p = point(container, id),
- s,
- dx,
- dy,
- sublisteners = listeners.copy();
-
- if (
- !customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function () {
- if ((event.subject = s = subject.apply(that, args)) == null) return false;
- dx = s.x - p[0] || 0;
- dy = s.y - p[1] || 0;
- return true;
- })
- )
- return;
-
- return function gesture(type) {
- var p0 = p,
- n;
- switch (type) {
- case "start":
- (gestures[id] = gesture), (n = active++);
- break;
- case "end":
- delete gestures[id], --active; // nobreak
- case "drag":
- (p = point(container, id)), (n = active);
- break;
- }
- customEvent(
- new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners),
- sublisteners.apply,
- sublisteners,
- [type, that, args]
- );
- };
- }
-
- drag.filter = function (_) {
- return arguments.length ? ((filter = typeof _ === "function" ? _ : constant$3(!!_)), drag) : filter;
- };
-
- drag.container = function (_) {
- return arguments.length ? ((container = typeof _ === "function" ? _ : constant$3(_)), drag) : container;
- };
-
- drag.subject = function (_) {
- return arguments.length ? ((subject = typeof _ === "function" ? _ : constant$3(_)), drag) : subject;
- };
-
- drag.touchable = function (_) {
- return arguments.length ? ((touchable = typeof _ === "function" ? _ : constant$3(!!_)), drag) : touchable;
- };
-
- drag.on = function () {
- var value = listeners.on.apply(listeners, arguments);
- return value === listeners ? drag : value;
- };
-
- drag.clickDistance = function (_) {
- return arguments.length ? ((clickDistance2 = (_ = +_) * _), drag) : Math.sqrt(clickDistance2);
- };
-
- return drag;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const T$a = Template(
- "d-slider",
- `
-
-
-
-`
- );
-
- // ARIA
- // If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.
- // If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.
-
- const keyCodes = {
- left: 37,
- up: 38,
- right: 39,
- down: 40,
- pageUp: 33,
- pageDown: 34,
- end: 35,
- home: 36,
- };
-
- class Slider extends T$a(HTMLElement) {
- connectedCallback() {
- this.connected = true;
- this.setAttribute("role", "slider");
- // Makes the element tab-able.
- if (!this.hasAttribute("tabindex")) {
- this.setAttribute("tabindex", 0);
- }
-
- // Keeps track of keyboard vs. mouse interactions for focus rings
- this.mouseEvent = false;
-
- // Handles to shadow DOM elements
- this.knob = this.root.querySelector(".knob-container");
- this.background = this.root.querySelector(".background");
- this.trackFill = this.root.querySelector(".track-fill");
- this.track = this.root.querySelector(".track");
-
- // Default values for attributes
- this.min = this.min ? this.min : 0;
- this.max = this.max ? this.max : 100;
- this.scale = linear$1().domain([this.min, this.max]).range([0, 1]).clamp(true);
-
- this.origin = this.origin !== undefined ? this.origin : this.min;
- this.step = this.step ? this.step : 1;
- this.update(this.value ? this.value : 0);
-
- this.ticks = this.ticks ? this.ticks : false;
- this.renderTicks();
-
- this.drag = drag()
- .container(this.background)
- .on("start", () => {
- this.mouseEvent = true;
- this.background.classList.add("mousedown");
- this.changeValue = this.value;
- this.dragUpdate();
- })
- .on("drag", () => {
- this.dragUpdate();
- })
- .on("end", () => {
- this.mouseEvent = false;
- this.background.classList.remove("mousedown");
- this.dragUpdate();
- if (this.changeValue !== this.value) this.dispatchChange();
- this.changeValue = this.value;
- });
- this.drag(select(this.background));
-
- this.addEventListener("focusin", () => {
- if (!this.mouseEvent) {
- this.background.classList.add("focus");
- }
- });
- this.addEventListener("focusout", () => {
- this.background.classList.remove("focus");
- });
- this.addEventListener("keydown", this.onKeyDown);
- }
-
- static get observedAttributes() {
- return ["min", "max", "value", "step", "ticks", "origin", "tickValues", "tickLabels"];
- }
-
- attributeChangedCallback(attr, oldValue, newValue) {
- if (isNaN(newValue) || newValue === undefined || newValue === null) return;
- if (attr == "min") {
- this.min = +newValue;
- this.setAttribute("aria-valuemin", this.min);
- }
- if (attr == "max") {
- this.max = +newValue;
- this.setAttribute("aria-valuemax", this.max);
- }
- if (attr == "value") {
- this.update(+newValue);
- }
- if (attr == "origin") {
- this.origin = +newValue;
- // this.update(this.value);
- }
- if (attr == "step") {
- if (newValue > 0) {
- this.step = +newValue;
- }
- }
- if (attr == "ticks") {
- this.ticks = newValue === "" ? true : newValue;
- }
- }
-
- onKeyDown(event) {
- this.changeValue = this.value;
- let stopPropagation = false;
- switch (event.keyCode) {
- case keyCodes.left:
- case keyCodes.down:
- this.update(this.value - this.step);
- stopPropagation = true;
- break;
- case keyCodes.right:
- case keyCodes.up:
- this.update(this.value + this.step);
- stopPropagation = true;
- break;
- case keyCodes.pageUp:
- this.update(this.value + this.step * 10);
- stopPropagation = true;
- break;
-
- case keyCodes.pageDown:
- this.update(this.value + this.step * 10);
- stopPropagation = true;
- break;
- case keyCodes.home:
- this.update(this.min);
- stopPropagation = true;
- break;
- case keyCodes.end:
- this.update(this.max);
- stopPropagation = true;
- break;
- }
- if (stopPropagation) {
- this.background.classList.add("focus");
- event.preventDefault();
- event.stopPropagation();
- if (this.changeValue !== this.value) this.dispatchChange();
- }
- }
-
- validateValueRange(min, max, value) {
- return Math.max(Math.min(max, value), min);
- }
-
- quantizeValue(value, step) {
- return Math.round(value / step) * step;
- }
-
- dragUpdate() {
- const bbox = this.background.getBoundingClientRect();
- const x = event.x;
- const width = bbox.width;
- this.update(this.scale.invert(x / width));
- }
-
- update(value) {
- let v = value;
- if (this.step !== "any") {
- v = this.quantizeValue(value, this.step);
- }
- v = this.validateValueRange(this.min, this.max, v);
- if (this.connected) {
- this.knob.style.left = this.scale(v) * 100 + "%";
- this.trackFill.style.width = this.scale(this.min + Math.abs(v - this.origin)) * 100 + "%";
- this.trackFill.style.left = this.scale(Math.min(v, this.origin)) * 100 + "%";
- }
- if (this.value !== v) {
- this.value = v;
- this.setAttribute("aria-valuenow", this.value);
- this.dispatchInput();
- }
- }
-
- // Dispatches only on a committed change (basically only on mouseup).
- dispatchChange() {
- const e = new Event("change");
- this.dispatchEvent(e, {});
- }
-
- // Dispatches on each value change.
- dispatchInput() {
- const e = new Event("input");
- this.dispatchEvent(e, {});
- }
-
- renderTicks() {
- const ticksContainer = this.root.querySelector(".ticks");
- if (this.ticks !== false) {
- let tickData = [];
- if (this.ticks > 0) {
- tickData = this.scale.ticks(this.ticks);
- } else if (this.step === "any") {
- tickData = this.scale.ticks();
- } else {
- tickData = range(this.min, this.max + 1e-6, this.step);
- }
- tickData.forEach((d) => {
- const tick = document.createElement("div");
- tick.classList.add("tick");
- tick.style.left = this.scale(d) * 100 + "%";
- ticksContainer.appendChild(tick);
- });
- } else {
- ticksContainer.style.display = "none";
- }
- }
- }
-
- var logo =
- '\n \n \n';
-
- const headerTemplate = `
-
-
-`;
-
- // Copyright 2018 The Distill Template Authors
-
- const T$b = Template("distill-header", headerTemplate, false);
-
- class DistillHeader extends T$b(HTMLElement) {}
-
- // Copyright 2018 The Distill Template Authors
-
- const styles$2 = `
-
-`;
-
- function appendixTemplate(frontMatter) {
- let html = styles$2;
-
- if (typeof frontMatter.githubUrl !== "undefined") {
- html += `
- Updates and Corrections
- `;
- if (frontMatter.githubCompareUpdatesUrl) {
- html += `View all changes to this article since it was first published.`;
- }
- html += `
- If you see mistakes or want to suggest changes, please create an issue on GitHub .
- `;
- }
-
- const journal = frontMatter.journal;
- if (typeof journal !== "undefined" && journal.title === "Distill") {
- html += `
- Reuse
- Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub , unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.
- `;
- }
-
- if (typeof frontMatter.publishedDate !== "undefined") {
- html += `
- Citation
- For attribution in academic contexts, please cite this work as
- ${frontMatter.concatenatedAuthors}, "${frontMatter.title}", Distill, ${frontMatter.publishedYear}.
- BibTeX citation
- ${serializeFrontmatterToBibtex(frontMatter)}
- `;
- }
-
- return html;
- }
-
- class DistillAppendix extends HTMLElement {
- static get is() {
- return "distill-appendix";
- }
-
- set frontMatter(frontMatter) {
- this.innerHTML = appendixTemplate(frontMatter);
- }
- }
-
- const footerTemplate = `
-
-
-
-
-`;
-
- // Copyright 2018 The Distill Template Authors
-
- const T$c = Template("distill-footer", footerTemplate);
-
- class DistillFooter extends T$c(HTMLElement) {}
-
- // Copyright 2018 The Distill Template Authors
-
- let templateIsLoading = false;
- let runlevel = 0;
- const initialize = function () {
- if (window.distill.runlevel < 1) {
- throw new Error("Insufficient Runlevel for Distill Template!");
- }
-
- /* 1. Flag that we're being loaded */
- if ("distill" in window && window.distill.templateIsLoading) {
- throw new Error("Runlevel 1: Distill Template is getting loaded more than once, aborting!");
- } else {
- window.distill.templateIsLoading = true;
- console.debug("Runlevel 1: Distill Template has started loading.");
- }
-
- /* 2. Add styles if they weren't added during prerendering */
- makeStyleTag(document);
- console.debug("Runlevel 1: Static Distill styles have been added.");
- console.debug("Runlevel 1->2.");
- window.distill.runlevel += 1;
-
- /* 3. Register Controller listener functions */
- /* Needs to happen before components to their connected callbacks have a controller to talk to. */
- for (const [functionName, callback] of Object.entries(Controller.listeners)) {
- if (typeof callback === "function") {
- document.addEventListener(functionName, callback);
- } else {
- console.error("Runlevel 2: Controller listeners need to be functions!");
- }
- }
- console.debug("Runlevel 2: We can now listen to controller events.");
- console.debug("Runlevel 2->3.");
- window.distill.runlevel += 1;
-
- /* 4. Register components */
- const components = [
- Abstract,
- Appendix,
- Article,
- Bibliography,
- Byline,
- Cite,
- CitationList,
- Code,
- Footnote,
- FootnoteList,
- FrontMatter$1,
- HoverBox,
- Title,
- DMath,
- References,
- TOC,
- Figure,
- Slider,
- Interstitial,
- ];
-
- const distillComponents = [DistillHeader, DistillAppendix, DistillFooter];
-
- if (window.distill.runlevel < 2) {
- throw new Error("Insufficient Runlevel for adding custom elements!");
- }
- const allComponents = components.concat(distillComponents);
- for (const component of allComponents) {
- console.debug("Runlevel 2: Registering custom element: " + component.is);
- customElements.define(component.is, component);
- }
-
- console.debug("Runlevel 3: Distill Template finished registering custom elements.");
- console.debug("Runlevel 3->4.");
- window.distill.runlevel += 1;
-
- // If template was added after DOMContentLoaded we may have missed that event.
- // Controller will check for that case, so trigger the event explicitly:
- if (domContentLoaded()) {
- Controller.listeners.DOMContentLoaded();
- }
-
- console.debug("Runlevel 4: Distill Template initialisation complete.");
- window.distill.templateIsLoading = false;
- window.distill.templateHasLoaded = true;
- };
-
- window.distill = { runlevel, initialize, templateIsLoading };
-
- /* 0. Check browser feature support; synchronously polyfill if needed */
- if (Polyfills.browserSupportsAllFeatures()) {
- console.debug("Runlevel 0: No need for polyfills.");
- console.debug("Runlevel 0->1.");
- window.distill.runlevel += 1;
- window.distill.initialize();
- } else {
- console.debug("Runlevel 0: Distill Template is loading polyfills.");
- Polyfills.load(window.distill.initialize);
- }
-});
-//# sourceMappingURL=template.v2.js.map
+(function (factory) {
+ typeof define === "function" && define.amd ? define(factory) : factory();
+})(function () {
+ "use strict";
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+ const months = ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."];
+ const zeroPad = (n) => (n < 10 ? "0" + n : n);
+
+ const RFC = function (date) {
+ const day = days[date.getDay()].substring(0, 3);
+ const paddedDate = zeroPad(date.getDate());
+ const month = months[date.getMonth()].substring(0, 3);
+ const year = date.getFullYear().toString();
+ const hours = date.getUTCHours().toString();
+ const minutes = date.getUTCMinutes().toString();
+ const seconds = date.getUTCSeconds().toString();
+ return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`;
+ };
+
+ const objectFromMap = function (map) {
+ const object = Array.from(map).reduce(
+ (object, [key, value]) => Object.assign(object, { [key]: value }), // Be careful! Maps can have non-String keys; object literals can't.
+ {}
+ );
+ return object;
+ };
+
+ const mapFromObject = function (object) {
+ const map = new Map();
+ for (var property in object) {
+ if (object.hasOwnProperty(property)) {
+ map.set(property, object[property]);
+ }
+ }
+ return map;
+ };
+
+ class Author {
+ // constructor(name='', personalURL='', affiliation='', affiliationURL='') {
+ // this.name = name; // 'Chris Olah'
+ // this.personalURL = personalURL; // 'https://colah.github.io'
+ // this.affiliation = affiliation; // 'Google Brain'
+ // this.affiliationURL = affiliationURL; // 'https://g.co/brain'
+ // }
+
+ constructor(object) {
+ this.name = object.author; // 'Chris Olah'
+ this.personalURL = object.authorURL; // 'https://colah.github.io'
+ this.affiliation = object.affiliation; // 'Google Brain'
+ this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'
+ this.affiliations = object.affiliations || []; // new-style affiliations
+ }
+
+ // 'Chris'
+ get firstName() {
+ const names = this.name.split(" ");
+ return names.slice(0, names.length - 1).join(" ");
+ }
+
+ // 'Olah'
+ get lastName() {
+ const names = this.name.split(" ");
+ return names[names.length - 1];
+ }
+ }
+
+ function mergeFromYMLFrontmatter(target, source) {
+ target.title = source.title;
+ if (source.published) {
+ if (source.published instanceof Date) {
+ target.publishedDate = source.published;
+ } else if (source.published.constructor === String) {
+ target.publishedDate = new Date(source.published);
+ }
+ }
+ if (source.publishedDate) {
+ if (source.publishedDate instanceof Date) {
+ target.publishedDate = source.publishedDate;
+ } else if (source.publishedDate.constructor === String) {
+ target.publishedDate = new Date(source.publishedDate);
+ } else {
+ console.error("Don't know what to do with published date: " + source.publishedDate);
+ }
+ }
+ target.description = source.description;
+ target.authors = source.authors.map((authorObject) => new Author(authorObject));
+ target.katex = source.katex;
+ target.password = source.password;
+ if (source.doi) {
+ target.doi = source.doi;
+ }
+ }
+
+ class FrontMatter {
+ constructor() {
+ this.title = "unnamed article"; // 'Attention and Augmented Recurrent Neural Networks'
+ this.description = ""; // 'A visual overview of neural attention...'
+ this.authors = []; // Array of Author(s)
+
+ this.bibliography = new Map();
+ this.bibliographyParsed = false;
+ // {
+ // 'gregor2015draw': {
+ // 'title': 'DRAW: A recurrent neural network for image generation',
+ // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',
+ // 'journal': 'arXiv preprint arXiv:1502.04623',
+ // 'year': '2015',
+ // 'url': 'https://arxiv.org/pdf/1502.04623.pdf',
+ // 'type': 'article'
+ // },
+ // }
+
+ // Citation keys should be listed in the order that they are appear in the document.
+ // Each key refers to a key in the bibliography dictionary.
+ this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]
+ this.citationsCollected = false;
+
+ //
+ // Assigned from posts.csv
+ //
+
+ // publishedDate: 2016-09-08T07:00:00.000Z,
+ // tags: [ 'rnn' ],
+ // distillPath: '2016/augmented-rnns',
+ // githubPath: 'distillpub/post--augmented-rnns',
+ // doiSuffix: 1,
+
+ //
+ // Assigned from journal
+ //
+ this.journal = {};
+ // journal: {
+ // 'title': 'Distill',
+ // 'full_title': 'Distill',
+ // 'abbrev_title': 'Distill',
+ // 'url': 'http://distill.pub',
+ // 'doi': '10.23915/distill',
+ // 'publisherName': 'Distill Working Group',
+ // 'publisherEmail': 'admin@distill.pub',
+ // 'issn': '2476-0757',
+ // 'editors': [...],
+ // 'committee': [...]
+ // }
+ // volume: 1,
+ // issue: 9,
+
+ this.katex = {};
+
+ //
+ // Assigned from publishing process
+ //
+
+ // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',
+ // updatedDate: 2017-03-21T07:13:16.000Z,
+ // doi: '10.23915/distill.00001',
+ this.doi = undefined;
+ this.publishedDate = undefined;
+ }
+
+ // Example:
+ // title: Demo Title Attention and Augmented Recurrent Neural Networks
+ // published: Jan 10, 2017
+ // authors:
+ // - Chris Olah:
+ // - Shan Carter: http://shancarter.com
+ // affiliations:
+ // - Google Brain:
+ // - Google Brain: http://g.co/brain
+
+ //
+ // Computed Properties
+ //
+
+ // 'http://distill.pub/2016/augmented-rnns',
+ set url(value) {
+ this._url = value;
+ }
+ get url() {
+ if (this._url) {
+ return this._url;
+ } else if (this.distillPath && this.journal.url) {
+ return this.journal.url + "/" + this.distillPath;
+ } else if (this.journal.url) {
+ return this.journal.url;
+ }
+ }
+
+ // 'https://github.com/distillpub/post--augmented-rnns',
+ get githubUrl() {
+ if (this.githubPath) {
+ return "https://github.com/" + this.githubPath;
+ } else {
+ return undefined;
+ }
+ }
+
+ // TODO resolve differences in naming of URL/Url/url.
+ // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',
+ set previewURL(value) {
+ this._previewURL = value;
+ }
+ get previewURL() {
+ return this._previewURL ? this._previewURL : this.url + "/thumbnail.jpg";
+ }
+
+ // 'Thu, 08 Sep 2016 00:00:00 -0700',
+ get publishedDateRFC() {
+ return RFC(this.publishedDate);
+ }
+
+ // 'Thu, 08 Sep 2016 00:00:00 -0700',
+ get updatedDateRFC() {
+ return RFC(this.updatedDate);
+ }
+
+ // 2016,
+ get publishedYear() {
+ return this.publishedDate.getFullYear();
+ }
+
+ // 'Sept',
+ get publishedMonth() {
+ return months[this.publishedDate.getMonth()];
+ }
+
+ // 8,
+ get publishedDay() {
+ return this.publishedDate.getDate();
+ }
+
+ // '09',
+ get publishedMonthPadded() {
+ return zeroPad(this.publishedDate.getMonth() + 1);
+ }
+
+ // '08',
+ get publishedDayPadded() {
+ return zeroPad(this.publishedDate.getDate());
+ }
+
+ get publishedISODateOnly() {
+ return this.publishedDate.toISOString().split("T")[0];
+ }
+
+ get volume() {
+ const volume = this.publishedYear - 2015;
+ if (volume < 1) {
+ throw new Error("Invalid publish date detected during computing volume");
+ }
+ return volume;
+ }
+
+ get issue() {
+ return this.publishedDate.getMonth() + 1;
+ }
+
+ // 'Olah & Carter',
+ get concatenatedAuthors() {
+ if (this.authors.length > 2) {
+ return this.authors[0].lastName + ", et al.";
+ } else if (this.authors.length === 2) {
+ return this.authors[0].lastName + " & " + this.authors[1].lastName;
+ } else if (this.authors.length === 1) {
+ return this.authors[0].lastName;
+ }
+ }
+
+ // 'Olah, Chris and Carter, Shan',
+ get bibtexAuthors() {
+ return this.authors
+ .map((author) => {
+ return author.lastName + ", " + author.firstName;
+ })
+ .join(" and ");
+ }
+
+ // 'olah2016attention'
+ get slug() {
+ let slug = "";
+ if (this.authors.length) {
+ slug += this.authors[0].lastName.toLowerCase();
+ slug += this.publishedYear;
+ slug += this.title.split(" ")[0].toLowerCase();
+ }
+ return slug || "Untitled";
+ }
+
+ get bibliographyEntries() {
+ return new Map(
+ this.citations.map((citationKey) => {
+ const entry = this.bibliography.get(citationKey);
+ return [citationKey, entry];
+ })
+ );
+ }
+
+ set bibliography(bibliography) {
+ if (bibliography instanceof Map) {
+ this._bibliography = bibliography;
+ } else if (typeof bibliography === "object") {
+ this._bibliography = mapFromObject(bibliography);
+ }
+ }
+
+ get bibliography() {
+ return this._bibliography;
+ }
+
+ static fromObject(source) {
+ const frontMatter = new FrontMatter();
+ Object.assign(frontMatter, source);
+ return frontMatter;
+ }
+
+ assignToObject(target) {
+ Object.assign(target, this);
+ target.bibliography = objectFromMap(this.bibliographyEntries);
+ target.url = this.url;
+ target.doi = this.doi;
+ target.githubUrl = this.githubUrl;
+ target.previewURL = this.previewURL;
+ if (this.publishedDate) {
+ target.volume = this.volume;
+ target.issue = this.issue;
+ target.publishedDateRFC = this.publishedDateRFC;
+ target.publishedYear = this.publishedYear;
+ target.publishedMonth = this.publishedMonth;
+ target.publishedDay = this.publishedDay;
+ target.publishedMonthPadded = this.publishedMonthPadded;
+ target.publishedDayPadded = this.publishedDayPadded;
+ }
+ if (this.updatedDate) {
+ target.updatedDateRFC = this.updatedDateRFC;
+ }
+ target.concatenatedAuthors = this.concatenatedAuthors;
+ target.bibtexAuthors = this.bibtexAuthors;
+ target.slug = this.slug;
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ const Mutating = (superclass) => {
+ return class extends superclass {
+ constructor() {
+ super();
+
+ // set up mutation observer
+ const options = {
+ childList: true,
+ characterData: true,
+ subtree: true,
+ };
+ const observer = new MutationObserver(() => {
+ observer.disconnect();
+ this.renderIfPossible();
+ observer.observe(this, options);
+ });
+
+ // ...and listen for changes
+ observer.observe(this, options);
+ }
+
+ connectedCallback() {
+ super.connectedCallback();
+
+ this.renderIfPossible();
+ }
+
+ // potential TODO: check if this is enough for all our usecases
+ // maybe provide a custom function to tell if we have enough information to render
+ renderIfPossible() {
+ if (this.textContent && this.root) {
+ this.renderContent();
+ }
+ }
+
+ renderContent() {
+ console.error(`Your class ${this.constructor.name} must provide a custom renderContent() method!`);
+ }
+ }; // end class
+ }; // end mixin function
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ /*global ShadyCSS*/
+
+ const Template = (name, templateString, useShadow = true) => {
+ return (superclass) => {
+ const template = document.createElement("template");
+ template.innerHTML = templateString;
+
+ if (useShadow && "ShadyCSS" in window) {
+ ShadyCSS.prepareTemplate(template, name);
+ }
+
+ return class extends superclass {
+ static get is() {
+ return name;
+ }
+
+ constructor() {
+ super();
+
+ this.clone = document.importNode(template.content, true);
+ if (useShadow) {
+ this.attachShadow({ mode: "open" });
+ this.shadowRoot.appendChild(this.clone);
+ }
+ }
+
+ connectedCallback() {
+ if (this.hasAttribute("distill-prerendered")) {
+ return;
+ }
+ if (useShadow) {
+ if ("ShadyCSS" in window) {
+ ShadyCSS.styleElement(this);
+ }
+ } else {
+ this.insertBefore(this.clone, this.firstChild);
+ }
+ }
+
+ get root() {
+ if (useShadow) {
+ return this.shadowRoot;
+ } else {
+ return this;
+ }
+ }
+
+ /* TODO: Are we using these? Should we even? */
+ $(query) {
+ return this.root.querySelector(query);
+ }
+
+ $$(query) {
+ return this.root.querySelectorAll(query);
+ }
+ };
+ };
+ };
+
+ var math =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nspan.katex-display {\n text-align: left;\n padding: 8px 0 8px 0;\n margin: 0.5em 0 0.5em 1em;\n}\n\nspan.katex {\n -webkit-font-smoothing: antialiased;\n color: rgba(0, 0, 0, 0.8);\n font-size: 1.18em;\n}\n';
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // This is a straight concatenation of code from KaTeX's contrib folder,
+ // but we aren't using some of their helpers that don't work well outside a browser environment.
+
+ /*global katex */
+
+ const findEndOfMath = function (delimiter, text, startIndex) {
+ // Adapted from
+ // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
+ let index = startIndex;
+ let braceLevel = 0;
+
+ const delimLength = delimiter.length;
+
+ while (index < text.length) {
+ const character = text[index];
+
+ if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
+ return index;
+ } else if (character === "\\") {
+ index++;
+ } else if (character === "{") {
+ braceLevel++;
+ } else if (character === "}") {
+ braceLevel--;
+ }
+
+ index++;
+ }
+
+ return -1;
+ };
+
+ const splitAtDelimiters = function (startData, leftDelim, rightDelim, display) {
+ const finalData = [];
+
+ for (let i = 0; i < startData.length; i++) {
+ if (startData[i].type === "text") {
+ const text = startData[i].data;
+
+ let lookingForLeft = true;
+ let currIndex = 0;
+ let nextIndex;
+
+ nextIndex = text.indexOf(leftDelim);
+ if (nextIndex !== -1) {
+ currIndex = nextIndex;
+ finalData.push({
+ type: "text",
+ data: text.slice(0, currIndex),
+ });
+ lookingForLeft = false;
+ }
+
+ while (true) {
+ // eslint-disable-line no-constant-condition
+ if (lookingForLeft) {
+ nextIndex = text.indexOf(leftDelim, currIndex);
+ if (nextIndex === -1) {
+ break;
+ }
+
+ finalData.push({
+ type: "text",
+ data: text.slice(currIndex, nextIndex),
+ });
+
+ currIndex = nextIndex;
+ } else {
+ nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
+ if (nextIndex === -1) {
+ break;
+ }
+
+ finalData.push({
+ type: "math",
+ data: text.slice(currIndex + leftDelim.length, nextIndex),
+ rawData: text.slice(currIndex, nextIndex + rightDelim.length),
+ display: display,
+ });
+
+ currIndex = nextIndex + rightDelim.length;
+ }
+
+ lookingForLeft = !lookingForLeft;
+ }
+
+ finalData.push({
+ type: "text",
+ data: text.slice(currIndex),
+ });
+ } else {
+ finalData.push(startData[i]);
+ }
+ }
+
+ return finalData;
+ };
+
+ const splitWithDelimiters = function (text, delimiters) {
+ let data = [{ type: "text", data: text }];
+ for (let i = 0; i < delimiters.length; i++) {
+ const delimiter = delimiters[i];
+ data = splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
+ }
+ return data;
+ };
+
+ /* Note: optionsCopy is mutated by this method. If it is ever exposed in the
+ * API, we should copy it before mutating.
+ */
+ const renderMathInText = function (text, optionsCopy) {
+ const data = splitWithDelimiters(text, optionsCopy.delimiters);
+ const fragment = document.createDocumentFragment();
+
+ for (let i = 0; i < data.length; i++) {
+ if (data[i].type === "text") {
+ fragment.appendChild(document.createTextNode(data[i].data));
+ } else {
+ const tag = document.createElement("d-math");
+ const math = data[i].data;
+ // Override any display mode defined in the settings with that
+ // defined by the text itself
+ optionsCopy.displayMode = data[i].display;
+ try {
+ tag.textContent = math;
+ if (optionsCopy.displayMode) {
+ tag.setAttribute("block", "");
+ }
+ } catch (e) {
+ if (!(e instanceof katex.ParseError)) {
+ throw e;
+ }
+ optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
+ fragment.appendChild(document.createTextNode(data[i].rawData));
+ continue;
+ }
+ fragment.appendChild(tag);
+ }
+ }
+
+ return fragment;
+ };
+
+ const renderElem = function (elem, optionsCopy) {
+ for (let i = 0; i < elem.childNodes.length; i++) {
+ const childNode = elem.childNodes[i];
+ if (childNode.nodeType === 3) {
+ // Text node
+ const text = childNode.textContent;
+ if (optionsCopy.mightHaveMath(text)) {
+ const frag = renderMathInText(text, optionsCopy);
+ i += frag.childNodes.length - 1;
+ elem.replaceChild(frag, childNode);
+ }
+ } else if (childNode.nodeType === 1) {
+ // Element node
+ const shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1;
+
+ if (shouldRender) {
+ renderElem(childNode, optionsCopy);
+ }
+ }
+ // Otherwise, it's something else, and ignore it.
+ }
+ };
+
+ const defaultAutoRenderOptions = {
+ delimiters: [
+ { left: "$$", right: "$$", display: true },
+ { left: "\\[", right: "\\]", display: true },
+ { left: "\\(", right: "\\)", display: false },
+ // LaTeX uses this, but it ruins the display of normal `$` in text:
+ // {left: '$', right: '$', display: false},
+ ],
+
+ ignoredTags: ["script", "noscript", "style", "textarea", "pre", "code", "svg"],
+
+ errorCallback: function (msg, err) {
+ console.error(msg, err);
+ },
+ };
+
+ const renderMathInElement = function (elem, options) {
+ if (!elem) {
+ throw new Error("No element provided to render");
+ }
+
+ const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);
+ const delimiterStrings = optionsCopy.delimiters.flatMap((d) => [d.left, d.right]);
+ const mightHaveMath = (text) => delimiterStrings.some((d) => text.indexOf(d) !== -1);
+ optionsCopy.mightHaveMath = mightHaveMath;
+ renderElem(elem, optionsCopy);
+ };
+
+ // Copyright 2018 The Distill Template Authors
+
+ const katexJSURL = "https://distill.pub/third-party/katex/katex.min.js";
+ const katexCSSTag = ' ';
+
+ const T = Template(
+ "d-math",
+ `
+${katexCSSTag}
+
+
+`
+ );
+
+ // DMath, not Math, because that would conflict with the JS built-in
+ class DMath extends Mutating(T(HTMLElement)) {
+ static set katexOptions(options) {
+ DMath._katexOptions = options;
+ if (DMath.katexOptions.delimiters) {
+ if (!DMath.katexAdded) {
+ DMath.addKatex();
+ } else {
+ DMath.katexLoadedCallback();
+ }
+ }
+ }
+
+ static get katexOptions() {
+ if (!DMath._katexOptions) {
+ DMath._katexOptions = {
+ delimiters: [{ left: "$$", right: "$$", display: false }],
+ };
+ }
+ return DMath._katexOptions;
+ }
+
+ static katexLoadedCallback() {
+ // render all d-math tags
+ const mathTags = document.querySelectorAll("d-math");
+ for (const mathTag of mathTags) {
+ mathTag.renderContent();
+ }
+ // transform inline delimited math to d-math tags
+ if (DMath.katexOptions.delimiters) {
+ renderMathInElement(document.body, DMath.katexOptions);
+ }
+ }
+
+ static addKatex() {
+ // css tag can use this convenience function
+ document.head.insertAdjacentHTML("beforeend", katexCSSTag);
+ // script tag has to be created to work properly
+ const scriptTag = document.createElement("script");
+ scriptTag.src = katexJSURL;
+ scriptTag.async = true;
+ scriptTag.onload = DMath.katexLoadedCallback;
+ scriptTag.crossorigin = "anonymous";
+ document.head.appendChild(scriptTag);
+
+ DMath.katexAdded = true;
+ }
+
+ get options() {
+ const localOptions = { displayMode: this.hasAttribute("block") };
+ return Object.assign(localOptions, DMath.katexOptions);
+ }
+
+ connectedCallback() {
+ super.connectedCallback();
+ if (!DMath.katexAdded) {
+ DMath.addKatex();
+ }
+ }
+
+ renderContent() {
+ if (typeof katex !== "undefined") {
+ const container = this.root.querySelector("#katex-container");
+ katex.render(this.textContent, container, this.options);
+ }
+ }
+ }
+
+ DMath.katexAdded = false;
+ DMath.inlineMathRendered = false;
+ window.DMath = DMath; // TODO: check if this can be removed, or if we should expose a distill global
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ function collect_citations(dom = document) {
+ const citations = new Set();
+ const citeTags = dom.querySelectorAll("d-cite");
+ for (const tag of citeTags) {
+ const keyString = tag.getAttribute("key") || tag.getAttribute("bibtex-key");
+ const keys = keyString.split(",").map((k) => k.trim());
+ for (const key of keys) {
+ citations.add(key);
+ }
+ }
+ return [...citations];
+ }
+
+ function author_string(ent, template, sep, finalSep) {
+ if (ent.author == null) {
+ return "";
+ }
+ var names = ent.author.split(" and ");
+ let name_strings = names.map((name) => {
+ name = name.trim();
+ if (name.indexOf(",") != -1) {
+ var last = name.split(",")[0].trim();
+ var firsts = name.split(",")[1];
+ } else if (name.indexOf(" ") != -1) {
+ var last = name.split(" ").slice(-1)[0].trim();
+ var firsts = name.split(" ").slice(0, -1).join(" ");
+ } else {
+ var last = name.trim();
+ }
+ var initials = "";
+ if (firsts != undefined) {
+ initials = firsts
+ .trim()
+ .split(" ")
+ .map((s) => s.trim()[0]);
+ initials = initials.join(".") + ".";
+ }
+ return template.replace("${F}", firsts).replace("${L}", last).replace("${I}", initials).trim(); // in case one of first or last was empty
+ });
+ if (names.length > 1) {
+ var str = name_strings.slice(0, names.length - 1).join(sep);
+ str += (finalSep || sep) + name_strings[names.length - 1];
+ return str;
+ } else {
+ return name_strings[0];
+ }
+ }
+
+ function venue_string(ent) {
+ var cite = ent.journal || ent.booktitle || "";
+ if ("volume" in ent) {
+ var issue = ent.issue || ent.number;
+ issue = issue != undefined ? "(" + issue + ")" : "";
+ cite += ", Vol " + ent.volume + issue;
+ }
+ if ("pages" in ent) {
+ cite += ", pp. " + ent.pages;
+ }
+ if (cite != "") cite += ". ";
+ if ("publisher" in ent) {
+ cite += ent.publisher;
+ if (cite[cite.length - 1] != ".") cite += ".";
+ }
+ return cite;
+ }
+
+ function link_string(ent) {
+ if ("url" in ent) {
+ var url = ent.url;
+ var arxiv_match = /arxiv\.org\/abs\/([0-9\.]*)/.exec(url);
+ if (arxiv_match != null) {
+ url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`;
+ }
+
+ if (url.slice(-4) == ".pdf") {
+ var label = "PDF";
+ } else if (url.slice(-5) == ".html") {
+ var label = "HTML";
+ }
+ return ` [${label || "link"}] `;
+ } /* else if ("doi" in ent){
+ return ` [DOI] `;
+ }*/ else {
+ return "";
+ }
+ }
+ function doi_string(ent, new_line) {
+ if ("doi" in ent) {
+ return `${new_line ? " " : ""} DOI: ${ent.doi} `;
+ } else {
+ return "";
+ }
+ }
+
+ function title_string(ent) {
+ return '' + ent.title + " ";
+ }
+
+ function bibliography_cite(ent, fancy) {
+ if (ent) {
+ var cite = title_string(ent);
+ cite += link_string(ent) + " ";
+ if (ent.author) {
+ cite += author_string(ent, "${L}, ${I}", ", ", " and ");
+ if (ent.year || ent.date) {
+ cite += ", ";
+ }
+ }
+ if (ent.year || ent.date) {
+ cite += (ent.year || ent.date) + ". ";
+ } else {
+ cite += ". ";
+ }
+ cite += venue_string(ent);
+ cite += doi_string(ent);
+ return cite;
+ /*var cite = author_string(ent, "${L}, ${I}", ", ", " and ");
+ if (ent.year || ent.date){
+ cite += ", " + (ent.year || ent.date) + ". "
+ } else {
+ cite += ". "
+ }
+ cite += "" + ent.title + " . ";
+ cite += venue_string(ent);
+ cite += doi_string(ent);
+ cite += link_string(ent);
+ return cite*/
+ } else {
+ return "?";
+ }
+ }
+
+ function hover_cite(ent) {
+ if (ent) {
+ var cite = "";
+ cite += "" + ent.title + " ";
+ cite += link_string(ent);
+ cite += " ";
+
+ var a_str = author_string(ent, "${I} ${L}", ", ") + ".";
+ var v_str = venue_string(ent).trim() + " " + ent.year + ". " + doi_string(ent, true);
+
+ if ((a_str + v_str).length < Math.min(40, ent.title.length)) {
+ cite += a_str + " " + v_str;
+ } else {
+ cite += a_str + " " + v_str;
+ }
+ return cite;
+ } else {
+ return "?";
+ }
+ }
+
+ function domContentLoaded() {
+ return ["interactive", "complete"].indexOf(document.readyState) !== -1;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ function _moveLegacyAffiliationFormatIntoArray(frontMatter) {
+ // authors used to have propoerties "affiliation" and "affiliationURL".
+ // We now encourage using an array for affiliations containing objects with
+ // properties "name" and "url".
+ for (let author of frontMatter.authors) {
+ const hasOldStyle = Boolean(author.affiliation);
+ const hasNewStyle = Boolean(author.affiliations);
+ if (!hasOldStyle) continue;
+ if (hasNewStyle) {
+ console.warn(
+ `Author ${author.author} has both old-style ("affiliation" & "affiliationURL") and new style ("affiliations") affiliation information!`
+ );
+ } else {
+ let newAffiliation = {
+ name: author.affiliation,
+ };
+ if (author.affiliationURL) newAffiliation.url = author.affiliationURL;
+ author.affiliations = [newAffiliation];
+ }
+ }
+ return frontMatter;
+ }
+
+ function parseFrontmatter(element) {
+ const scriptTag = element.firstElementChild;
+ if (scriptTag) {
+ const type = scriptTag.getAttribute("type");
+ if (type.split("/")[1] == "json") {
+ const content = scriptTag.textContent;
+ const parsed = JSON.parse(content);
+ return _moveLegacyAffiliationFormatIntoArray(parsed);
+ } else {
+ console.error("Distill only supports JSON frontmatter tags anymore; no more YAML.");
+ }
+ } else {
+ console.error(
+ "You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates."
+ );
+ }
+ return {};
+ }
+
+ class FrontMatter$1 extends HTMLElement {
+ static get is() {
+ return "d-front-matter";
+ }
+
+ constructor() {
+ super();
+
+ const options = {
+ childList: true,
+ characterData: true,
+ subtree: true,
+ };
+ const observer = new MutationObserver((entries) => {
+ for (const entry of entries) {
+ if (entry.target.nodeName === "SCRIPT" || entry.type === "characterData") {
+ const data = parseFrontmatter(this);
+ this.notify(data);
+ }
+ }
+ });
+ observer.observe(this, options);
+ }
+
+ notify(data) {
+ const options = { detail: data, bubbles: true };
+ const event = new CustomEvent("onFrontMatterChanged", options);
+ document.dispatchEvent(event);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // no appendix -> add appendix
+ // title in front, no h1 -> add it
+ // no title in front, h1 -> read and put into frontMatter
+ // footnote -> footnote list
+ // break up bib
+ // if citation, no bib-list -> add citation-list
+
+ // if authors, no byline -> add byline
+
+ function optionalComponents(dom, data) {
+ const body = dom.body;
+ const article = body.querySelector("d-article");
+
+ // If we don't have an article tag, something weird is going on—giving up.
+ if (!article) {
+ console.warn("No d-article tag found; skipping adding optional components!");
+ return;
+ }
+
+ let byline = dom.querySelector("d-byline");
+ if (!byline) {
+ if (data.authors) {
+ byline = dom.createElement("d-byline");
+ // body.insertBefore(byline, article);
+ } else {
+ console.warn("No authors found in front matter; please add them before submission!");
+ }
+ }
+
+ let title = dom.querySelector("d-title");
+ if (!title) {
+ title = dom.createElement("d-title");
+ body.insertBefore(title, byline);
+ }
+
+ let h1 = title.querySelector("h1");
+ if (!h1) {
+ h1 = dom.createElement("h1");
+ h1.textContent = data.title;
+ title.insertBefore(h1, title.firstChild);
+ }
+
+ const hasPassword = typeof data.password !== "undefined";
+ let interstitial = body.querySelector("d-interstitial");
+ if (hasPassword && !interstitial) {
+ const inBrowser = typeof window !== "undefined";
+ const onLocalhost = inBrowser && window.location.hostname.includes("localhost");
+ if (!inBrowser || !onLocalhost) {
+ interstitial = dom.createElement("d-interstitial");
+ interstitial.password = data.password;
+ body.insertBefore(interstitial, body.firstChild);
+ }
+ } else if (!hasPassword && interstitial) {
+ interstitial.parentElement.removeChild(this);
+ }
+
+ let appendix = dom.querySelector("d-appendix");
+ if (!appendix) {
+ appendix = dom.createElement("d-appendix");
+ dom.body.appendChild(appendix);
+ }
+
+ let footnoteList = dom.querySelector("d-footnote-list");
+ if (!footnoteList) {
+ footnoteList = dom.createElement("d-footnote-list");
+ appendix.appendChild(footnoteList);
+ }
+
+ let citationList = dom.querySelector("d-citation-list");
+ if (!citationList) {
+ citationList = dom.createElement("d-citation-list");
+ appendix.appendChild(citationList);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const frontMatter = new FrontMatter();
+
+ const Controller = {
+ frontMatter: frontMatter,
+ waitingOn: {
+ bibliography: [],
+ citations: [],
+ },
+ listeners: {
+ onCiteKeyCreated(event) {
+ const [citeTag, keys] = event.detail;
+
+ // ensure we have citations
+ if (!frontMatter.citationsCollected) {
+ // console.debug('onCiteKeyCreated, but unresolved dependency ("citations"). Enqueing.');
+ Controller.waitingOn.citations.push(() => Controller.listeners.onCiteKeyCreated(event));
+ return;
+ }
+
+ // ensure we have a loaded bibliography
+ if (!frontMatter.bibliographyParsed) {
+ // console.debug('onCiteKeyCreated, but unresolved dependency ("bibliography"). Enqueing.');
+ Controller.waitingOn.bibliography.push(() => Controller.listeners.onCiteKeyCreated(event));
+ return;
+ }
+
+ const numbers = keys.map((key) => frontMatter.citations.indexOf(key));
+ citeTag.numbers = numbers;
+ const entries = keys.map((key) => frontMatter.bibliography.get(key));
+ citeTag.entries = entries;
+ },
+
+ onCiteKeyChanged() {
+ // const [citeTag, keys] = event.detail;
+
+ // update citations
+ frontMatter.citations = collect_citations();
+ frontMatter.citationsCollected = true;
+ for (const waitingCallback of Controller.waitingOn.citations.slice()) {
+ waitingCallback();
+ }
+
+ // update bibliography
+ const citationListTag = document.querySelector("d-citation-list");
+ const bibliographyEntries = new Map(
+ frontMatter.citations.map((citationKey) => {
+ return [citationKey, frontMatter.bibliography.get(citationKey)];
+ })
+ );
+ citationListTag.citations = bibliographyEntries;
+
+ const citeTags = document.querySelectorAll("d-cite");
+ for (const citeTag of citeTags) {
+ console.log(citeTag);
+ const keys = citeTag.keys;
+ const numbers = keys.map((key) => frontMatter.citations.indexOf(key));
+ citeTag.numbers = numbers;
+ const entries = keys.map((key) => frontMatter.bibliography.get(key));
+ citeTag.entries = entries;
+ }
+ },
+
+ onCiteKeyRemoved(event) {
+ Controller.listeners.onCiteKeyChanged(event);
+ },
+
+ onBibliographyChanged(event) {
+ const citationListTag = document.querySelector("d-citation-list");
+
+ const bibliography = event.detail;
+
+ frontMatter.bibliography = bibliography;
+ frontMatter.bibliographyParsed = true;
+ for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {
+ waitingCallback();
+ }
+
+ // ensure we have citations
+ if (!frontMatter.citationsCollected) {
+ Controller.waitingOn.citations.push(function () {
+ Controller.listeners.onBibliographyChanged({
+ target: event.target,
+ detail: event.detail,
+ });
+ });
+ return;
+ }
+
+ if (citationListTag.hasAttribute("distill-prerendered")) {
+ console.debug("Citation list was prerendered; not updating it.");
+ } else {
+ const entries = new Map(
+ frontMatter.citations.map((citationKey) => {
+ return [citationKey, frontMatter.bibliography.get(citationKey)];
+ })
+ );
+ citationListTag.citations = entries;
+ }
+ },
+
+ onFootnoteChanged() {
+ // const footnote = event.detail;
+ //TODO: optimize to only update current footnote
+ const footnotesList = document.querySelector("d-footnote-list");
+ if (footnotesList) {
+ const footnotes = document.querySelectorAll("d-footnote");
+ footnotesList.footnotes = footnotes;
+ }
+ },
+
+ onFrontMatterChanged(event) {
+ const data = event.detail;
+ mergeFromYMLFrontmatter(frontMatter, data);
+
+ const interstitial = document.querySelector("d-interstitial");
+ if (interstitial) {
+ if (typeof frontMatter.password !== "undefined") {
+ interstitial.password = frontMatter.password;
+ } else {
+ interstitial.parentElement.removeChild(interstitial);
+ }
+ }
+
+ const prerendered = document.body.hasAttribute("distill-prerendered");
+ if (!prerendered && domContentLoaded()) {
+ optionalComponents(document, frontMatter);
+
+ const appendix = document.querySelector("distill-appendix");
+ if (appendix) {
+ appendix.frontMatter = frontMatter;
+ }
+
+ const byline = document.querySelector("d-byline");
+ if (byline) {
+ byline.frontMatter = frontMatter;
+ }
+
+ if (data.katex) {
+ DMath.katexOptions = data.katex;
+ }
+ }
+ },
+
+ DOMContentLoaded() {
+ if (Controller.loaded) {
+ console.warn("Controller received DOMContentLoaded but was already loaded!");
+ return;
+ } else if (!domContentLoaded()) {
+ console.warn("Controller received DOMContentLoaded at document.readyState: " + document.readyState + "!");
+ return;
+ } else {
+ Controller.loaded = true;
+ console.debug("Runlevel 4: Controller running DOMContentLoaded");
+ }
+
+ const frontMatterTag = document.querySelector("d-front-matter");
+ if (frontMatterTag) {
+ const data = parseFrontmatter(frontMatterTag);
+ Controller.listeners.onFrontMatterChanged({ detail: data });
+ }
+
+ // Resolving "citations" dependency due to initial DOM load
+ frontMatter.citations = collect_citations();
+ frontMatter.citationsCollected = true;
+ for (const waitingCallback of Controller.waitingOn.citations.slice()) {
+ waitingCallback();
+ }
+
+ if (frontMatter.bibliographyParsed) {
+ for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {
+ waitingCallback();
+ }
+ }
+
+ const footnotesList = document.querySelector("d-footnote-list");
+ if (footnotesList) {
+ const footnotes = document.querySelectorAll("d-footnote");
+ footnotesList.footnotes = footnotes;
+ }
+ },
+ }, // listeners
+ }; // Controller
+
+ var base =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml {\n font-size: 14px;\n\tline-height: 1.6em;\n /* font-family: "Libre Franklin", "Helvetica Neue", sans-serif; */\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;\n /*, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";*/\n text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\n@media(min-width: 768px) {\n html {\n font-size: 16px;\n }\n}\n\nbody {\n margin: 0;\n}\n\na {\n color: #004276;\n}\n\nfigure {\n margin: 0;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th {\n\ttext-align: left;\n}\n\ntable thead {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\ntable thead th {\n padding-bottom: 0.5em;\n}\n\ntable tbody :first-child td {\n padding-top: 0.5em;\n}\n\npre {\n overflow: auto;\n max-width: 100%;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nsup, sub {\n vertical-align: baseline;\n position: relative;\n top: -0.4em;\n line-height: 1em;\n}\n\nsub {\n top: 0.4em;\n}\n\n.kicker,\n.marker {\n font-size: 15px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* Headline */\n\n@media(min-width: 1024px) {\n d-title h1 span {\n display: block;\n }\n}\n\n/* Figure */\n\nfigure {\n position: relative;\n margin-bottom: 2.5em;\n margin-top: 1.5em;\n}\n\nfigcaption+figure {\n\n}\n\nfigure img {\n width: 100%;\n}\n\nfigure svg text,\nfigure svg tspan {\n}\n\nfigcaption,\n.figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n\n@media(min-width: 1024px) {\nfigcaption,\n.figcaption {\n font-size: 13px;\n }\n}\n\nfigure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\nfigcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nfigcaption b,\nfigcaption strong, {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n';
+
+ var layout =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@supports not (display: grid) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n display: block;\n padding: 8px;\n }\n}\n\n.base-grid,\ndistill-header,\nd-title,\nd-abstract,\nd-article,\nd-appendix,\ndistill-appendix,\nd-byline,\nd-footnote-list,\nd-citation-list,\ndistill-footer {\n display: grid;\n justify-items: stretch;\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\n grid-column-gap: 8px;\n}\n\n.grid {\n display: grid;\n grid-column-gap: 8px;\n}\n\n@media(min-width: 768px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1000px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1180px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 32px;\n }\n\n .grid {\n grid-column-gap: 32px;\n }\n}\n\n\n\n\n.base-grid {\n grid-column: screen;\n}\n\n/* .l-body,\nd-article > * {\n grid-column: text;\n}\n\n.l-page,\nd-title > *,\nd-figure {\n grid-column: page;\n} */\n\n.l-gutter {\n grid-column: gutter;\n}\n\n.l-text,\n.l-body {\n grid-column: text;\n}\n\n.l-page {\n grid-column: page;\n}\n\n.l-body-outset {\n grid-column: middle;\n}\n\n.l-page-outset {\n grid-column: page;\n}\n\n.l-screen {\n grid-column: screen;\n}\n\n.l-screen-inset {\n grid-column: screen;\n padding-left: 16px;\n padding-left: 16px;\n}\n\n\n/* Aside */\n\nd-article aside {\n grid-column: gutter;\n font-size: 12px;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.6)\n}\n\n@media(min-width: 768px) {\n aside {\n grid-column: gutter;\n }\n\n .side {\n grid-column: gutter;\n }\n}\n';
+
+ var print =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@media print {\n\n @page {\n size: 8in 11in;\n @bottom-right {\n content: counter(page) " of " counter(pages);\n }\n }\n\n html {\n /* no general margins -- CSS Grid takes care of those */\n }\n\n p, code {\n page-break-inside: avoid;\n }\n\n h2, h3 {\n page-break-after: avoid;\n }\n\n d-header {\n visibility: hidden;\n }\n\n d-footer {\n display: none!important;\n }\n\n}\n';
+
+ var byline =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n';
+
+ var article =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n';
+
+ var title =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n';
+
+ // Copyright 2018 The Distill Template Authors
+
+ const styles = base + layout + title + byline + article + math + print;
+
+ function makeStyleTag(dom) {
+ const styleTagId = "distill-prerendered-styles";
+ const prerenderedTag = dom.getElementById(styleTagId);
+ if (!prerenderedTag) {
+ const styleTag = dom.createElement("style");
+ styleTag.id = styleTagId;
+ styleTag.type = "text/css";
+ const cssTextTag = dom.createTextNode(styles);
+ styleTag.appendChild(cssTextTag);
+ const firstScriptTag = dom.head.querySelector("script");
+ dom.head.insertBefore(styleTag, firstScriptTag);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ function addPolyfill(polyfill, polyfillLoadedCallback) {
+ console.debug("Runlevel 0: Polyfill required: " + polyfill.name);
+ const script = document.createElement("script");
+ script.src = polyfill.url;
+ script.async = false;
+ if (polyfillLoadedCallback) {
+ script.onload = function () {
+ polyfillLoadedCallback(polyfill);
+ };
+ }
+ script.onerror = function () {
+ new Error("Runlevel 0: Polyfills failed to load script " + polyfill.name);
+ };
+ document.head.appendChild(script);
+ }
+
+ const polyfills = [
+ {
+ name: "WebComponents",
+ support: function () {
+ return (
+ "customElements" in window &&
+ "attachShadow" in Element.prototype &&
+ "getRootNode" in Element.prototype &&
+ "content" in document.createElement("template") &&
+ "Promise" in window &&
+ "from" in Array
+ );
+ },
+ url: "https://distill.pub/third-party/polyfills/webcomponents-lite.js",
+ },
+ {
+ name: "IntersectionObserver",
+ support: function () {
+ return "IntersectionObserver" in window && "IntersectionObserverEntry" in window;
+ },
+ url: "https://distill.pub/third-party/polyfills/intersection-observer.js",
+ },
+ ];
+
+ class Polyfills {
+ static browserSupportsAllFeatures() {
+ return polyfills.every((poly) => poly.support());
+ }
+
+ static load(callback) {
+ // Define an intermediate callback that checks if all is loaded.
+ const polyfillLoaded = function (polyfill) {
+ polyfill.loaded = true;
+ console.debug("Runlevel 0: Polyfill has finished loading: " + polyfill.name);
+ // console.debug(window[polyfill.name]);
+ if (Polyfills.neededPolyfills.every((poly) => poly.loaded)) {
+ console.debug("Runlevel 0: All required polyfills have finished loading.");
+ console.debug("Runlevel 0->1.");
+ window.distillRunlevel = 1;
+ callback();
+ }
+ };
+ // Add polyfill script tags
+ for (const polyfill of Polyfills.neededPolyfills) {
+ addPolyfill(polyfill, polyfillLoaded);
+ }
+ }
+
+ static get neededPolyfills() {
+ if (!Polyfills._neededPolyfills) {
+ Polyfills._neededPolyfills = polyfills.filter((poly) => !poly.support());
+ }
+ return Polyfills._neededPolyfills;
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // const marginSmall = 16;
+ // const marginLarge = 3 * marginSmall;
+ // const margin = marginSmall + marginLarge;
+ // const gutter = marginSmall;
+ // const outsetAmount = margin / 2;
+ // const numCols = 4;
+ // const numGutters = numCols - 1;
+ // const columnWidth = (768 - 2 * marginLarge - numGutters * gutter) / numCols;
+ //
+ // const screenwidth = 768;
+ // const pageWidth = screenwidth - 2 * marginLarge;
+ // const bodyWidth = pageWidth - columnWidth - gutter;
+
+ function body(selector) {
+ return `${selector} {
+ grid-column: left / text;
+ }
+ `;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$1 = Template(
+ "d-abstract",
+ `
+
+
+
+`
+ );
+
+ class Abstract extends T$1(HTMLElement) {}
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$2 = Template(
+ "d-appendix",
+ `
+
+
+`,
+ false
+ );
+
+ class Appendix extends T$2(HTMLElement) {}
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // import { Template } from '../mixins/template';
+ // import { Controller } from '../controller';
+
+ const isOnlyWhitespace = /^\s*$/;
+
+ class Article extends HTMLElement {
+ static get is() {
+ return "d-article";
+ }
+
+ constructor() {
+ super();
+
+ new MutationObserver((mutations) => {
+ for (const mutation of mutations) {
+ for (const addedNode of mutation.addedNodes) {
+ switch (addedNode.nodeName) {
+ case "#text":
+ {
+ // usually text nodes are only linebreaks.
+ const text = addedNode.nodeValue;
+ if (!isOnlyWhitespace.test(text)) {
+ console.warn(
+ "Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a or tag. We found the following text: " +
+ text
+ );
+ const wrapper = document.createElement("span");
+ wrapper.innerHTML = addedNode.nodeValue;
+ addedNode.parentNode.insertBefore(wrapper, addedNode);
+ addedNode.parentNode.removeChild(addedNode);
+ }
+ }
+ break;
+ }
+ }
+ }
+ }).observe(this, { childList: true });
+ }
+ }
+
+ var commonjsGlobal =
+ typeof globalThis !== "undefined"
+ ? globalThis
+ : typeof window !== "undefined"
+ ? window
+ : typeof global !== "undefined"
+ ? global
+ : typeof self !== "undefined"
+ ? self
+ : {};
+
+ function createCommonjsModule(fn, module) {
+ return (module = { exports: {} }), fn(module, module.exports), module.exports;
+ }
+
+ var bibtexParse = createCommonjsModule(function (module, exports) {
+ /* start bibtexParse 0.0.22 */
+
+ //Original work by Henrik Muehe (c) 2010
+ //
+ //CommonJS port by Mikola Lysenko 2013
+ //
+ //Port to Browser lib by ORCID / RCPETERS
+ //
+ //Issues:
+ //no comment handling within strings
+ //no string concatenation
+ //no variable values yet
+ //Grammar implemented here:
+ //bibtex -> (string | preamble | comment | entry)*;
+ //string -> '@STRING' '{' key_equals_value '}';
+ //preamble -> '@PREAMBLE' '{' value '}';
+ //comment -> '@COMMENT' '{' value '}';
+ //entry -> '@' key '{' key ',' key_value_list '}';
+ //key_value_list -> key_equals_value (',' key_equals_value)*;
+ //key_equals_value -> key '=' value;
+ //value -> value_quotes | value_braces | key;
+ //value_quotes -> '"' .*? '"'; // not quite
+ //value_braces -> '{' .*? '"'; // not quite
+ (function (exports) {
+ function BibtexParser() {
+ this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
+ this.notKey = [",", "{", "}", " ", "="];
+ this.pos = 0;
+ this.input = "";
+ this.entries = new Array();
+
+ this.currentEntry = "";
+
+ this.setInput = function (t) {
+ this.input = t;
+ };
+
+ this.getEntries = function () {
+ return this.entries;
+ };
+
+ this.isWhitespace = function (s) {
+ return s == " " || s == "\r" || s == "\t" || s == "\n";
+ };
+
+ this.match = function (s, canCommentOut) {
+ if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;
+ this.skipWhitespace(canCommentOut);
+ if (this.input.substring(this.pos, this.pos + s.length) == s) {
+ this.pos += s.length;
+ } else {
+ throw "Token mismatch, expected " + s + ", found " + this.input.substring(this.pos);
+ }
+ this.skipWhitespace(canCommentOut);
+ };
+
+ this.tryMatch = function (s, canCommentOut) {
+ if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;
+ this.skipWhitespace(canCommentOut);
+ if (this.input.substring(this.pos, this.pos + s.length) == s) {
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ /* when search for a match all text can be ignored, not just white space */
+ this.matchAt = function () {
+ while (this.input.length > this.pos && this.input[this.pos] != "@") {
+ this.pos++;
+ }
+ if (this.input[this.pos] == "@") {
+ return true;
+ }
+ return false;
+ };
+
+ this.skipWhitespace = function (canCommentOut) {
+ while (this.isWhitespace(this.input[this.pos])) {
+ this.pos++;
+ }
+ if (this.input[this.pos] == "%" && canCommentOut == true) {
+ while (this.input[this.pos] != "\n") {
+ this.pos++;
+ }
+ this.skipWhitespace(canCommentOut);
+ }
+ };
+
+ this.value_braces = function () {
+ var bracecount = 0;
+ this.match("{", false);
+ var start = this.pos;
+ var escaped = false;
+ while (true) {
+ if (!escaped) {
+ if (this.input[this.pos] == "}") {
+ if (bracecount > 0) {
+ bracecount--;
+ } else {
+ var end = this.pos;
+ this.match("}", false);
+ return this.input.substring(start, end);
+ }
+ } else if (this.input[this.pos] == "{") {
+ bracecount++;
+ } else if (this.pos >= this.input.length - 1) {
+ throw "Unterminated value";
+ }
+ }
+ if (this.input[this.pos] == "\\" && escaped == false) escaped = true;
+ else escaped = false;
+ this.pos++;
+ }
+ };
+
+ this.value_comment = function () {
+ var str = "";
+ var brcktCnt = 0;
+ while (!(this.tryMatch("}", false) && brcktCnt == 0)) {
+ str = str + this.input[this.pos];
+ if (this.input[this.pos] == "{") brcktCnt++;
+ if (this.input[this.pos] == "}") brcktCnt--;
+ if (this.pos >= this.input.length - 1) {
+ throw "Unterminated value:" + this.input.substring(start);
+ }
+ this.pos++;
+ }
+ return str;
+ };
+
+ this.value_quotes = function () {
+ this.match('"', false);
+ var start = this.pos;
+ var escaped = false;
+ while (true) {
+ if (!escaped) {
+ if (this.input[this.pos] == '"') {
+ var end = this.pos;
+ this.match('"', false);
+ return this.input.substring(start, end);
+ } else if (this.pos >= this.input.length - 1) {
+ throw "Unterminated value:" + this.input.substring(start);
+ }
+ }
+ if (this.input[this.pos] == "\\" && escaped == false) escaped = true;
+ else escaped = false;
+ this.pos++;
+ }
+ };
+
+ this.single_value = function () {
+ var start = this.pos;
+ if (this.tryMatch("{")) {
+ return this.value_braces();
+ } else if (this.tryMatch('"')) {
+ return this.value_quotes();
+ } else {
+ var k = this.key();
+ if (k.match("^[0-9]+$")) return k;
+ else if (this.months.indexOf(k.toLowerCase()) >= 0) return k.toLowerCase();
+ else throw "Value expected:" + this.input.substring(start) + " for key: " + k;
+ }
+ };
+
+ this.value = function () {
+ var values = [];
+ values.push(this.single_value());
+ while (this.tryMatch("#")) {
+ this.match("#");
+ values.push(this.single_value());
+ }
+ return values.join("");
+ };
+
+ this.key = function () {
+ var start = this.pos;
+ while (true) {
+ if (this.pos >= this.input.length) {
+ throw "Runaway key";
+ } // а-яА-Я is Cyrillic
+ //console.log(this.input[this.pos]);
+ if (this.notKey.indexOf(this.input[this.pos]) >= 0) {
+ return this.input.substring(start, this.pos);
+ } else {
+ this.pos++;
+ }
+ }
+ };
+
+ this.key_equals_value = function () {
+ var key = this.key();
+ if (this.tryMatch("=")) {
+ this.match("=");
+ var val = this.value();
+ return [key, val];
+ } else {
+ throw "... = value expected, equals sign missing:" + this.input.substring(this.pos);
+ }
+ };
+
+ this.key_value_list = function () {
+ var kv = this.key_equals_value();
+ this.currentEntry["entryTags"] = {};
+ this.currentEntry["entryTags"][kv[0]] = kv[1];
+ while (this.tryMatch(",")) {
+ this.match(",");
+ // fixes problems with commas at the end of a list
+ if (this.tryMatch("}")) {
+ break;
+ }
+ kv = this.key_equals_value();
+ this.currentEntry["entryTags"][kv[0]] = kv[1];
+ }
+ };
+
+ this.entry_body = function (d) {
+ this.currentEntry = {};
+ this.currentEntry["citationKey"] = this.key();
+ this.currentEntry["entryType"] = d.substring(1);
+ this.match(",");
+ this.key_value_list();
+ this.entries.push(this.currentEntry);
+ };
+
+ this.directive = function () {
+ this.match("@");
+ return "@" + this.key();
+ };
+
+ this.preamble = function () {
+ this.currentEntry = {};
+ this.currentEntry["entryType"] = "PREAMBLE";
+ this.currentEntry["entry"] = this.value_comment();
+ this.entries.push(this.currentEntry);
+ };
+
+ this.comment = function () {
+ this.currentEntry = {};
+ this.currentEntry["entryType"] = "COMMENT";
+ this.currentEntry["entry"] = this.value_comment();
+ this.entries.push(this.currentEntry);
+ };
+
+ this.entry = function (d) {
+ this.entry_body(d);
+ };
+
+ this.bibtex = function () {
+ while (this.matchAt()) {
+ var d = this.directive();
+ this.match("{");
+ if (d == "@STRING") {
+ this.string();
+ } else if (d == "@PREAMBLE") {
+ this.preamble();
+ } else if (d == "@COMMENT") {
+ this.comment();
+ } else {
+ this.entry(d);
+ }
+ this.match("}");
+ }
+ };
+ }
+ exports.toJSON = function (bibtex) {
+ var b = new BibtexParser();
+ b.setInput(bibtex);
+ b.bibtex();
+ return b.entries;
+ };
+
+ /* added during hackathon don't hate on me */
+ exports.toBibtex = function (json) {
+ var out = "";
+ for (var i in json) {
+ out += "@" + json[i].entryType;
+ out += "{";
+ if (json[i].citationKey) out += json[i].citationKey + ", ";
+ if (json[i].entry) out += json[i].entry;
+ if (json[i].entryTags) {
+ var tags = "";
+ for (var jdx in json[i].entryTags) {
+ if (tags.length != 0) tags += ", ";
+ tags += jdx + "= {" + json[i].entryTags[jdx] + "}";
+ }
+ out += tags;
+ }
+ out += "}\n\n";
+ }
+ return out;
+ };
+ })(exports);
+
+ /* end bibtexParse */
+ });
+
+ // Copyright 2018 The Distill Template Authors
+
+ function normalizeTag(string) {
+ return string
+ .replace(/[\t\n ]+/g, " ")
+ .replace(/{\\["^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char)
+ .replace(/{\\([a-zA-Z])}/g, (full, char) => char);
+ }
+
+ function parseBibtex(bibtex) {
+ const bibliography = new Map();
+ const parsedEntries = bibtexParse.toJSON(bibtex);
+ for (const entry of parsedEntries) {
+ // normalize tags; note entryTags is an object, not Map
+ for (const [key, value] of Object.entries(entry.entryTags)) {
+ entry.entryTags[key.toLowerCase()] = normalizeTag(value);
+ }
+ entry.entryTags.type = entry.entryType;
+ // add to bibliography
+ bibliography.set(entry.citationKey, entry.entryTags);
+ }
+ return bibliography;
+ }
+
+ function serializeFrontmatterToBibtex(frontMatter) {
+ return `@article{${frontMatter.slug},
+ author = {${frontMatter.bibtexAuthors}},
+ title = {${frontMatter.title}},
+ journal = {${frontMatter.journal.title}},
+ year = {${frontMatter.publishedYear}},
+ note = {${frontMatter.url}},
+ doi = {${frontMatter.doi}}
+}`;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ class Bibliography extends HTMLElement {
+ static get is() {
+ return "d-bibliography";
+ }
+
+ constructor() {
+ super();
+
+ // set up mutation observer
+ const options = {
+ childList: true,
+ characterData: true,
+ subtree: true,
+ };
+ const observer = new MutationObserver((entries) => {
+ for (const entry of entries) {
+ if (entry.target.nodeName === "SCRIPT" || entry.type === "characterData") {
+ this.parseIfPossible();
+ }
+ }
+ });
+ observer.observe(this, options);
+ }
+
+ connectedCallback() {
+ requestAnimationFrame(() => {
+ this.parseIfPossible();
+ });
+ }
+
+ parseIfPossible() {
+ const scriptTag = this.querySelector("script");
+ if (!scriptTag) return;
+ if (scriptTag.type == "text/bibtex") {
+ const newBibtex = scriptTag.textContent;
+ if (this.bibtex !== newBibtex) {
+ this.bibtex = newBibtex;
+ const bibliography = parseBibtex(this.bibtex);
+ this.notify(bibliography);
+ }
+ } else if (scriptTag.type == "text/json") {
+ const bibliography = new Map(JSON.parse(scriptTag.textContent));
+ this.notify(bibliography);
+ } else {
+ console.warn("Unsupported bibliography script tag type: " + scriptTag.type);
+ }
+ }
+
+ notify(bibliography) {
+ const options = { detail: bibliography, bubbles: true };
+ const event = new CustomEvent("onBibliographyChanged", options);
+ this.dispatchEvent(event);
+ }
+
+ /* observe 'src' attribute */
+
+ static get observedAttributes() {
+ return ["src"];
+ }
+
+ receivedBibtex(event) {
+ const bibliography = parseBibtex(event.target.response);
+ this.notify(bibliography);
+ }
+
+ attributeChangedCallback(name, oldValue, newValue) {
+ var oReq = new XMLHttpRequest();
+ oReq.onload = (e) => this.receivedBibtex(e);
+ oReq.onerror = () => console.warn(`Could not load Bibtex! (tried ${newValue})`);
+ oReq.responseType = "text";
+ oReq.open("GET", newValue, true);
+ oReq.send();
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // import style from '../styles/d-byline.css';
+
+ function bylineTemplate(frontMatter) {
+ return `
+
+
+
Authors
+
Affiliations
+ ${frontMatter.authors
+ .map(
+ (author) => `
+
+ ${
+ author.personalURL
+ ? `
+ ${author.name} `
+ : `
+ ${author.name} `
+ }
+
+
+ ${author.affiliations
+ .map((affiliation) =>
+ affiliation.url
+ ? `${affiliation.name} `
+ : `${affiliation.name} `
+ )
+ .join(", ")}
+
+ `
+ )
+ .join("")}
+
+
+
Published
+ ${
+ frontMatter.publishedDate
+ ? `
+
${frontMatter.publishedMonth} ${frontMatter.publishedDay}, ${frontMatter.publishedYear}
`
+ : `
+
Not published yet.
`
+ }
+
+
+`;
+ }
+
+ class Byline extends HTMLElement {
+ static get is() {
+ return "d-byline";
+ }
+
+ set frontMatter(frontMatter) {
+ this.innerHTML = bylineTemplate(frontMatter);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$3 = Template(
+ "d-cite",
+ `
+
+
+
+
+
+
+
+`
+ );
+
+ class Cite extends T$3(HTMLElement) {
+ /* Lifecycle */
+ constructor() {
+ super();
+ this._numbers = [];
+ this._entries = [];
+ }
+
+ connectedCallback() {
+ this.outerSpan = this.root.querySelector("#citation-");
+ this.innerSpan = this.root.querySelector(".citation-number");
+ this.hoverBox = this.root.querySelector("d-hover-box");
+ window.customElements.whenDefined("d-hover-box").then(() => {
+ this.hoverBox.listen(this);
+ });
+ // in case this component got connected after values were set
+ if (this.numbers) {
+ this.displayNumbers(this.numbers);
+ }
+ if (this.entries) {
+ this.displayEntries(this.entries);
+ }
+ }
+
+ //TODO This causes an infinite loop on firefox with polyfills.
+ // This is only needed for interactive editing so no priority.
+ // disconnectedCallback() {
+ // const options = { detail: [this, this.keys], bubbles: true };
+ // const event = new CustomEvent('onCiteKeyRemoved', options);
+ // document.dispatchEvent(event);
+ // }
+
+ /* observe 'key' attribute */
+
+ static get observedAttributes() {
+ return ["key", "bibtex-key"];
+ }
+
+ attributeChangedCallback(name, oldValue, newValue) {
+ const eventName = oldValue ? "onCiteKeyChanged" : "onCiteKeyCreated";
+ const keys = newValue.split(",").map((k) => k.trim());
+ const options = { detail: [this, keys], bubbles: true };
+ const event = new CustomEvent(eventName, options);
+ document.dispatchEvent(event);
+ }
+
+ set key(value) {
+ this.setAttribute("key", value);
+ }
+
+ get key() {
+ return this.getAttribute("key") || this.getAttribute("bibtex-key");
+ }
+
+ get keys() {
+ const result = this.key.split(",");
+ console.log(result);
+ return result;
+ }
+
+ /* Setters & Rendering */
+
+ set numbers(numbers) {
+ this._numbers = numbers;
+ this.displayNumbers(numbers);
+ }
+
+ get numbers() {
+ return this._numbers;
+ }
+
+ displayNumbers(numbers) {
+ if (!this.innerSpan) return;
+ const numberStrings = numbers.map((index) => {
+ return index == -1 ? "?" : index + 1 + "";
+ });
+ const textContent = "[" + numberStrings.join(", ") + "]";
+ this.innerSpan.textContent = textContent;
+ }
+
+ set entries(entries) {
+ this._entries = entries;
+ this.displayEntries(entries);
+ }
+
+ get entries() {
+ return this._entries;
+ }
+
+ displayEntries(entries) {
+ if (!this.hoverBox) return;
+ this.hoverBox.innerHTML = `
+ ${entries
+ .map(hover_cite)
+ .map((html) => `${html} `)
+ .join("\n")}
+ `;
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const styles$1 = `
+d-citation-list {
+ contain: style;
+}
+
+d-citation-list .references {
+ grid-column: text;
+}
+
+d-citation-list .references .title {
+ font-weight: 500;
+}
+`;
+
+ function renderCitationList(element, entries, dom = document) {
+ if (entries.size > 0) {
+ element.style.display = "";
+ let list = element.querySelector(".references");
+ if (list) {
+ list.innerHTML = "";
+ } else {
+ const stylesTag = dom.createElement("style");
+ stylesTag.innerHTML = styles$1;
+ element.appendChild(stylesTag);
+
+ const heading = dom.createElement("h3");
+ heading.id = "references";
+ heading.textContent = "References";
+ element.appendChild(heading);
+
+ list = dom.createElement("ol");
+ list.id = "references-list";
+ list.className = "references";
+ element.appendChild(list);
+ }
+
+ for (const [key, entry] of entries) {
+ const listItem = dom.createElement("li");
+ listItem.id = key;
+ listItem.innerHTML = bibliography_cite(entry);
+ list.appendChild(listItem);
+ }
+ } else {
+ element.style.display = "none";
+ }
+ }
+
+ class CitationList extends HTMLElement {
+ static get is() {
+ return "d-citation-list";
+ }
+
+ connectedCallback() {
+ if (!this.hasAttribute("distill-prerendered")) {
+ this.style.display = "none";
+ }
+ }
+
+ set citations(citations) {
+ renderCitationList(this, citations);
+ }
+ }
+
+ var prism = createCommonjsModule(function (module) {
+ /* **********************************************
+ Begin prism-core.js
+ ********************************************** */
+
+ var _self =
+ typeof window !== "undefined"
+ ? window // if in browser
+ : typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope
+ ? self // if in worker
+ : {}; // if in node js
+
+ /**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ * MIT license http://www.opensource.org/licenses/mit-license.php/
+ * @author Lea Verou http://lea.verou.me
+ */
+
+ var Prism = (function (_self) {
+ // Private helper vars
+ var lang = /\blang(?:uage)?-([\w-]+)\b/i;
+ var uniqueId = 0;
+
+ var _ = {
+ manual: _self.Prism && _self.Prism.manual,
+ disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,
+ util: {
+ encode: function encode(tokens) {
+ if (tokens instanceof Token) {
+ return new Token(tokens.type, encode(tokens.content), tokens.alias);
+ } else if (Array.isArray(tokens)) {
+ return tokens.map(encode);
+ } else {
+ return tokens
+ .replace(/&/g, "&")
+ .replace(/" + env.content + "" + env.tag + ">";
+ };
+
+ /**
+ * @param {string} text
+ * @param {LinkedList} tokenList
+ * @param {any} grammar
+ * @param {LinkedListNode} startNode
+ * @param {number} startPos
+ * @param {boolean} [oneshot=false]
+ * @param {string} [target]
+ */
+ function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) {
+ for (var token in grammar) {
+ if (!grammar.hasOwnProperty(token) || !grammar[token]) {
+ continue;
+ }
+
+ var patterns = grammar[token];
+ patterns = Array.isArray(patterns) ? patterns : [patterns];
+
+ for (var j = 0; j < patterns.length; ++j) {
+ if (target && target == token + "," + j) {
+ return;
+ }
+
+ var pattern = patterns[j],
+ inside = pattern.inside,
+ lookbehind = !!pattern.lookbehind,
+ greedy = !!pattern.greedy,
+ lookbehindLength = 0,
+ alias = pattern.alias;
+
+ if (greedy && !pattern.pattern.global) {
+ // Without the global flag, lastIndex won't work
+ var flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];
+ pattern.pattern = RegExp(pattern.pattern.source, flags + "g");
+ }
+
+ pattern = pattern.pattern || pattern;
+
+ for (
+ // iterate the token list and keep track of the current token/string position
+ var currentNode = startNode.next, pos = startPos;
+ currentNode !== tokenList.tail;
+ pos += currentNode.value.length, currentNode = currentNode.next
+ ) {
+ var str = currentNode.value;
+
+ if (tokenList.length > text.length) {
+ // Something went terribly wrong, ABORT, ABORT!
+ return;
+ }
+
+ if (str instanceof Token) {
+ continue;
+ }
+
+ var removeCount = 1; // this is the to parameter of removeBetween
+
+ if (greedy && currentNode != tokenList.tail.prev) {
+ pattern.lastIndex = pos;
+ var match = pattern.exec(text);
+ if (!match) {
+ break;
+ }
+
+ var from = match.index + (lookbehind && match[1] ? match[1].length : 0);
+ var to = match.index + match[0].length;
+ var p = pos;
+
+ // find the node that contains the match
+ p += currentNode.value.length;
+ while (from >= p) {
+ currentNode = currentNode.next;
+ p += currentNode.value.length;
+ }
+ // adjust pos (and p)
+ p -= currentNode.value.length;
+ pos = p;
+
+ // the current node is a Token, then the match starts inside another Token, which is invalid
+ if (currentNode.value instanceof Token) {
+ continue;
+ }
+
+ // find the last node which is affected by this match
+ for (var k = currentNode; k !== tokenList.tail && (p < to || (typeof k.value === "string" && !k.prev.value.greedy)); k = k.next) {
+ removeCount++;
+ p += k.value.length;
+ }
+ removeCount--;
+
+ // replace with the new match
+ str = text.slice(pos, p);
+ match.index -= pos;
+ } else {
+ pattern.lastIndex = 0;
+
+ var match = pattern.exec(str);
+ }
+
+ if (!match) {
+ if (oneshot) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (lookbehind) {
+ lookbehindLength = match[1] ? match[1].length : 0;
+ }
+
+ var from = match.index + lookbehindLength,
+ match = match[0].slice(lookbehindLength),
+ to = from + match.length,
+ before = str.slice(0, from),
+ after = str.slice(to);
+
+ var removeFrom = currentNode.prev;
+
+ if (before) {
+ removeFrom = addAfter(tokenList, removeFrom, before);
+ pos += before.length;
+ }
+
+ removeRange(tokenList, removeFrom, removeCount);
+
+ var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy);
+ currentNode = addAfter(tokenList, removeFrom, wrapped);
+
+ if (after) {
+ addAfter(tokenList, currentNode, after);
+ }
+
+ if (removeCount > 1) matchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + "," + j);
+
+ if (oneshot) break;
+ }
+ }
+ }
+ }
+
+ /**
+ * @typedef LinkedListNode
+ * @property {T} value
+ * @property {LinkedListNode | null} prev The previous node.
+ * @property {LinkedListNode | null} next The next node.
+ * @template T
+ */
+
+ /**
+ * @template T
+ */
+ function LinkedList() {
+ /** @type {LinkedListNode} */
+ var head = { value: null, prev: null, next: null };
+ /** @type {LinkedListNode} */
+ var tail = { value: null, prev: head, next: null };
+ head.next = tail;
+
+ /** @type {LinkedListNode} */
+ this.head = head;
+ /** @type {LinkedListNode} */
+ this.tail = tail;
+ this.length = 0;
+ }
+
+ /**
+ * Adds a new node with the given value to the list.
+ * @param {LinkedList} list
+ * @param {LinkedListNode} node
+ * @param {T} value
+ * @returns {LinkedListNode} The added node.
+ * @template T
+ */
+ function addAfter(list, node, value) {
+ // assumes that node != list.tail && values.length >= 0
+ var next = node.next;
+
+ var newNode = { value: value, prev: node, next: next };
+ node.next = newNode;
+ next.prev = newNode;
+ list.length++;
+
+ return newNode;
+ }
+ /**
+ * Removes `count` nodes after the given node. The given node will not be removed.
+ * @param {LinkedList} list
+ * @param {LinkedListNode} node
+ * @param {number} count
+ * @template T
+ */
+ function removeRange(list, node, count) {
+ var next = node.next;
+ for (var i = 0; i < count && next !== list.tail; i++) {
+ next = next.next;
+ }
+ node.next = next;
+ next.prev = node;
+ list.length -= i;
+ }
+ /**
+ * @param {LinkedList} list
+ * @returns {T[]}
+ * @template T
+ */
+ function toArray(list) {
+ var array = [];
+ var node = list.head.next;
+ while (node !== list.tail) {
+ array.push(node.value);
+ node = node.next;
+ }
+ return array;
+ }
+
+ if (!_self.document) {
+ if (!_self.addEventListener) {
+ // in Node.js
+ return _;
+ }
+
+ if (!_.disableWorkerMessageHandler) {
+ // In worker
+ _self.addEventListener(
+ "message",
+ function (evt) {
+ var message = JSON.parse(evt.data),
+ lang = message.language,
+ code = message.code,
+ immediateClose = message.immediateClose;
+
+ _self.postMessage(_.highlight(code, _.languages[lang], lang));
+ if (immediateClose) {
+ _self.close();
+ }
+ },
+ false
+ );
+ }
+
+ return _;
+ }
+
+ //Get current script and highlight
+ var script = _.util.currentScript();
+
+ if (script) {
+ _.filename = script.src;
+
+ if (script.hasAttribute("data-manual")) {
+ _.manual = true;
+ }
+ }
+
+ function highlightAutomaticallyCallback() {
+ if (!_.manual) {
+ _.highlightAll();
+ }
+ }
+
+ if (!_.manual) {
+ // If the document state is "loading", then we'll use DOMContentLoaded.
+ // If the document state is "interactive" and the prism.js script is deferred, then we'll also use the
+ // DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they
+ // might take longer one animation frame to execute which can create a race condition where only some plugins have
+ // been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.
+ // See https://github.com/PrismJS/prism/issues/2102
+ var readyState = document.readyState;
+ if (readyState === "loading" || (readyState === "interactive" && script && script.defer)) {
+ document.addEventListener("DOMContentLoaded", highlightAutomaticallyCallback);
+ } else {
+ if (window.requestAnimationFrame) {
+ window.requestAnimationFrame(highlightAutomaticallyCallback);
+ } else {
+ window.setTimeout(highlightAutomaticallyCallback, 16);
+ }
+ }
+ }
+
+ return _;
+ })(_self);
+
+ if (module.exports) {
+ module.exports = Prism;
+ }
+
+ // hack for components to work correctly in node.js
+ if (typeof commonjsGlobal !== "undefined") {
+ commonjsGlobal.Prism = Prism;
+ }
+
+ /* **********************************************
+ Begin prism-markup.js
+ ********************************************** */
+
+ Prism.languages.markup = {
+ comment: //,
+ prolog: /<\?[\s\S]+?\?>/,
+ doctype: {
+ pattern: /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:(?!)*\]\s*)?>/i,
+ greedy: true,
+ },
+ cdata: //i,
+ tag: {
+ pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,
+ greedy: true,
+ inside: {
+ tag: {
+ pattern: /^<\/?[^\s>\/]+/i,
+ inside: {
+ punctuation: /^<\/?/,
+ namespace: /^[^\s>\/:]+:/,
+ },
+ },
+ "attr-value": {
+ pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,
+ inside: {
+ punctuation: [
+ /^=/,
+ {
+ pattern: /^(\s*)["']|["']$/,
+ lookbehind: true,
+ },
+ ],
+ },
+ },
+ punctuation: /\/?>/,
+ "attr-name": {
+ pattern: /[^\s>\/]+/,
+ inside: {
+ namespace: /^[^\s>\/:]+:/,
+ },
+ },
+ },
+ },
+ entity: /?[\da-z]{1,8};/i,
+ };
+
+ Prism.languages.markup["tag"].inside["attr-value"].inside["entity"] = Prism.languages.markup["entity"];
+
+ // Plugin to make entity title show the real entity, idea by Roman Komarov
+ Prism.hooks.add("wrap", function (env) {
+ if (env.type === "entity") {
+ env.attributes["title"] = env.content.replace(/&/, "&");
+ }
+ });
+
+ Object.defineProperty(Prism.languages.markup.tag, "addInlined", {
+ /**
+ * Adds an inlined language to markup.
+ *
+ * An example of an inlined language is CSS with `
+
+
+
+`
+ );
+
+ class Code extends Mutating(T$4(HTMLElement)) {
+ renderContent() {
+ // check if language can be highlighted
+ this.languageName = this.getAttribute("language");
+ if (!this.languageName) {
+ console.warn(
+ 'You need to provide a language attribute to your block to let us know how to highlight your code; e.g.:\n zeros = np.zeros(shape) .'
+ );
+ return;
+ }
+ const language = prism.languages[this.languageName];
+ if (language == undefined) {
+ console.warn(`Distill does not yet support highlighting your code block in "${this.languageName}'.`);
+ return;
+ }
+
+ let content = this.textContent;
+ const codeTag = this.shadowRoot.querySelector("#code-container");
+
+ if (this.hasAttribute("block")) {
+ // normalize the tab indents
+ content = content.replace(/\n/, "");
+ const tabs = content.match(/\s*/);
+ content = content.replace(new RegExp("\n" + tabs, "g"), "\n");
+ content = content.trim();
+ // wrap code block in pre tag if needed
+ if (codeTag.parentNode instanceof ShadowRoot) {
+ const preTag = document.createElement("pre");
+ this.shadowRoot.removeChild(codeTag);
+ preTag.appendChild(codeTag);
+ this.shadowRoot.appendChild(preTag);
+ }
+ }
+
+ codeTag.className = `language-${this.languageName}`;
+ codeTag.innerHTML = prism.highlight(content, language);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$5 = Template(
+ "d-footnote",
+ `
+
+
+
+
+
+
+
+
+
+
+`
+ );
+
+ class Footnote extends T$5(HTMLElement) {
+ constructor() {
+ super();
+
+ const options = {
+ childList: true,
+ characterData: true,
+ subtree: true,
+ };
+ const observer = new MutationObserver(this.notify);
+ observer.observe(this, options);
+ }
+
+ notify() {
+ const options = { detail: this, bubbles: true };
+ const event = new CustomEvent("onFootnoteChanged", options);
+ document.dispatchEvent(event);
+ }
+
+ connectedCallback() {
+ // listen and notify about changes to slotted content
+ // const slot = this.shadowRoot.querySelector('#slot');
+ // console.warn(slot.textContent);
+ // slot.addEventListener('slotchange', this.notify);
+ this.hoverBox = this.root.querySelector("d-hover-box");
+ window.customElements.whenDefined("d-hover-box").then(() => {
+ this.hoverBox.listen(this);
+ });
+ // create numeric ID
+ Footnote.currentFootnoteId += 1;
+ const IdString = Footnote.currentFootnoteId.toString();
+ this.root.host.id = "d-footnote-" + IdString;
+
+ // set up hidden hover box
+ const id = "dt-fn-hover-box-" + IdString;
+ this.hoverBox.id = id;
+
+ // set up visible footnote marker
+ const span = this.root.querySelector("#fn-");
+ span.setAttribute("id", "fn-" + IdString);
+ span.setAttribute("data-hover-ref", id);
+ span.textContent = IdString;
+ }
+ }
+
+ Footnote.currentFootnoteId = 0;
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$6 = Template(
+ "d-footnote-list",
+ `
+
+
+Footnotes
+
+`,
+ false
+ );
+
+ class FootnoteList extends T$6(HTMLElement) {
+ connectedCallback() {
+ super.connectedCallback();
+
+ this.list = this.root.querySelector("ol");
+ // footnotes list is initially hidden
+ this.root.style.display = "none";
+ // look through document and register existing footnotes
+ // Store.subscribeTo('footnotes', (footnote) => {
+ // this.renderFootnote(footnote);
+ // });
+ }
+
+ // TODO: could optimize this to accept individual footnotes?
+ set footnotes(footnotes) {
+ this.list.innerHTML = "";
+ if (footnotes.length) {
+ // ensure footnote list is visible
+ this.root.style.display = "";
+
+ for (const footnote of footnotes) {
+ // construct and append list item to show footnote
+ const listItem = document.createElement("li");
+ listItem.id = footnote.id + "-listing";
+ listItem.innerHTML = footnote.innerHTML;
+
+ const backlink = document.createElement("a");
+ backlink.setAttribute("class", "footnote-backlink");
+ backlink.textContent = "[↩]";
+ backlink.href = "#" + footnote.id;
+
+ listItem.appendChild(backlink);
+ this.list.appendChild(listItem);
+ }
+ } else {
+ // ensure footnote list is invisible
+ this.root.style.display = "none";
+ }
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$7 = Template(
+ "d-hover-box",
+ `
+
+
+
+`
+ );
+
+ class HoverBox extends T$7(HTMLElement) {
+ constructor() {
+ super();
+ }
+
+ connectedCallback() {}
+
+ listen(element) {
+ // console.log(element)
+ this.bindDivEvents(this);
+ this.bindTriggerEvents(element);
+ // this.style.display = "block";
+ }
+
+ bindDivEvents(element) {
+ // For mice, same behavior as hovering on links
+ element.addEventListener("mouseover", () => {
+ if (!this.visible) this.showAtNode(element);
+ this.stopTimeout();
+ });
+ element.addEventListener("mouseout", () => {
+ this.extendTimeout(500);
+ });
+ // Don't trigger body touchstart event when touching within box
+ element.addEventListener(
+ "touchstart",
+ (event) => {
+ event.stopPropagation();
+ },
+ { passive: true }
+ );
+ // Close box when touching outside box
+ document.body.addEventListener(
+ "touchstart",
+ () => {
+ this.hide();
+ },
+ { passive: true }
+ );
+ }
+
+ bindTriggerEvents(node) {
+ node.addEventListener("mouseover", () => {
+ if (!this.visible) {
+ this.showAtNode(node);
+ }
+ this.stopTimeout();
+ });
+
+ node.addEventListener("mouseout", () => {
+ this.extendTimeout(300);
+ });
+
+ node.addEventListener(
+ "touchstart",
+ (event) => {
+ if (this.visible) {
+ this.hide();
+ } else {
+ this.showAtNode(node);
+ }
+ // Don't trigger body touchstart event when touching link
+ event.stopPropagation();
+ },
+ { passive: true }
+ );
+ }
+
+ show(position) {
+ this.visible = true;
+ this.style.display = "block";
+ // 10px extra offset from element
+ this.style.top = Math.round(position[1] + 10) + "px";
+ }
+
+ showAtNode(node) {
+ // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
+ const bbox = node.getBoundingClientRect();
+ this.show([node.offsetLeft + bbox.width, node.offsetTop + bbox.height]);
+ }
+
+ hide() {
+ this.visible = false;
+ this.style.display = "none";
+ this.stopTimeout();
+ }
+
+ stopTimeout() {
+ if (this.timeout) {
+ clearTimeout(this.timeout);
+ }
+ }
+
+ extendTimeout(time) {
+ this.stopTimeout();
+ this.timeout = setTimeout(() => {
+ this.hide();
+ }, time);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ class Title extends HTMLElement {
+ static get is() {
+ return "d-title";
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$8 = Template(
+ "d-references",
+ `
+
+`,
+ false
+ );
+
+ class References extends T$8(HTMLElement) {}
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ class TOC extends HTMLElement {
+ static get is() {
+ return "d-toc";
+ }
+
+ connectedCallback() {
+ if (!this.getAttribute("prerendered")) {
+ window.onload = () => {
+ const article = document.querySelector("d-article");
+ const headings = article.querySelectorAll("h2, h3");
+ renderTOC(this, headings);
+ };
+ }
+ }
+ }
+
+ function renderTOC(element, headings) {
+ let ToC = `
+
+
+ Table of contents
+ `;
+
+ for (const el of headings) {
+ // should element be included in TOC?
+ const isInTitle = el.parentElement.tagName == "D-TITLE";
+ const isException = el.getAttribute("no-toc");
+ if (isInTitle || isException) continue;
+ // create TOC entry
+ const title = el.textContent;
+ const link = "#" + el.getAttribute("id");
+
+ let newLine = "" + '' + title + " " + " ";
+ if (el.tagName == "H3") {
+ newLine = "";
+ } else {
+ newLine += " ";
+ }
+ ToC += newLine;
+ }
+
+ ToC += " ";
+ element.innerHTML = ToC;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // Figure
+ //
+ // d-figure provides a state-machine of visibility events:
+ //
+ // scroll out of view
+ // +----------------+
+ // *do work here* | |
+ // +----------------+ +-+---------+ +-v---------+
+ // | ready +----> onscreen | | offscreen |
+ // +----------------+ +---------^-+ +---------+-+
+ // | |
+ // +----------------+
+ // scroll into view
+ //
+
+ class Figure extends HTMLElement {
+ static get is() {
+ return "d-figure";
+ }
+
+ static get readyQueue() {
+ if (!Figure._readyQueue) {
+ Figure._readyQueue = [];
+ }
+ return Figure._readyQueue;
+ }
+
+ static addToReadyQueue(figure) {
+ if (Figure.readyQueue.indexOf(figure) === -1) {
+ Figure.readyQueue.push(figure);
+ Figure.runReadyQueue();
+ }
+ }
+
+ static runReadyQueue() {
+ // console.log("Checking to run readyQueue, length: " + Figure.readyQueue.length + ", scrolling: " + Figure.isScrolling);
+ // if (Figure.isScrolling) return;
+ // console.log("Running ready Queue");
+ const figure = Figure.readyQueue
+ .sort((a, b) => a._seenOnScreen - b._seenOnScreen)
+ .filter((figure) => !figure._ready)
+ .pop();
+ if (figure) {
+ figure.ready();
+ requestAnimationFrame(Figure.runReadyQueue);
+ }
+ }
+
+ constructor() {
+ super();
+ // debugger
+ this._ready = false;
+ this._onscreen = false;
+ this._offscreen = true;
+ }
+
+ connectedCallback() {
+ this.loadsWhileScrolling = this.hasAttribute("loadsWhileScrolling");
+ Figure.marginObserver.observe(this);
+ Figure.directObserver.observe(this);
+ }
+
+ disconnectedCallback() {
+ Figure.marginObserver.unobserve(this);
+ Figure.directObserver.unobserve(this);
+ }
+
+ // We use two separate observers:
+ // One with an extra 1000px margin to warn if the viewpoint gets close,
+ // And one for the actual on/off screen events
+
+ static get marginObserver() {
+ if (!Figure._marginObserver) {
+ // if (!('IntersectionObserver' in window)) {
+ // throw new Error('no interscetionobbserver!');
+ // }
+ const viewportHeight = window.innerHeight;
+ const margin = Math.floor(2 * viewportHeight);
+ const options = {
+ rootMargin: margin + "px 0px " + margin + "px 0px",
+ threshold: 0.01,
+ };
+ const callback = Figure.didObserveMarginIntersection;
+ const observer = new IntersectionObserver(callback, options);
+ Figure._marginObserver = observer;
+ }
+ return Figure._marginObserver;
+ }
+
+ static didObserveMarginIntersection(entries) {
+ for (const entry of entries) {
+ const figure = entry.target;
+ if (entry.isIntersecting && !figure._ready) {
+ Figure.addToReadyQueue(figure);
+ }
+ }
+ }
+
+ static get directObserver() {
+ if (!Figure._directObserver) {
+ Figure._directObserver = new IntersectionObserver(Figure.didObserveDirectIntersection, {
+ rootMargin: "0px",
+ threshold: [0, 1.0],
+ });
+ }
+ return Figure._directObserver;
+ }
+
+ static didObserveDirectIntersection(entries) {
+ for (const entry of entries) {
+ const figure = entry.target;
+ if (entry.isIntersecting) {
+ figure._seenOnScreen = new Date();
+ // if (!figure._ready) { figure.ready(); }
+ if (figure._offscreen) {
+ figure.onscreen();
+ }
+ } else {
+ if (figure._onscreen) {
+ figure.offscreen();
+ }
+ }
+ }
+ }
+
+ // Notify listeners that registered late, too:
+
+ addEventListener(eventName, callback) {
+ super.addEventListener(eventName, callback);
+ // if we had already dispatched something while presumingly no one was listening, we do so again
+ // debugger
+ if (eventName === "ready") {
+ if (Figure.readyQueue.indexOf(this) !== -1) {
+ this._ready = false;
+ Figure.runReadyQueue();
+ }
+ }
+ if (eventName === "onscreen") {
+ this.onscreen();
+ }
+ }
+
+ // Custom Events
+
+ ready() {
+ // debugger
+ this._ready = true;
+ Figure.marginObserver.unobserve(this);
+ const event = new CustomEvent("ready");
+ this.dispatchEvent(event);
+ }
+
+ onscreen() {
+ this._onscreen = true;
+ this._offscreen = false;
+ const event = new CustomEvent("onscreen");
+ this.dispatchEvent(event);
+ }
+
+ offscreen() {
+ this._onscreen = false;
+ this._offscreen = true;
+ const event = new CustomEvent("offscreen");
+ this.dispatchEvent(event);
+ }
+ }
+
+ if (typeof window !== "undefined") {
+ Figure.isScrolling = false;
+ let timeout;
+ const resetTimer = () => {
+ Figure.isScrolling = true;
+ clearTimeout(timeout);
+ timeout = setTimeout(() => {
+ Figure.isScrolling = false;
+ Figure.runReadyQueue();
+ }, 500);
+ };
+ window.addEventListener("scroll", resetTimer, true);
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ // This overlay is not secure.
+ // It is only meant as a social deterrent.
+
+ const productionHostname = "distill.pub";
+ const T$9 = Template(
+ "d-interstitial",
+ `
+
+
+
+
+
This article is in review.
+
Do not share this URL or the contents of this article. Thank you!
+
+
Enter the password we shared with you as part of the review process to view the article.
+
+
+`
+ );
+
+ class Interstitial extends T$9(HTMLElement) {
+ connectedCallback() {
+ if (this.shouldRemoveSelf()) {
+ this.parentElement.removeChild(this);
+ } else {
+ const passwordInput = this.root.querySelector("#interstitial-password-input");
+ passwordInput.oninput = (event) => this.passwordChanged(event);
+ }
+ }
+
+ passwordChanged(event) {
+ const entered = event.target.value;
+ if (entered === this.password) {
+ console.log("Correct password entered.");
+ this.parentElement.removeChild(this);
+ if (typeof Storage !== "undefined") {
+ console.log("Saved that correct password was entered.");
+ localStorage.setItem(this.localStorageIdentifier(), "true");
+ }
+ }
+ }
+
+ shouldRemoveSelf() {
+ // should never be visible in production
+ if (window && window.location.hostname === productionHostname) {
+ console.warn("Interstitial found on production, hiding it.");
+ return true;
+ }
+ // should only have to enter password once
+ if (typeof Storage !== "undefined") {
+ if (localStorage.getItem(this.localStorageIdentifier()) === "true") {
+ console.log("Loaded that correct password was entered before; skipping interstitial.");
+ return true;
+ }
+ }
+ // otherwise, leave visible
+ return false;
+ }
+
+ localStorageIdentifier() {
+ const prefix = "distill-drafts";
+ const suffix = "interstitial-password-correct";
+ return prefix + (window ? window.location.pathname : "-") + suffix;
+ }
+ }
+
+ function ascending(a, b) {
+ return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+ }
+
+ function bisector(compare) {
+ if (compare.length === 1) compare = ascendingComparator(compare);
+ return {
+ left: function (a, x, lo, hi) {
+ if (lo == null) lo = 0;
+ if (hi == null) hi = a.length;
+ while (lo < hi) {
+ var mid = (lo + hi) >>> 1;
+ if (compare(a[mid], x) < 0) lo = mid + 1;
+ else hi = mid;
+ }
+ return lo;
+ },
+ right: function (a, x, lo, hi) {
+ if (lo == null) lo = 0;
+ if (hi == null) hi = a.length;
+ while (lo < hi) {
+ var mid = (lo + hi) >>> 1;
+ if (compare(a[mid], x) > 0) hi = mid;
+ else lo = mid + 1;
+ }
+ return lo;
+ },
+ };
+ }
+
+ function ascendingComparator(f) {
+ return function (d, x) {
+ return ascending(f(d), x);
+ };
+ }
+
+ var ascendingBisect = bisector(ascending);
+ var bisectRight = ascendingBisect.right;
+
+ function range(start, stop, step) {
+ (start = +start), (stop = +stop), (step = (n = arguments.length) < 2 ? ((stop = start), (start = 0), 1) : n < 3 ? 1 : +step);
+
+ var i = -1,
+ n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
+ range = new Array(n);
+
+ while (++i < n) {
+ range[i] = start + i * step;
+ }
+
+ return range;
+ }
+
+ var e10 = Math.sqrt(50),
+ e5 = Math.sqrt(10),
+ e2 = Math.sqrt(2);
+
+ function ticks(start, stop, count) {
+ var reverse,
+ i = -1,
+ n,
+ ticks,
+ step;
+
+ (stop = +stop), (start = +start), (count = +count);
+ if (start === stop && count > 0) return [start];
+ if ((reverse = stop < start)) (n = start), (start = stop), (stop = n);
+ if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
+
+ if (step > 0) {
+ start = Math.ceil(start / step);
+ stop = Math.floor(stop / step);
+ ticks = new Array((n = Math.ceil(stop - start + 1)));
+ while (++i < n) ticks[i] = (start + i) * step;
+ } else {
+ start = Math.floor(start * step);
+ stop = Math.ceil(stop * step);
+ ticks = new Array((n = Math.ceil(start - stop + 1)));
+ while (++i < n) ticks[i] = (start - i) / step;
+ }
+
+ if (reverse) ticks.reverse();
+
+ return ticks;
+ }
+
+ function tickIncrement(start, stop, count) {
+ var step = (stop - start) / Math.max(0, count),
+ power = Math.floor(Math.log(step) / Math.LN10),
+ error = step / Math.pow(10, power);
+ return power >= 0
+ ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
+ : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
+ }
+
+ function tickStep(start, stop, count) {
+ var step0 = Math.abs(stop - start) / Math.max(0, count),
+ step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
+ error = step0 / step1;
+ if (error >= e10) step1 *= 10;
+ else if (error >= e5) step1 *= 5;
+ else if (error >= e2) step1 *= 2;
+ return stop < start ? -step1 : step1;
+ }
+
+ function initRange(domain, range) {
+ switch (arguments.length) {
+ case 0:
+ break;
+ case 1:
+ this.range(domain);
+ break;
+ default:
+ this.range(range).domain(domain);
+ break;
+ }
+ return this;
+ }
+
+ function define(constructor, factory, prototype) {
+ constructor.prototype = factory.prototype = prototype;
+ prototype.constructor = constructor;
+ }
+
+ function extend(parent, definition) {
+ var prototype = Object.create(parent.prototype);
+ for (var key in definition) prototype[key] = definition[key];
+ return prototype;
+ }
+
+ function Color() {}
+
+ var darker = 0.7;
+ var brighter = 1 / darker;
+
+ var reI = "\\s*([+-]?\\d+)\\s*",
+ reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
+ reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
+ reHex = /^#([0-9a-f]{3,8})$/,
+ reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
+ reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
+ reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
+ reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"),
+ reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"),
+ reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
+
+ var named = {
+ aliceblue: 0xf0f8ff,
+ antiquewhite: 0xfaebd7,
+ aqua: 0x00ffff,
+ aquamarine: 0x7fffd4,
+ azure: 0xf0ffff,
+ beige: 0xf5f5dc,
+ bisque: 0xffe4c4,
+ black: 0x000000,
+ blanchedalmond: 0xffebcd,
+ blue: 0x0000ff,
+ blueviolet: 0x8a2be2,
+ brown: 0xa52a2a,
+ burlywood: 0xdeb887,
+ cadetblue: 0x5f9ea0,
+ chartreuse: 0x7fff00,
+ chocolate: 0xd2691e,
+ coral: 0xff7f50,
+ cornflowerblue: 0x6495ed,
+ cornsilk: 0xfff8dc,
+ crimson: 0xdc143c,
+ cyan: 0x00ffff,
+ darkblue: 0x00008b,
+ darkcyan: 0x008b8b,
+ darkgoldenrod: 0xb8860b,
+ darkgray: 0xa9a9a9,
+ darkgreen: 0x006400,
+ darkgrey: 0xa9a9a9,
+ darkkhaki: 0xbdb76b,
+ darkmagenta: 0x8b008b,
+ darkolivegreen: 0x556b2f,
+ darkorange: 0xff8c00,
+ darkorchid: 0x9932cc,
+ darkred: 0x8b0000,
+ darksalmon: 0xe9967a,
+ darkseagreen: 0x8fbc8f,
+ darkslateblue: 0x483d8b,
+ darkslategray: 0x2f4f4f,
+ darkslategrey: 0x2f4f4f,
+ darkturquoise: 0x00ced1,
+ darkviolet: 0x9400d3,
+ deeppink: 0xff1493,
+ deepskyblue: 0x00bfff,
+ dimgray: 0x696969,
+ dimgrey: 0x696969,
+ dodgerblue: 0x1e90ff,
+ firebrick: 0xb22222,
+ floralwhite: 0xfffaf0,
+ forestgreen: 0x228b22,
+ fuchsia: 0xff00ff,
+ gainsboro: 0xdcdcdc,
+ ghostwhite: 0xf8f8ff,
+ gold: 0xffd700,
+ goldenrod: 0xdaa520,
+ gray: 0x808080,
+ green: 0x008000,
+ greenyellow: 0xadff2f,
+ grey: 0x808080,
+ honeydew: 0xf0fff0,
+ hotpink: 0xff69b4,
+ indianred: 0xcd5c5c,
+ indigo: 0x4b0082,
+ ivory: 0xfffff0,
+ khaki: 0xf0e68c,
+ lavender: 0xe6e6fa,
+ lavenderblush: 0xfff0f5,
+ lawngreen: 0x7cfc00,
+ lemonchiffon: 0xfffacd,
+ lightblue: 0xadd8e6,
+ lightcoral: 0xf08080,
+ lightcyan: 0xe0ffff,
+ lightgoldenrodyellow: 0xfafad2,
+ lightgray: 0xd3d3d3,
+ lightgreen: 0x90ee90,
+ lightgrey: 0xd3d3d3,
+ lightpink: 0xffb6c1,
+ lightsalmon: 0xffa07a,
+ lightseagreen: 0x20b2aa,
+ lightskyblue: 0x87cefa,
+ lightslategray: 0x778899,
+ lightslategrey: 0x778899,
+ lightsteelblue: 0xb0c4de,
+ lightyellow: 0xffffe0,
+ lime: 0x00ff00,
+ limegreen: 0x32cd32,
+ linen: 0xfaf0e6,
+ magenta: 0xff00ff,
+ maroon: 0x800000,
+ mediumaquamarine: 0x66cdaa,
+ mediumblue: 0x0000cd,
+ mediumorchid: 0xba55d3,
+ mediumpurple: 0x9370db,
+ mediumseagreen: 0x3cb371,
+ mediumslateblue: 0x7b68ee,
+ mediumspringgreen: 0x00fa9a,
+ mediumturquoise: 0x48d1cc,
+ mediumvioletred: 0xc71585,
+ midnightblue: 0x191970,
+ mintcream: 0xf5fffa,
+ mistyrose: 0xffe4e1,
+ moccasin: 0xffe4b5,
+ navajowhite: 0xffdead,
+ navy: 0x000080,
+ oldlace: 0xfdf5e6,
+ olive: 0x808000,
+ olivedrab: 0x6b8e23,
+ orange: 0xffa500,
+ orangered: 0xff4500,
+ orchid: 0xda70d6,
+ palegoldenrod: 0xeee8aa,
+ palegreen: 0x98fb98,
+ paleturquoise: 0xafeeee,
+ palevioletred: 0xdb7093,
+ papayawhip: 0xffefd5,
+ peachpuff: 0xffdab9,
+ peru: 0xcd853f,
+ pink: 0xffc0cb,
+ plum: 0xdda0dd,
+ powderblue: 0xb0e0e6,
+ purple: 0x800080,
+ rebeccapurple: 0x663399,
+ red: 0xff0000,
+ rosybrown: 0xbc8f8f,
+ royalblue: 0x4169e1,
+ saddlebrown: 0x8b4513,
+ salmon: 0xfa8072,
+ sandybrown: 0xf4a460,
+ seagreen: 0x2e8b57,
+ seashell: 0xfff5ee,
+ sienna: 0xa0522d,
+ silver: 0xc0c0c0,
+ skyblue: 0x87ceeb,
+ slateblue: 0x6a5acd,
+ slategray: 0x708090,
+ slategrey: 0x708090,
+ snow: 0xfffafa,
+ springgreen: 0x00ff7f,
+ steelblue: 0x4682b4,
+ tan: 0xd2b48c,
+ teal: 0x008080,
+ thistle: 0xd8bfd8,
+ tomato: 0xff6347,
+ turquoise: 0x40e0d0,
+ violet: 0xee82ee,
+ wheat: 0xf5deb3,
+ white: 0xffffff,
+ whitesmoke: 0xf5f5f5,
+ yellow: 0xffff00,
+ yellowgreen: 0x9acd32,
+ };
+
+ define(Color, color, {
+ copy: function (channels) {
+ return Object.assign(new this.constructor(), this, channels);
+ },
+ displayable: function () {
+ return this.rgb().displayable();
+ },
+ hex: color_formatHex, // Deprecated! Use color.formatHex.
+ formatHex: color_formatHex,
+ formatHsl: color_formatHsl,
+ formatRgb: color_formatRgb,
+ toString: color_formatRgb,
+ });
+
+ function color_formatHex() {
+ return this.rgb().formatHex();
+ }
+
+ function color_formatHsl() {
+ return hslConvert(this).formatHsl();
+ }
+
+ function color_formatRgb() {
+ return this.rgb().formatRgb();
+ }
+
+ function color(format) {
+ var m, l;
+ format = (format + "").trim().toLowerCase();
+ return (m = reHex.exec(format))
+ ? ((l = m[1].length),
+ (m = parseInt(m[1], 16)),
+ l === 6
+ ? rgbn(m) // #ff0000
+ : l === 3
+ ? new Rgb(((m >> 8) & 0xf) | ((m >> 4) & 0xf0), ((m >> 4) & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
+ : l === 8
+ ? rgba((m >> 24) & 0xff, (m >> 16) & 0xff, (m >> 8) & 0xff, (m & 0xff) / 0xff) // #ff000000
+ : l === 4
+ ? rgba(
+ ((m >> 12) & 0xf) | ((m >> 8) & 0xf0),
+ ((m >> 8) & 0xf) | ((m >> 4) & 0xf0),
+ ((m >> 4) & 0xf) | (m & 0xf0),
+ (((m & 0xf) << 4) | (m & 0xf)) / 0xff
+ ) // #f000
+ : null) // invalid hex
+ : (m = reRgbInteger.exec(format))
+ ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+ : (m = reRgbPercent.exec(format))
+ ? new Rgb((m[1] * 255) / 100, (m[2] * 255) / 100, (m[3] * 255) / 100, 1) // rgb(100%, 0%, 0%)
+ : (m = reRgbaInteger.exec(format))
+ ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+ : (m = reRgbaPercent.exec(format))
+ ? rgba((m[1] * 255) / 100, (m[2] * 255) / 100, (m[3] * 255) / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+ : (m = reHslPercent.exec(format))
+ ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+ : (m = reHslaPercent.exec(format))
+ ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+ : named.hasOwnProperty(format)
+ ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
+ : format === "transparent"
+ ? new Rgb(NaN, NaN, NaN, 0)
+ : null;
+ }
+
+ function rgbn(n) {
+ return new Rgb((n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff, 1);
+ }
+
+ function rgba(r, g, b, a) {
+ if (a <= 0) r = g = b = NaN;
+ return new Rgb(r, g, b, a);
+ }
+
+ function rgbConvert(o) {
+ if (!(o instanceof Color)) o = color(o);
+ if (!o) return new Rgb();
+ o = o.rgb();
+ return new Rgb(o.r, o.g, o.b, o.opacity);
+ }
+
+ function rgb(r, g, b, opacity) {
+ return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+ }
+
+ function Rgb(r, g, b, opacity) {
+ this.r = +r;
+ this.g = +g;
+ this.b = +b;
+ this.opacity = +opacity;
+ }
+
+ define(
+ Rgb,
+ rgb,
+ extend(Color, {
+ brighter: function (k) {
+ k = k == null ? brighter : Math.pow(brighter, k);
+ return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+ },
+ darker: function (k) {
+ k = k == null ? darker : Math.pow(darker, k);
+ return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+ },
+ rgb: function () {
+ return this;
+ },
+ displayable: function () {
+ return (
+ -0.5 <= this.r &&
+ this.r < 255.5 &&
+ -0.5 <= this.g &&
+ this.g < 255.5 &&
+ -0.5 <= this.b &&
+ this.b < 255.5 &&
+ 0 <= this.opacity &&
+ this.opacity <= 1
+ );
+ },
+ hex: rgb_formatHex, // Deprecated! Use color.formatHex.
+ formatHex: rgb_formatHex,
+ formatRgb: rgb_formatRgb,
+ toString: rgb_formatRgb,
+ })
+ );
+
+ function rgb_formatHex() {
+ return "#" + hex(this.r) + hex(this.g) + hex(this.b);
+ }
+
+ function rgb_formatRgb() {
+ var a = this.opacity;
+ a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+ return (
+ (a === 1 ? "rgb(" : "rgba(") +
+ Math.max(0, Math.min(255, Math.round(this.r) || 0)) +
+ ", " +
+ Math.max(0, Math.min(255, Math.round(this.g) || 0)) +
+ ", " +
+ Math.max(0, Math.min(255, Math.round(this.b) || 0)) +
+ (a === 1 ? ")" : ", " + a + ")")
+ );
+ }
+
+ function hex(value) {
+ value = Math.max(0, Math.min(255, Math.round(value) || 0));
+ return (value < 16 ? "0" : "") + value.toString(16);
+ }
+
+ function hsla(h, s, l, a) {
+ if (a <= 0) h = s = l = NaN;
+ else if (l <= 0 || l >= 1) h = s = NaN;
+ else if (s <= 0) h = NaN;
+ return new Hsl(h, s, l, a);
+ }
+
+ function hslConvert(o) {
+ if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+ if (!(o instanceof Color)) o = color(o);
+ if (!o) return new Hsl();
+ if (o instanceof Hsl) return o;
+ o = o.rgb();
+ var r = o.r / 255,
+ g = o.g / 255,
+ b = o.b / 255,
+ min = Math.min(r, g, b),
+ max = Math.max(r, g, b),
+ h = NaN,
+ s = max - min,
+ l = (max + min) / 2;
+ if (s) {
+ if (r === max) h = (g - b) / s + (g < b) * 6;
+ else if (g === max) h = (b - r) / s + 2;
+ else h = (r - g) / s + 4;
+ s /= l < 0.5 ? max + min : 2 - max - min;
+ h *= 60;
+ } else {
+ s = l > 0 && l < 1 ? 0 : h;
+ }
+ return new Hsl(h, s, l, o.opacity);
+ }
+
+ function hsl(h, s, l, opacity) {
+ return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+ }
+
+ function Hsl(h, s, l, opacity) {
+ this.h = +h;
+ this.s = +s;
+ this.l = +l;
+ this.opacity = +opacity;
+ }
+
+ define(
+ Hsl,
+ hsl,
+ extend(Color, {
+ brighter: function (k) {
+ k = k == null ? brighter : Math.pow(brighter, k);
+ return new Hsl(this.h, this.s, this.l * k, this.opacity);
+ },
+ darker: function (k) {
+ k = k == null ? darker : Math.pow(darker, k);
+ return new Hsl(this.h, this.s, this.l * k, this.opacity);
+ },
+ rgb: function () {
+ var h = (this.h % 360) + (this.h < 0) * 360,
+ s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+ l = this.l,
+ m2 = l + (l < 0.5 ? l : 1 - l) * s,
+ m1 = 2 * l - m2;
+ return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity);
+ },
+ displayable: function () {
+ return ((0 <= this.s && this.s <= 1) || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;
+ },
+ formatHsl: function () {
+ var a = this.opacity;
+ a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+ return (
+ (a === 1 ? "hsl(" : "hsla(") +
+ (this.h || 0) +
+ ", " +
+ (this.s || 0) * 100 +
+ "%, " +
+ (this.l || 0) * 100 +
+ "%" +
+ (a === 1 ? ")" : ", " + a + ")")
+ );
+ },
+ })
+ );
+
+ /* From FvD 13.37, CSS Color Module Level 3 */
+ function hsl2rgb(h, m1, m2) {
+ return (h < 60 ? m1 + ((m2 - m1) * h) / 60 : h < 180 ? m2 : h < 240 ? m1 + ((m2 - m1) * (240 - h)) / 60 : m1) * 255;
+ }
+
+ var deg2rad = Math.PI / 180;
+ var rad2deg = 180 / Math.PI;
+
+ // https://observablehq.com/@mbostock/lab-and-rgb
+ var K = 18,
+ Xn = 0.96422,
+ Yn = 1,
+ Zn = 0.82521,
+ t0 = 4 / 29,
+ t1 = 6 / 29,
+ t2 = 3 * t1 * t1,
+ t3 = t1 * t1 * t1;
+
+ function labConvert(o) {
+ if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
+ if (o instanceof Hcl) return hcl2lab(o);
+ if (!(o instanceof Rgb)) o = rgbConvert(o);
+ var r = rgb2lrgb(o.r),
+ g = rgb2lrgb(o.g),
+ b = rgb2lrgb(o.b),
+ y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn),
+ x,
+ z;
+ if (r === g && g === b) x = z = y;
+ else {
+ x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
+ z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
+ }
+ return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
+ }
+
+ function lab(l, a, b, opacity) {
+ return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
+ }
+
+ function Lab(l, a, b, opacity) {
+ this.l = +l;
+ this.a = +a;
+ this.b = +b;
+ this.opacity = +opacity;
+ }
+
+ define(
+ Lab,
+ lab,
+ extend(Color, {
+ brighter: function (k) {
+ return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
+ },
+ darker: function (k) {
+ return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
+ },
+ rgb: function () {
+ var y = (this.l + 16) / 116,
+ x = isNaN(this.a) ? y : y + this.a / 500,
+ z = isNaN(this.b) ? y : y - this.b / 200;
+ x = Xn * lab2xyz(x);
+ y = Yn * lab2xyz(y);
+ z = Zn * lab2xyz(z);
+ return new Rgb(
+ lrgb2rgb(3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
+ lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.033454 * z),
+ lrgb2rgb(0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
+ this.opacity
+ );
+ },
+ })
+ );
+
+ function xyz2lab(t) {
+ return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
+ }
+
+ function lab2xyz(t) {
+ return t > t1 ? t * t * t : t2 * (t - t0);
+ }
+
+ function lrgb2rgb(x) {
+ return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
+ }
+
+ function rgb2lrgb(x) {
+ return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
+ }
+
+ function hclConvert(o) {
+ if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
+ if (!(o instanceof Lab)) o = labConvert(o);
+ if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);
+ var h = Math.atan2(o.b, o.a) * rad2deg;
+ return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
+ }
+
+ function hcl(h, c, l, opacity) {
+ return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+ }
+
+ function Hcl(h, c, l, opacity) {
+ this.h = +h;
+ this.c = +c;
+ this.l = +l;
+ this.opacity = +opacity;
+ }
+
+ function hcl2lab(o) {
+ if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);
+ var h = o.h * deg2rad;
+ return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
+ }
+
+ define(
+ Hcl,
+ hcl,
+ extend(Color, {
+ brighter: function (k) {
+ return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
+ },
+ darker: function (k) {
+ return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
+ },
+ rgb: function () {
+ return hcl2lab(this).rgb();
+ },
+ })
+ );
+
+ var A = -0.14861,
+ B = +1.78277,
+ C = -0.29227,
+ D = -0.90649,
+ E = +1.97294,
+ ED = E * D,
+ EB = E * B,
+ BC_DA = B * C - D * A;
+
+ function cubehelixConvert(o) {
+ if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
+ if (!(o instanceof Rgb)) o = rgbConvert(o);
+ var r = o.r / 255,
+ g = o.g / 255,
+ b = o.b / 255,
+ l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
+ bl = b - l,
+ k = (E * (g - l) - C * bl) / D,
+ s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
+ h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
+ return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
+ }
+
+ function cubehelix(h, s, l, opacity) {
+ return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
+ }
+
+ function Cubehelix(h, s, l, opacity) {
+ this.h = +h;
+ this.s = +s;
+ this.l = +l;
+ this.opacity = +opacity;
+ }
+
+ define(
+ Cubehelix,
+ cubehelix,
+ extend(Color, {
+ brighter: function (k) {
+ k = k == null ? brighter : Math.pow(brighter, k);
+ return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+ },
+ darker: function (k) {
+ k = k == null ? darker : Math.pow(darker, k);
+ return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+ },
+ rgb: function () {
+ var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
+ l = +this.l,
+ a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
+ cosh = Math.cos(h),
+ sinh = Math.sin(h);
+ return new Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);
+ },
+ })
+ );
+
+ function constant(x) {
+ return function () {
+ return x;
+ };
+ }
+
+ function linear(a, d) {
+ return function (t) {
+ return a + t * d;
+ };
+ }
+
+ function exponential(a, b, y) {
+ return (
+ (a = Math.pow(a, y)),
+ (b = Math.pow(b, y) - a),
+ (y = 1 / y),
+ function (t) {
+ return Math.pow(a + t * b, y);
+ }
+ );
+ }
+
+ function gamma(y) {
+ return (y = +y) === 1
+ ? nogamma
+ : function (a, b) {
+ return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);
+ };
+ }
+
+ function nogamma(a, b) {
+ var d = b - a;
+ return d ? linear(a, d) : constant(isNaN(a) ? b : a);
+ }
+
+ var rgb$1 = (function rgbGamma(y) {
+ var color = gamma(y);
+
+ function rgb$1(start, end) {
+ var r = color((start = rgb(start)).r, (end = rgb(end)).r),
+ g = color(start.g, end.g),
+ b = color(start.b, end.b),
+ opacity = nogamma(start.opacity, end.opacity);
+ return function (t) {
+ start.r = r(t);
+ start.g = g(t);
+ start.b = b(t);
+ start.opacity = opacity(t);
+ return start + "";
+ };
+ }
+
+ rgb$1.gamma = rgbGamma;
+
+ return rgb$1;
+ })(1);
+
+ function numberArray(a, b) {
+ if (!b) b = [];
+ var n = a ? Math.min(b.length, a.length) : 0,
+ c = b.slice(),
+ i;
+ return function (t) {
+ for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;
+ return c;
+ };
+ }
+
+ function isNumberArray(x) {
+ return ArrayBuffer.isView(x) && !(x instanceof DataView);
+ }
+
+ function genericArray(a, b) {
+ var nb = b ? b.length : 0,
+ na = a ? Math.min(nb, a.length) : 0,
+ x = new Array(na),
+ c = new Array(nb),
+ i;
+
+ for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);
+ for (; i < nb; ++i) c[i] = b[i];
+
+ return function (t) {
+ for (i = 0; i < na; ++i) c[i] = x[i](t);
+ return c;
+ };
+ }
+
+ function date(a, b) {
+ var d = new Date();
+ return (
+ (a = +a),
+ (b = +b),
+ function (t) {
+ return d.setTime(a * (1 - t) + b * t), d;
+ }
+ );
+ }
+
+ function interpolateNumber(a, b) {
+ return (
+ (a = +a),
+ (b = +b),
+ function (t) {
+ return a * (1 - t) + b * t;
+ }
+ );
+ }
+
+ function object(a, b) {
+ var i = {},
+ c = {},
+ k;
+
+ if (a === null || typeof a !== "object") a = {};
+ if (b === null || typeof b !== "object") b = {};
+
+ for (k in b) {
+ if (k in a) {
+ i[k] = interpolate(a[k], b[k]);
+ } else {
+ c[k] = b[k];
+ }
+ }
+
+ return function (t) {
+ for (k in i) c[k] = i[k](t);
+ return c;
+ };
+ }
+
+ var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
+ reB = new RegExp(reA.source, "g");
+
+ function zero(b) {
+ return function () {
+ return b;
+ };
+ }
+
+ function one(b) {
+ return function (t) {
+ return b(t) + "";
+ };
+ }
+
+ function string(a, b) {
+ var bi = (reA.lastIndex = reB.lastIndex = 0), // scan index for next number in b
+ am, // current match in a
+ bm, // current match in b
+ bs, // string preceding current number in b, if any
+ i = -1, // index in s
+ s = [], // string constants and placeholders
+ q = []; // number interpolators
+
+ // Coerce inputs to strings.
+ (a = a + ""), (b = b + "");
+
+ // Interpolate pairs of numbers in a & b.
+ while ((am = reA.exec(a)) && (bm = reB.exec(b))) {
+ if ((bs = bm.index) > bi) {
+ // a string precedes the next number in b
+ bs = b.slice(bi, bs);
+ if (s[i])
+ s[i] += bs; // coalesce with previous string
+ else s[++i] = bs;
+ }
+ if ((am = am[0]) === (bm = bm[0])) {
+ // numbers in a & b match
+ if (s[i])
+ s[i] += bm; // coalesce with previous string
+ else s[++i] = bm;
+ } else {
+ // interpolate non-matching numbers
+ s[++i] = null;
+ q.push({ i: i, x: interpolateNumber(am, bm) });
+ }
+ bi = reB.lastIndex;
+ }
+
+ // Add remains of b.
+ if (bi < b.length) {
+ bs = b.slice(bi);
+ if (s[i])
+ s[i] += bs; // coalesce with previous string
+ else s[++i] = bs;
+ }
+
+ // Special optimization for only a single match.
+ // Otherwise, interpolate each of the numbers and rejoin the string.
+ return s.length < 2
+ ? q[0]
+ ? one(q[0].x)
+ : zero(b)
+ : ((b = q.length),
+ function (t) {
+ for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+ return s.join("");
+ });
+ }
+
+ function interpolate(a, b) {
+ var t = typeof b,
+ c;
+ return b == null || t === "boolean"
+ ? constant(b)
+ : (t === "number"
+ ? interpolateNumber
+ : t === "string"
+ ? (c = color(b))
+ ? ((b = c), rgb$1)
+ : string
+ : b instanceof color
+ ? rgb$1
+ : b instanceof Date
+ ? date
+ : isNumberArray(b)
+ ? numberArray
+ : Array.isArray(b)
+ ? genericArray
+ : (typeof b.valueOf !== "function" && typeof b.toString !== "function") || isNaN(b)
+ ? object
+ : interpolateNumber)(a, b);
+ }
+
+ function interpolateRound(a, b) {
+ return (
+ (a = +a),
+ (b = +b),
+ function (t) {
+ return Math.round(a * (1 - t) + b * t);
+ }
+ );
+ }
+
+ function constant$1(x) {
+ return function () {
+ return x;
+ };
+ }
+
+ function number(x) {
+ return +x;
+ }
+
+ var unit = [0, 1];
+
+ function identity(x) {
+ return x;
+ }
+
+ function normalize(a, b) {
+ return (b -= a = +a)
+ ? function (x) {
+ return (x - a) / b;
+ }
+ : constant$1(isNaN(b) ? NaN : 0.5);
+ }
+
+ function clamper(a, b) {
+ var t;
+ if (a > b) (t = a), (a = b), (b = t);
+ return function (x) {
+ return Math.max(a, Math.min(b, x));
+ };
+ }
+
+ // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
+ // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
+ function bimap(domain, range, interpolate) {
+ var d0 = domain[0],
+ d1 = domain[1],
+ r0 = range[0],
+ r1 = range[1];
+ if (d1 < d0) (d0 = normalize(d1, d0)), (r0 = interpolate(r1, r0));
+ else (d0 = normalize(d0, d1)), (r0 = interpolate(r0, r1));
+ return function (x) {
+ return r0(d0(x));
+ };
+ }
+
+ function polymap(domain, range, interpolate) {
+ var j = Math.min(domain.length, range.length) - 1,
+ d = new Array(j),
+ r = new Array(j),
+ i = -1;
+
+ // Reverse descending domains.
+ if (domain[j] < domain[0]) {
+ domain = domain.slice().reverse();
+ range = range.slice().reverse();
+ }
+
+ while (++i < j) {
+ d[i] = normalize(domain[i], domain[i + 1]);
+ r[i] = interpolate(range[i], range[i + 1]);
+ }
+
+ return function (x) {
+ var i = bisectRight(domain, x, 1, j) - 1;
+ return r[i](d[i](x));
+ };
+ }
+
+ function copy(source, target) {
+ return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp()).unknown(source.unknown());
+ }
+
+ function transformer() {
+ var domain = unit,
+ range = unit,
+ interpolate$1 = interpolate,
+ transform,
+ untransform,
+ unknown,
+ clamp = identity,
+ piecewise,
+ output,
+ input;
+
+ function rescale() {
+ var n = Math.min(domain.length, range.length);
+ if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);
+ piecewise = n > 2 ? polymap : bimap;
+ output = input = null;
+ return scale;
+ }
+
+ function scale(x) {
+ return isNaN((x = +x)) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x)));
+ }
+
+ scale.invert = function (y) {
+ return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));
+ };
+
+ scale.domain = function (_) {
+ return arguments.length ? ((domain = Array.from(_, number)), rescale()) : domain.slice();
+ };
+
+ scale.range = function (_) {
+ return arguments.length ? ((range = Array.from(_)), rescale()) : range.slice();
+ };
+
+ scale.rangeRound = function (_) {
+ return (range = Array.from(_)), (interpolate$1 = interpolateRound), rescale();
+ };
+
+ scale.clamp = function (_) {
+ return arguments.length ? ((clamp = _ ? true : identity), rescale()) : clamp !== identity;
+ };
+
+ scale.interpolate = function (_) {
+ return arguments.length ? ((interpolate$1 = _), rescale()) : interpolate$1;
+ };
+
+ scale.unknown = function (_) {
+ return arguments.length ? ((unknown = _), scale) : unknown;
+ };
+
+ return function (t, u) {
+ (transform = t), (untransform = u);
+ return rescale();
+ };
+ }
+
+ function continuous() {
+ return transformer()(identity, identity);
+ }
+
+ // Computes the decimal coefficient and exponent of the specified number x with
+ // significant digits p, where x is positive and p is in [1, 21] or undefined.
+ // For example, formatDecimal(1.23) returns ["123", 0].
+ function formatDecimal(x, p) {
+ if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
+ var i,
+ coefficient = x.slice(0, i);
+
+ // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
+ // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
+ return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1)];
+ }
+
+ function exponent(x) {
+ return (x = formatDecimal(Math.abs(x))), x ? x[1] : NaN;
+ }
+
+ function formatGroup(grouping, thousands) {
+ return function (value, width) {
+ var i = value.length,
+ t = [],
+ j = 0,
+ g = grouping[0],
+ length = 0;
+
+ while (i > 0 && g > 0) {
+ if (length + g + 1 > width) g = Math.max(1, width - length);
+ t.push(value.substring((i -= g), i + g));
+ if ((length += g + 1) > width) break;
+ g = grouping[(j = (j + 1) % grouping.length)];
+ }
+
+ return t.reverse().join(thousands);
+ };
+ }
+
+ function formatNumerals(numerals) {
+ return function (value) {
+ return value.replace(/[0-9]/g, function (i) {
+ return numerals[+i];
+ });
+ };
+ }
+
+ // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
+ var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
+
+ function formatSpecifier(specifier) {
+ if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
+ var match;
+ return new FormatSpecifier({
+ fill: match[1],
+ align: match[2],
+ sign: match[3],
+ symbol: match[4],
+ zero: match[5],
+ width: match[6],
+ comma: match[7],
+ precision: match[8] && match[8].slice(1),
+ trim: match[9],
+ type: match[10],
+ });
+ }
+
+ formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
+
+ function FormatSpecifier(specifier) {
+ this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
+ this.align = specifier.align === undefined ? ">" : specifier.align + "";
+ this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
+ this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
+ this.zero = !!specifier.zero;
+ this.width = specifier.width === undefined ? undefined : +specifier.width;
+ this.comma = !!specifier.comma;
+ this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
+ this.trim = !!specifier.trim;
+ this.type = specifier.type === undefined ? "" : specifier.type + "";
+ }
+
+ FormatSpecifier.prototype.toString = function () {
+ return (
+ this.fill +
+ this.align +
+ this.sign +
+ this.symbol +
+ (this.zero ? "0" : "") +
+ (this.width === undefined ? "" : Math.max(1, this.width | 0)) +
+ (this.comma ? "," : "") +
+ (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) +
+ (this.trim ? "~" : "") +
+ this.type
+ );
+ };
+
+ // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
+ function formatTrim(s) {
+ out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
+ switch (s[i]) {
+ case ".":
+ i0 = i1 = i;
+ break;
+ case "0":
+ if (i0 === 0) i0 = i;
+ i1 = i;
+ break;
+ default:
+ if (!+s[i]) break out;
+ if (i0 > 0) i0 = 0;
+ break;
+ }
+ }
+ return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
+ }
+
+ var prefixExponent;
+
+ function formatPrefixAuto(x, p) {
+ var d = formatDecimal(x, p);
+ if (!d) return x + "";
+ var coefficient = d[0],
+ exponent = d[1],
+ i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
+ n = coefficient.length;
+ return i === n
+ ? coefficient
+ : i > n
+ ? coefficient + new Array(i - n + 1).join("0")
+ : i > 0
+ ? coefficient.slice(0, i) + "." + coefficient.slice(i)
+ : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
+ }
+
+ function formatRounded(x, p) {
+ var d = formatDecimal(x, p);
+ if (!d) return x + "";
+ var coefficient = d[0],
+ exponent = d[1];
+ return exponent < 0
+ ? "0." + new Array(-exponent).join("0") + coefficient
+ : coefficient.length > exponent + 1
+ ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
+ : coefficient + new Array(exponent - coefficient.length + 2).join("0");
+ }
+
+ var formatTypes = {
+ "%": function (x, p) {
+ return (x * 100).toFixed(p);
+ },
+ b: function (x) {
+ return Math.round(x).toString(2);
+ },
+ c: function (x) {
+ return x + "";
+ },
+ d: function (x) {
+ return Math.round(x).toString(10);
+ },
+ e: function (x, p) {
+ return x.toExponential(p);
+ },
+ f: function (x, p) {
+ return x.toFixed(p);
+ },
+ g: function (x, p) {
+ return x.toPrecision(p);
+ },
+ o: function (x) {
+ return Math.round(x).toString(8);
+ },
+ p: function (x, p) {
+ return formatRounded(x * 100, p);
+ },
+ r: formatRounded,
+ s: formatPrefixAuto,
+ X: function (x) {
+ return Math.round(x).toString(16).toUpperCase();
+ },
+ x: function (x) {
+ return Math.round(x).toString(16);
+ },
+ };
+
+ function identity$1(x) {
+ return x;
+ }
+
+ var map = Array.prototype.map,
+ prefixes = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
+
+ function formatLocale(locale) {
+ var group =
+ locale.grouping === undefined || locale.thousands === undefined
+ ? identity$1
+ : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),
+ currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
+ currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
+ decimal = locale.decimal === undefined ? "." : locale.decimal + "",
+ numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map.call(locale.numerals, String)),
+ percent = locale.percent === undefined ? "%" : locale.percent + "",
+ minus = locale.minus === undefined ? "-" : locale.minus + "",
+ nan = locale.nan === undefined ? "NaN" : locale.nan + "";
+
+ function newFormat(specifier) {
+ specifier = formatSpecifier(specifier);
+
+ var fill = specifier.fill,
+ align = specifier.align,
+ sign = specifier.sign,
+ symbol = specifier.symbol,
+ zero = specifier.zero,
+ width = specifier.width,
+ comma = specifier.comma,
+ precision = specifier.precision,
+ trim = specifier.trim,
+ type = specifier.type;
+
+ // The "n" type is an alias for ",g".
+ if (type === "n") (comma = true), (type = "g");
+ // The "" type, and any invalid type, is an alias for ".12~g".
+ else if (!formatTypes[type]) precision === undefined && (precision = 12), (trim = true), (type = "g");
+
+ // If zero fill is specified, padding goes after sign and before digits.
+ if (zero || (fill === "0" && align === "=")) (zero = true), (fill = "0"), (align = "=");
+
+ // Compute the prefix and suffix.
+ // For SI-prefix, the suffix is lazily computed.
+ var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
+ suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
+
+ // What format function should we use?
+ // Is this an integer type?
+ // Can this type generate exponential notation?
+ var formatType = formatTypes[type],
+ maybeSuffix = /[defgprs%]/.test(type);
+
+ // Set the default precision if not specified,
+ // or clamp the specified precision to the supported range.
+ // For significant precision, it must be in [1, 21].
+ // For fixed precision, it must be in [0, 20].
+ precision = precision === undefined ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
+
+ function format(value) {
+ var valuePrefix = prefix,
+ valueSuffix = suffix,
+ i,
+ n,
+ c;
+
+ if (type === "c") {
+ valueSuffix = formatType(value) + valueSuffix;
+ value = "";
+ } else {
+ value = +value;
+
+ // Determine the sign. -0 is not less than 0, but 1 / -0 is!
+ var valueNegative = value < 0 || 1 / value < 0;
+
+ // Perform the initial formatting.
+ value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
+
+ // Trim insignificant zeros.
+ if (trim) value = formatTrim(value);
+
+ // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
+ if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
+
+ // Compute the prefix and suffix.
+ valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
+ valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
+
+ // Break the formatted value into the integer “value” part that can be
+ // grouped, and fractional or exponential “suffix” part that is not.
+ if (maybeSuffix) {
+ (i = -1), (n = value.length);
+ while (++i < n) {
+ if (((c = value.charCodeAt(i)), 48 > c || c > 57)) {
+ valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
+ value = value.slice(0, i);
+ break;
+ }
+ }
+ }
+ }
+
+ // If the fill character is not "0", grouping is applied before padding.
+ if (comma && !zero) value = group(value, Infinity);
+
+ // Compute the padding.
+ var length = valuePrefix.length + value.length + valueSuffix.length,
+ padding = length < width ? new Array(width - length + 1).join(fill) : "";
+
+ // If the fill character is "0", grouping is applied after padding.
+ if (comma && zero) (value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity)), (padding = "");
+
+ // Reconstruct the final output based on the desired alignment.
+ switch (align) {
+ case "<":
+ value = valuePrefix + value + valueSuffix + padding;
+ break;
+ case "=":
+ value = valuePrefix + padding + value + valueSuffix;
+ break;
+ case "^":
+ value = padding.slice(0, (length = padding.length >> 1)) + valuePrefix + value + valueSuffix + padding.slice(length);
+ break;
+ default:
+ value = padding + valuePrefix + value + valueSuffix;
+ break;
+ }
+
+ return numerals(value);
+ }
+
+ format.toString = function () {
+ return specifier + "";
+ };
+
+ return format;
+ }
+
+ function formatPrefix(specifier, value) {
+ var f = newFormat(((specifier = formatSpecifier(specifier)), (specifier.type = "f"), specifier)),
+ e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
+ k = Math.pow(10, -e),
+ prefix = prefixes[8 + e / 3];
+ return function (value) {
+ return f(k * value) + prefix;
+ };
+ }
+
+ return {
+ format: newFormat,
+ formatPrefix: formatPrefix,
+ };
+ }
+
+ var locale;
+ var format;
+ var formatPrefix;
+
+ defaultLocale({
+ decimal: ".",
+ thousands: ",",
+ grouping: [3],
+ currency: ["$", ""],
+ minus: "-",
+ });
+
+ function defaultLocale(definition) {
+ locale = formatLocale(definition);
+ format = locale.format;
+ formatPrefix = locale.formatPrefix;
+ return locale;
+ }
+
+ function precisionFixed(step) {
+ return Math.max(0, -exponent(Math.abs(step)));
+ }
+
+ function precisionPrefix(step, value) {
+ return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));
+ }
+
+ function precisionRound(step, max) {
+ (step = Math.abs(step)), (max = Math.abs(max) - step);
+ return Math.max(0, exponent(max) - exponent(step)) + 1;
+ }
+
+ function tickFormat(start, stop, count, specifier) {
+ var step = tickStep(start, stop, count),
+ precision;
+ specifier = formatSpecifier(specifier == null ? ",f" : specifier);
+ switch (specifier.type) {
+ case "s": {
+ var value = Math.max(Math.abs(start), Math.abs(stop));
+ if (specifier.precision == null && !isNaN((precision = precisionPrefix(step, value)))) specifier.precision = precision;
+ return formatPrefix(specifier, value);
+ }
+ case "":
+ case "e":
+ case "g":
+ case "p":
+ case "r": {
+ if (specifier.precision == null && !isNaN((precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))))
+ specifier.precision = precision - (specifier.type === "e");
+ break;
+ }
+ case "f":
+ case "%": {
+ if (specifier.precision == null && !isNaN((precision = precisionFixed(step)))) specifier.precision = precision - (specifier.type === "%") * 2;
+ break;
+ }
+ }
+ return format(specifier);
+ }
+
+ function linearish(scale) {
+ var domain = scale.domain;
+
+ scale.ticks = function (count) {
+ var d = domain();
+ return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
+ };
+
+ scale.tickFormat = function (count, specifier) {
+ var d = domain();
+ return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
+ };
+
+ scale.nice = function (count) {
+ if (count == null) count = 10;
+
+ var d = domain(),
+ i0 = 0,
+ i1 = d.length - 1,
+ start = d[i0],
+ stop = d[i1],
+ step;
+
+ if (stop < start) {
+ (step = start), (start = stop), (stop = step);
+ (step = i0), (i0 = i1), (i1 = step);
+ }
+
+ step = tickIncrement(start, stop, count);
+
+ if (step > 0) {
+ start = Math.floor(start / step) * step;
+ stop = Math.ceil(stop / step) * step;
+ step = tickIncrement(start, stop, count);
+ } else if (step < 0) {
+ start = Math.ceil(start * step) / step;
+ stop = Math.floor(stop * step) / step;
+ step = tickIncrement(start, stop, count);
+ }
+
+ if (step > 0) {
+ d[i0] = Math.floor(start / step) * step;
+ d[i1] = Math.ceil(stop / step) * step;
+ domain(d);
+ } else if (step < 0) {
+ d[i0] = Math.ceil(start * step) / step;
+ d[i1] = Math.floor(stop * step) / step;
+ domain(d);
+ }
+
+ return scale;
+ };
+
+ return scale;
+ }
+
+ function linear$1() {
+ var scale = continuous();
+
+ scale.copy = function () {
+ return copy(scale, linear$1());
+ };
+
+ initRange.apply(scale, arguments);
+
+ return linearish(scale);
+ }
+
+ var t0$1 = new Date(),
+ t1$1 = new Date();
+
+ function newInterval(floori, offseti, count, field) {
+ function interval(date) {
+ return floori((date = arguments.length === 0 ? new Date() : new Date(+date))), date;
+ }
+
+ interval.floor = function (date) {
+ return floori((date = new Date(+date))), date;
+ };
+
+ interval.ceil = function (date) {
+ return floori((date = new Date(date - 1))), offseti(date, 1), floori(date), date;
+ };
+
+ interval.round = function (date) {
+ var d0 = interval(date),
+ d1 = interval.ceil(date);
+ return date - d0 < d1 - date ? d0 : d1;
+ };
+
+ interval.offset = function (date, step) {
+ return offseti((date = new Date(+date)), step == null ? 1 : Math.floor(step)), date;
+ };
+
+ interval.range = function (start, stop, step) {
+ var range = [],
+ previous;
+ start = interval.ceil(start);
+ step = step == null ? 1 : Math.floor(step);
+ if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
+ do range.push((previous = new Date(+start))), offseti(start, step), floori(start);
+ while (previous < start && start < stop);
+ return range;
+ };
+
+ interval.filter = function (test) {
+ return newInterval(
+ function (date) {
+ if (date >= date) while ((floori(date), !test(date))) date.setTime(date - 1);
+ },
+ function (date, step) {
+ if (date >= date) {
+ if (step < 0)
+ while (++step <= 0) {
+ while ((offseti(date, -1), !test(date))) {} // eslint-disable-line no-empty
+ }
+ else
+ while (--step >= 0) {
+ while ((offseti(date, +1), !test(date))) {} // eslint-disable-line no-empty
+ }
+ }
+ }
+ );
+ };
+
+ if (count) {
+ interval.count = function (start, end) {
+ t0$1.setTime(+start), t1$1.setTime(+end);
+ floori(t0$1), floori(t1$1);
+ return Math.floor(count(t0$1, t1$1));
+ };
+
+ interval.every = function (step) {
+ step = Math.floor(step);
+ return !isFinite(step) || !(step > 0)
+ ? null
+ : !(step > 1)
+ ? interval
+ : interval.filter(
+ field
+ ? function (d) {
+ return field(d) % step === 0;
+ }
+ : function (d) {
+ return interval.count(0, d) % step === 0;
+ }
+ );
+ };
+ }
+
+ return interval;
+ }
+
+ var millisecond = newInterval(
+ function () {
+ // noop
+ },
+ function (date, step) {
+ date.setTime(+date + step);
+ },
+ function (start, end) {
+ return end - start;
+ }
+ );
+
+ // An optimized implementation for this simple case.
+ millisecond.every = function (k) {
+ k = Math.floor(k);
+ if (!isFinite(k) || !(k > 0)) return null;
+ if (!(k > 1)) return millisecond;
+ return newInterval(
+ function (date) {
+ date.setTime(Math.floor(date / k) * k);
+ },
+ function (date, step) {
+ date.setTime(+date + step * k);
+ },
+ function (start, end) {
+ return (end - start) / k;
+ }
+ );
+ };
+
+ var durationSecond = 1e3;
+ var durationMinute = 6e4;
+ var durationHour = 36e5;
+ var durationDay = 864e5;
+ var durationWeek = 6048e5;
+
+ var second = newInterval(
+ function (date) {
+ date.setTime(date - date.getMilliseconds());
+ },
+ function (date, step) {
+ date.setTime(+date + step * durationSecond);
+ },
+ function (start, end) {
+ return (end - start) / durationSecond;
+ },
+ function (date) {
+ return date.getUTCSeconds();
+ }
+ );
+
+ var minute = newInterval(
+ function (date) {
+ date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
+ },
+ function (date, step) {
+ date.setTime(+date + step * durationMinute);
+ },
+ function (start, end) {
+ return (end - start) / durationMinute;
+ },
+ function (date) {
+ return date.getMinutes();
+ }
+ );
+
+ var hour = newInterval(
+ function (date) {
+ date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
+ },
+ function (date, step) {
+ date.setTime(+date + step * durationHour);
+ },
+ function (start, end) {
+ return (end - start) / durationHour;
+ },
+ function (date) {
+ return date.getHours();
+ }
+ );
+
+ var day = newInterval(
+ function (date) {
+ date.setHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setDate(date.getDate() + step);
+ },
+ function (start, end) {
+ return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
+ },
+ function (date) {
+ return date.getDate() - 1;
+ }
+ );
+
+ function weekday(i) {
+ return newInterval(
+ function (date) {
+ date.setDate(date.getDate() - ((date.getDay() + 7 - i) % 7));
+ date.setHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setDate(date.getDate() + step * 7);
+ },
+ function (start, end) {
+ return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
+ }
+ );
+ }
+
+ var sunday = weekday(0);
+ var monday = weekday(1);
+ var tuesday = weekday(2);
+ var wednesday = weekday(3);
+ var thursday = weekday(4);
+ var friday = weekday(5);
+ var saturday = weekday(6);
+
+ var month = newInterval(
+ function (date) {
+ date.setDate(1);
+ date.setHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setMonth(date.getMonth() + step);
+ },
+ function (start, end) {
+ return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
+ },
+ function (date) {
+ return date.getMonth();
+ }
+ );
+
+ var year = newInterval(
+ function (date) {
+ date.setMonth(0, 1);
+ date.setHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setFullYear(date.getFullYear() + step);
+ },
+ function (start, end) {
+ return end.getFullYear() - start.getFullYear();
+ },
+ function (date) {
+ return date.getFullYear();
+ }
+ );
+
+ // An optimized implementation for this simple case.
+ year.every = function (k) {
+ return !isFinite((k = Math.floor(k))) || !(k > 0)
+ ? null
+ : newInterval(
+ function (date) {
+ date.setFullYear(Math.floor(date.getFullYear() / k) * k);
+ date.setMonth(0, 1);
+ date.setHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setFullYear(date.getFullYear() + step * k);
+ }
+ );
+ };
+
+ var utcMinute = newInterval(
+ function (date) {
+ date.setUTCSeconds(0, 0);
+ },
+ function (date, step) {
+ date.setTime(+date + step * durationMinute);
+ },
+ function (start, end) {
+ return (end - start) / durationMinute;
+ },
+ function (date) {
+ return date.getUTCMinutes();
+ }
+ );
+
+ var utcHour = newInterval(
+ function (date) {
+ date.setUTCMinutes(0, 0, 0);
+ },
+ function (date, step) {
+ date.setTime(+date + step * durationHour);
+ },
+ function (start, end) {
+ return (end - start) / durationHour;
+ },
+ function (date) {
+ return date.getUTCHours();
+ }
+ );
+
+ var utcDay = newInterval(
+ function (date) {
+ date.setUTCHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setUTCDate(date.getUTCDate() + step);
+ },
+ function (start, end) {
+ return (end - start) / durationDay;
+ },
+ function (date) {
+ return date.getUTCDate() - 1;
+ }
+ );
+
+ function utcWeekday(i) {
+ return newInterval(
+ function (date) {
+ date.setUTCDate(date.getUTCDate() - ((date.getUTCDay() + 7 - i) % 7));
+ date.setUTCHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setUTCDate(date.getUTCDate() + step * 7);
+ },
+ function (start, end) {
+ return (end - start) / durationWeek;
+ }
+ );
+ }
+
+ var utcSunday = utcWeekday(0);
+ var utcMonday = utcWeekday(1);
+ var utcTuesday = utcWeekday(2);
+ var utcWednesday = utcWeekday(3);
+ var utcThursday = utcWeekday(4);
+ var utcFriday = utcWeekday(5);
+ var utcSaturday = utcWeekday(6);
+
+ var utcMonth = newInterval(
+ function (date) {
+ date.setUTCDate(1);
+ date.setUTCHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setUTCMonth(date.getUTCMonth() + step);
+ },
+ function (start, end) {
+ return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
+ },
+ function (date) {
+ return date.getUTCMonth();
+ }
+ );
+
+ var utcYear = newInterval(
+ function (date) {
+ date.setUTCMonth(0, 1);
+ date.setUTCHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setUTCFullYear(date.getUTCFullYear() + step);
+ },
+ function (start, end) {
+ return end.getUTCFullYear() - start.getUTCFullYear();
+ },
+ function (date) {
+ return date.getUTCFullYear();
+ }
+ );
+
+ // An optimized implementation for this simple case.
+ utcYear.every = function (k) {
+ return !isFinite((k = Math.floor(k))) || !(k > 0)
+ ? null
+ : newInterval(
+ function (date) {
+ date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
+ date.setUTCMonth(0, 1);
+ date.setUTCHours(0, 0, 0, 0);
+ },
+ function (date, step) {
+ date.setUTCFullYear(date.getUTCFullYear() + step * k);
+ }
+ );
+ };
+
+ function localDate(d) {
+ if (0 <= d.y && d.y < 100) {
+ var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
+ date.setFullYear(d.y);
+ return date;
+ }
+ return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
+ }
+
+ function utcDate(d) {
+ if (0 <= d.y && d.y < 100) {
+ var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
+ date.setUTCFullYear(d.y);
+ return date;
+ }
+ return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
+ }
+
+ function newDate(y, m, d) {
+ return { y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0 };
+ }
+
+ function formatLocale$1(locale) {
+ var locale_dateTime = locale.dateTime,
+ locale_date = locale.date,
+ locale_time = locale.time,
+ locale_periods = locale.periods,
+ locale_weekdays = locale.days,
+ locale_shortWeekdays = locale.shortDays,
+ locale_months = locale.months,
+ locale_shortMonths = locale.shortMonths;
+
+ var periodRe = formatRe(locale_periods),
+ periodLookup = formatLookup(locale_periods),
+ weekdayRe = formatRe(locale_weekdays),
+ weekdayLookup = formatLookup(locale_weekdays),
+ shortWeekdayRe = formatRe(locale_shortWeekdays),
+ shortWeekdayLookup = formatLookup(locale_shortWeekdays),
+ monthRe = formatRe(locale_months),
+ monthLookup = formatLookup(locale_months),
+ shortMonthRe = formatRe(locale_shortMonths),
+ shortMonthLookup = formatLookup(locale_shortMonths);
+
+ var formats = {
+ a: formatShortWeekday,
+ A: formatWeekday,
+ b: formatShortMonth,
+ B: formatMonth,
+ c: null,
+ d: formatDayOfMonth,
+ e: formatDayOfMonth,
+ f: formatMicroseconds,
+ H: formatHour24,
+ I: formatHour12,
+ j: formatDayOfYear,
+ L: formatMilliseconds,
+ m: formatMonthNumber,
+ M: formatMinutes,
+ p: formatPeriod,
+ q: formatQuarter,
+ Q: formatUnixTimestamp,
+ s: formatUnixTimestampSeconds,
+ S: formatSeconds,
+ u: formatWeekdayNumberMonday,
+ U: formatWeekNumberSunday,
+ V: formatWeekNumberISO,
+ w: formatWeekdayNumberSunday,
+ W: formatWeekNumberMonday,
+ x: null,
+ X: null,
+ y: formatYear,
+ Y: formatFullYear,
+ Z: formatZone,
+ "%": formatLiteralPercent,
+ };
+
+ var utcFormats = {
+ a: formatUTCShortWeekday,
+ A: formatUTCWeekday,
+ b: formatUTCShortMonth,
+ B: formatUTCMonth,
+ c: null,
+ d: formatUTCDayOfMonth,
+ e: formatUTCDayOfMonth,
+ f: formatUTCMicroseconds,
+ H: formatUTCHour24,
+ I: formatUTCHour12,
+ j: formatUTCDayOfYear,
+ L: formatUTCMilliseconds,
+ m: formatUTCMonthNumber,
+ M: formatUTCMinutes,
+ p: formatUTCPeriod,
+ q: formatUTCQuarter,
+ Q: formatUnixTimestamp,
+ s: formatUnixTimestampSeconds,
+ S: formatUTCSeconds,
+ u: formatUTCWeekdayNumberMonday,
+ U: formatUTCWeekNumberSunday,
+ V: formatUTCWeekNumberISO,
+ w: formatUTCWeekdayNumberSunday,
+ W: formatUTCWeekNumberMonday,
+ x: null,
+ X: null,
+ y: formatUTCYear,
+ Y: formatUTCFullYear,
+ Z: formatUTCZone,
+ "%": formatLiteralPercent,
+ };
+
+ var parses = {
+ a: parseShortWeekday,
+ A: parseWeekday,
+ b: parseShortMonth,
+ B: parseMonth,
+ c: parseLocaleDateTime,
+ d: parseDayOfMonth,
+ e: parseDayOfMonth,
+ f: parseMicroseconds,
+ H: parseHour24,
+ I: parseHour24,
+ j: parseDayOfYear,
+ L: parseMilliseconds,
+ m: parseMonthNumber,
+ M: parseMinutes,
+ p: parsePeriod,
+ q: parseQuarter,
+ Q: parseUnixTimestamp,
+ s: parseUnixTimestampSeconds,
+ S: parseSeconds,
+ u: parseWeekdayNumberMonday,
+ U: parseWeekNumberSunday,
+ V: parseWeekNumberISO,
+ w: parseWeekdayNumberSunday,
+ W: parseWeekNumberMonday,
+ x: parseLocaleDate,
+ X: parseLocaleTime,
+ y: parseYear,
+ Y: parseFullYear,
+ Z: parseZone,
+ "%": parseLiteralPercent,
+ };
+
+ // These recursive directive definitions must be deferred.
+ formats.x = newFormat(locale_date, formats);
+ formats.X = newFormat(locale_time, formats);
+ formats.c = newFormat(locale_dateTime, formats);
+ utcFormats.x = newFormat(locale_date, utcFormats);
+ utcFormats.X = newFormat(locale_time, utcFormats);
+ utcFormats.c = newFormat(locale_dateTime, utcFormats);
+
+ function newFormat(specifier, formats) {
+ return function (date) {
+ var string = [],
+ i = -1,
+ j = 0,
+ n = specifier.length,
+ c,
+ pad,
+ format;
+
+ if (!(date instanceof Date)) date = new Date(+date);
+
+ while (++i < n) {
+ if (specifier.charCodeAt(i) === 37) {
+ string.push(specifier.slice(j, i));
+ if ((pad = pads[(c = specifier.charAt(++i))]) != null) c = specifier.charAt(++i);
+ else pad = c === "e" ? " " : "0";
+ if ((format = formats[c])) c = format(date, pad);
+ string.push(c);
+ j = i + 1;
+ }
+ }
+
+ string.push(specifier.slice(j, i));
+ return string.join("");
+ };
+ }
+
+ function newParse(specifier, Z) {
+ return function (string) {
+ var d = newDate(1900, undefined, 1),
+ i = parseSpecifier(d, specifier, (string += ""), 0),
+ week,
+ day$1;
+ if (i != string.length) return null;
+
+ // If a UNIX timestamp is specified, return it.
+ if ("Q" in d) return new Date(d.Q);
+ if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));
+
+ // If this is utcParse, never use the local timezone.
+ if (Z && !("Z" in d)) d.Z = 0;
+
+ // The am-pm flag is 0 for AM, and 1 for PM.
+ if ("p" in d) d.H = (d.H % 12) + d.p * 12;
+
+ // If the month was not specified, inherit from the quarter.
+ if (d.m === undefined) d.m = "q" in d ? d.q : 0;
+
+ // Convert day-of-week and week-of-year to day-of-year.
+ if ("V" in d) {
+ if (d.V < 1 || d.V > 53) return null;
+ if (!("w" in d)) d.w = 1;
+ if ("Z" in d) {
+ (week = utcDate(newDate(d.y, 0, 1))), (day$1 = week.getUTCDay());
+ week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
+ week = utcDay.offset(week, (d.V - 1) * 7);
+ d.y = week.getUTCFullYear();
+ d.m = week.getUTCMonth();
+ d.d = week.getUTCDate() + ((d.w + 6) % 7);
+ } else {
+ (week = localDate(newDate(d.y, 0, 1))), (day$1 = week.getDay());
+ week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);
+ week = day.offset(week, (d.V - 1) * 7);
+ d.y = week.getFullYear();
+ d.m = week.getMonth();
+ d.d = week.getDate() + ((d.w + 6) % 7);
+ }
+ } else if ("W" in d || "U" in d) {
+ if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
+ day$1 = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
+ d.m = 0;
+ d.d = "W" in d ? ((d.w + 6) % 7) + d.W * 7 - ((day$1 + 5) % 7) : d.w + d.U * 7 - ((day$1 + 6) % 7);
+ }
+
+ // If a time zone is specified, all fields are interpreted as UTC and then
+ // offset according to the specified time zone.
+ if ("Z" in d) {
+ d.H += (d.Z / 100) | 0;
+ d.M += d.Z % 100;
+ return utcDate(d);
+ }
+
+ // Otherwise, all fields are in local time.
+ return localDate(d);
+ };
+ }
+
+ function parseSpecifier(d, specifier, string, j) {
+ var i = 0,
+ n = specifier.length,
+ m = string.length,
+ c,
+ parse;
+
+ while (i < n) {
+ if (j >= m) return -1;
+ c = specifier.charCodeAt(i++);
+ if (c === 37) {
+ c = specifier.charAt(i++);
+ parse = parses[c in pads ? specifier.charAt(i++) : c];
+ if (!parse || (j = parse(d, string, j)) < 0) return -1;
+ } else if (c != string.charCodeAt(j++)) {
+ return -1;
+ }
+ }
+
+ return j;
+ }
+
+ function parsePeriod(d, string, i) {
+ var n = periodRe.exec(string.slice(i));
+ return n ? ((d.p = periodLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
+ }
+
+ function parseShortWeekday(d, string, i) {
+ var n = shortWeekdayRe.exec(string.slice(i));
+ return n ? ((d.w = shortWeekdayLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
+ }
+
+ function parseWeekday(d, string, i) {
+ var n = weekdayRe.exec(string.slice(i));
+ return n ? ((d.w = weekdayLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
+ }
+
+ function parseShortMonth(d, string, i) {
+ var n = shortMonthRe.exec(string.slice(i));
+ return n ? ((d.m = shortMonthLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
+ }
+
+ function parseMonth(d, string, i) {
+ var n = monthRe.exec(string.slice(i));
+ return n ? ((d.m = monthLookup[n[0].toLowerCase()]), i + n[0].length) : -1;
+ }
+
+ function parseLocaleDateTime(d, string, i) {
+ return parseSpecifier(d, locale_dateTime, string, i);
+ }
+
+ function parseLocaleDate(d, string, i) {
+ return parseSpecifier(d, locale_date, string, i);
+ }
+
+ function parseLocaleTime(d, string, i) {
+ return parseSpecifier(d, locale_time, string, i);
+ }
+
+ function formatShortWeekday(d) {
+ return locale_shortWeekdays[d.getDay()];
+ }
+
+ function formatWeekday(d) {
+ return locale_weekdays[d.getDay()];
+ }
+
+ function formatShortMonth(d) {
+ return locale_shortMonths[d.getMonth()];
+ }
+
+ function formatMonth(d) {
+ return locale_months[d.getMonth()];
+ }
+
+ function formatPeriod(d) {
+ return locale_periods[+(d.getHours() >= 12)];
+ }
+
+ function formatQuarter(d) {
+ return 1 + ~~(d.getMonth() / 3);
+ }
+
+ function formatUTCShortWeekday(d) {
+ return locale_shortWeekdays[d.getUTCDay()];
+ }
+
+ function formatUTCWeekday(d) {
+ return locale_weekdays[d.getUTCDay()];
+ }
+
+ function formatUTCShortMonth(d) {
+ return locale_shortMonths[d.getUTCMonth()];
+ }
+
+ function formatUTCMonth(d) {
+ return locale_months[d.getUTCMonth()];
+ }
+
+ function formatUTCPeriod(d) {
+ return locale_periods[+(d.getUTCHours() >= 12)];
+ }
+
+ function formatUTCQuarter(d) {
+ return 1 + ~~(d.getUTCMonth() / 3);
+ }
+
+ return {
+ format: function (specifier) {
+ var f = newFormat((specifier += ""), formats);
+ f.toString = function () {
+ return specifier;
+ };
+ return f;
+ },
+ parse: function (specifier) {
+ var p = newParse((specifier += ""), false);
+ p.toString = function () {
+ return specifier;
+ };
+ return p;
+ },
+ utcFormat: function (specifier) {
+ var f = newFormat((specifier += ""), utcFormats);
+ f.toString = function () {
+ return specifier;
+ };
+ return f;
+ },
+ utcParse: function (specifier) {
+ var p = newParse((specifier += ""), true);
+ p.toString = function () {
+ return specifier;
+ };
+ return p;
+ },
+ };
+ }
+
+ var pads = { "-": "", _: " ", 0: "0" },
+ numberRe = /^\s*\d+/, // note: ignores next directive
+ percentRe = /^%/,
+ requoteRe = /[\\^$*+?|[\]().{}]/g;
+
+ function pad(value, fill, width) {
+ var sign = value < 0 ? "-" : "",
+ string = (sign ? -value : value) + "",
+ length = string.length;
+ return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
+ }
+
+ function requote(s) {
+ return s.replace(requoteRe, "\\$&");
+ }
+
+ function formatRe(names) {
+ return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
+ }
+
+ function formatLookup(names) {
+ var map = {},
+ i = -1,
+ n = names.length;
+ while (++i < n) map[names[i].toLowerCase()] = i;
+ return map;
+ }
+
+ function parseWeekdayNumberSunday(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 1));
+ return n ? ((d.w = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseWeekdayNumberMonday(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 1));
+ return n ? ((d.u = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseWeekNumberSunday(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.U = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseWeekNumberISO(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.V = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseWeekNumberMonday(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.W = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseFullYear(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 4));
+ return n ? ((d.y = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseYear(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000)), i + n[0].length) : -1;
+ }
+
+ function parseZone(d, string, i) {
+ var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
+ return n ? ((d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00"))), i + n[0].length) : -1;
+ }
+
+ function parseQuarter(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 1));
+ return n ? ((d.q = n[0] * 3 - 3), i + n[0].length) : -1;
+ }
+
+ function parseMonthNumber(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.m = n[0] - 1), i + n[0].length) : -1;
+ }
+
+ function parseDayOfMonth(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.d = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseDayOfYear(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 3));
+ return n ? ((d.m = 0), (d.d = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseHour24(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.H = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseMinutes(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.M = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseSeconds(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 2));
+ return n ? ((d.S = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseMilliseconds(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 3));
+ return n ? ((d.L = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseMicroseconds(d, string, i) {
+ var n = numberRe.exec(string.slice(i, i + 6));
+ return n ? ((d.L = Math.floor(n[0] / 1000)), i + n[0].length) : -1;
+ }
+
+ function parseLiteralPercent(d, string, i) {
+ var n = percentRe.exec(string.slice(i, i + 1));
+ return n ? i + n[0].length : -1;
+ }
+
+ function parseUnixTimestamp(d, string, i) {
+ var n = numberRe.exec(string.slice(i));
+ return n ? ((d.Q = +n[0]), i + n[0].length) : -1;
+ }
+
+ function parseUnixTimestampSeconds(d, string, i) {
+ var n = numberRe.exec(string.slice(i));
+ return n ? ((d.s = +n[0]), i + n[0].length) : -1;
+ }
+
+ function formatDayOfMonth(d, p) {
+ return pad(d.getDate(), p, 2);
+ }
+
+ function formatHour24(d, p) {
+ return pad(d.getHours(), p, 2);
+ }
+
+ function formatHour12(d, p) {
+ return pad(d.getHours() % 12 || 12, p, 2);
+ }
+
+ function formatDayOfYear(d, p) {
+ return pad(1 + day.count(year(d), d), p, 3);
+ }
+
+ function formatMilliseconds(d, p) {
+ return pad(d.getMilliseconds(), p, 3);
+ }
+
+ function formatMicroseconds(d, p) {
+ return formatMilliseconds(d, p) + "000";
+ }
+
+ function formatMonthNumber(d, p) {
+ return pad(d.getMonth() + 1, p, 2);
+ }
+
+ function formatMinutes(d, p) {
+ return pad(d.getMinutes(), p, 2);
+ }
+
+ function formatSeconds(d, p) {
+ return pad(d.getSeconds(), p, 2);
+ }
+
+ function formatWeekdayNumberMonday(d) {
+ var day = d.getDay();
+ return day === 0 ? 7 : day;
+ }
+
+ function formatWeekNumberSunday(d, p) {
+ return pad(sunday.count(year(d) - 1, d), p, 2);
+ }
+
+ function formatWeekNumberISO(d, p) {
+ var day = d.getDay();
+ d = day >= 4 || day === 0 ? thursday(d) : thursday.ceil(d);
+ return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);
+ }
+
+ function formatWeekdayNumberSunday(d) {
+ return d.getDay();
+ }
+
+ function formatWeekNumberMonday(d, p) {
+ return pad(monday.count(year(d) - 1, d), p, 2);
+ }
+
+ function formatYear(d, p) {
+ return pad(d.getFullYear() % 100, p, 2);
+ }
+
+ function formatFullYear(d, p) {
+ return pad(d.getFullYear() % 10000, p, 4);
+ }
+
+ function formatZone(d) {
+ var z = d.getTimezoneOffset();
+ return (z > 0 ? "-" : ((z *= -1), "+")) + pad((z / 60) | 0, "0", 2) + pad(z % 60, "0", 2);
+ }
+
+ function formatUTCDayOfMonth(d, p) {
+ return pad(d.getUTCDate(), p, 2);
+ }
+
+ function formatUTCHour24(d, p) {
+ return pad(d.getUTCHours(), p, 2);
+ }
+
+ function formatUTCHour12(d, p) {
+ return pad(d.getUTCHours() % 12 || 12, p, 2);
+ }
+
+ function formatUTCDayOfYear(d, p) {
+ return pad(1 + utcDay.count(utcYear(d), d), p, 3);
+ }
+
+ function formatUTCMilliseconds(d, p) {
+ return pad(d.getUTCMilliseconds(), p, 3);
+ }
+
+ function formatUTCMicroseconds(d, p) {
+ return formatUTCMilliseconds(d, p) + "000";
+ }
+
+ function formatUTCMonthNumber(d, p) {
+ return pad(d.getUTCMonth() + 1, p, 2);
+ }
+
+ function formatUTCMinutes(d, p) {
+ return pad(d.getUTCMinutes(), p, 2);
+ }
+
+ function formatUTCSeconds(d, p) {
+ return pad(d.getUTCSeconds(), p, 2);
+ }
+
+ function formatUTCWeekdayNumberMonday(d) {
+ var dow = d.getUTCDay();
+ return dow === 0 ? 7 : dow;
+ }
+
+ function formatUTCWeekNumberSunday(d, p) {
+ return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);
+ }
+
+ function formatUTCWeekNumberISO(d, p) {
+ var day = d.getUTCDay();
+ d = day >= 4 || day === 0 ? utcThursday(d) : utcThursday.ceil(d);
+ return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
+ }
+
+ function formatUTCWeekdayNumberSunday(d) {
+ return d.getUTCDay();
+ }
+
+ function formatUTCWeekNumberMonday(d, p) {
+ return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);
+ }
+
+ function formatUTCYear(d, p) {
+ return pad(d.getUTCFullYear() % 100, p, 2);
+ }
+
+ function formatUTCFullYear(d, p) {
+ return pad(d.getUTCFullYear() % 10000, p, 4);
+ }
+
+ function formatUTCZone() {
+ return "+0000";
+ }
+
+ function formatLiteralPercent() {
+ return "%";
+ }
+
+ function formatUnixTimestamp(d) {
+ return +d;
+ }
+
+ function formatUnixTimestampSeconds(d) {
+ return Math.floor(+d / 1000);
+ }
+
+ var locale$1;
+ var timeFormat;
+ var timeParse;
+ var utcFormat;
+ var utcParse;
+
+ defaultLocale$1({
+ dateTime: "%x, %X",
+ date: "%-m/%-d/%Y",
+ time: "%-I:%M:%S %p",
+ periods: ["AM", "PM"],
+ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ });
+
+ function defaultLocale$1(definition) {
+ locale$1 = formatLocale$1(definition);
+ timeFormat = locale$1.format;
+ timeParse = locale$1.parse;
+ utcFormat = locale$1.utcFormat;
+ utcParse = locale$1.utcParse;
+ return locale$1;
+ }
+
+ var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
+
+ function formatIsoNative(date) {
+ return date.toISOString();
+ }
+
+ var formatIso = Date.prototype.toISOString ? formatIsoNative : utcFormat(isoSpecifier);
+
+ function parseIsoNative(string) {
+ var date = new Date(string);
+ return isNaN(date) ? null : date;
+ }
+
+ var parseIso = +new Date("2000-01-01T00:00:00.000Z") ? parseIsoNative : utcParse(isoSpecifier);
+
+ var noop = { value: function () {} };
+
+ function dispatch() {
+ for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
+ if (!(t = arguments[i] + "") || t in _ || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
+ _[t] = [];
+ }
+ return new Dispatch(_);
+ }
+
+ function Dispatch(_) {
+ this._ = _;
+ }
+
+ function parseTypenames(typenames, types) {
+ return typenames
+ .trim()
+ .split(/^|\s+/)
+ .map(function (t) {
+ var name = "",
+ i = t.indexOf(".");
+ if (i >= 0) (name = t.slice(i + 1)), (t = t.slice(0, i));
+ if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
+ return { type: t, name: name };
+ });
+ }
+
+ Dispatch.prototype = dispatch.prototype = {
+ constructor: Dispatch,
+ on: function (typename, callback) {
+ var _ = this._,
+ T = parseTypenames(typename + "", _),
+ t,
+ i = -1,
+ n = T.length;
+
+ // If no callback was specified, return the callback of the given type and name.
+ if (arguments.length < 2) {
+ while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
+ return;
+ }
+
+ // If a type was specified, set the callback for the given type and name.
+ // Otherwise, if a null callback was specified, remove callbacks of the given name.
+ if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
+ while (++i < n) {
+ if ((t = (typename = T[i]).type)) _[t] = set(_[t], typename.name, callback);
+ else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
+ }
+
+ return this;
+ },
+ copy: function () {
+ var copy = {},
+ _ = this._;
+ for (var t in _) copy[t] = _[t].slice();
+ return new Dispatch(copy);
+ },
+ call: function (type, that) {
+ if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
+ if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+ for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+ },
+ apply: function (type, that, args) {
+ if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+ for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+ },
+ };
+
+ function get(type, name) {
+ for (var i = 0, n = type.length, c; i < n; ++i) {
+ if ((c = type[i]).name === name) {
+ return c.value;
+ }
+ }
+ }
+
+ function set(type, name, callback) {
+ for (var i = 0, n = type.length; i < n; ++i) {
+ if (type[i].name === name) {
+ (type[i] = noop), (type = type.slice(0, i).concat(type.slice(i + 1)));
+ break;
+ }
+ }
+ if (callback != null) type.push({ name: name, value: callback });
+ return type;
+ }
+
+ var xhtml = "http://www.w3.org/1999/xhtml";
+
+ var namespaces = {
+ svg: "http://www.w3.org/2000/svg",
+ xhtml: xhtml,
+ xlink: "http://www.w3.org/1999/xlink",
+ xml: "http://www.w3.org/XML/1998/namespace",
+ xmlns: "http://www.w3.org/2000/xmlns/",
+ };
+
+ function namespace(name) {
+ var prefix = (name += ""),
+ i = prefix.indexOf(":");
+ if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
+ return namespaces.hasOwnProperty(prefix) ? { space: namespaces[prefix], local: name } : name;
+ }
+
+ function creatorInherit(name) {
+ return function () {
+ var document = this.ownerDocument,
+ uri = this.namespaceURI;
+ return uri === xhtml && document.documentElement.namespaceURI === xhtml ? document.createElement(name) : document.createElementNS(uri, name);
+ };
+ }
+
+ function creatorFixed(fullname) {
+ return function () {
+ return this.ownerDocument.createElementNS(fullname.space, fullname.local);
+ };
+ }
+
+ function creator(name) {
+ var fullname = namespace(name);
+ return (fullname.local ? creatorFixed : creatorInherit)(fullname);
+ }
+
+ function none() {}
+
+ function selector(selector) {
+ return selector == null
+ ? none
+ : function () {
+ return this.querySelector(selector);
+ };
+ }
+
+ function selection_select(select) {
+ if (typeof select !== "function") select = selector(select);
+
+ for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, subgroup = (subgroups[j] = new Array(n)), node, subnode, i = 0; i < n; ++i) {
+ if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
+ if ("__data__" in node) subnode.__data__ = node.__data__;
+ subgroup[i] = subnode;
+ }
+ }
+ }
+
+ return new Selection(subgroups, this._parents);
+ }
+
+ function empty() {
+ return [];
+ }
+
+ function selectorAll(selector) {
+ return selector == null
+ ? empty
+ : function () {
+ return this.querySelectorAll(selector);
+ };
+ }
+
+ function selection_selectAll(select) {
+ if (typeof select !== "function") select = selectorAll(select);
+
+ for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if ((node = group[i])) {
+ subgroups.push(select.call(node, node.__data__, i, group));
+ parents.push(node);
+ }
+ }
+ }
+
+ return new Selection(subgroups, parents);
+ }
+
+ function matcher(selector) {
+ return function () {
+ return this.matches(selector);
+ };
+ }
+
+ function selection_filter(match) {
+ if (typeof match !== "function") match = matcher(match);
+
+ for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, subgroup = (subgroups[j] = []), node, i = 0; i < n; ++i) {
+ if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+ subgroup.push(node);
+ }
+ }
+ }
+
+ return new Selection(subgroups, this._parents);
+ }
+
+ function sparse(update) {
+ return new Array(update.length);
+ }
+
+ function selection_enter() {
+ return new Selection(this._enter || this._groups.map(sparse), this._parents);
+ }
+
+ function EnterNode(parent, datum) {
+ this.ownerDocument = parent.ownerDocument;
+ this.namespaceURI = parent.namespaceURI;
+ this._next = null;
+ this._parent = parent;
+ this.__data__ = datum;
+ }
+
+ EnterNode.prototype = {
+ constructor: EnterNode,
+ appendChild: function (child) {
+ return this._parent.insertBefore(child, this._next);
+ },
+ insertBefore: function (child, next) {
+ return this._parent.insertBefore(child, next);
+ },
+ querySelector: function (selector) {
+ return this._parent.querySelector(selector);
+ },
+ querySelectorAll: function (selector) {
+ return this._parent.querySelectorAll(selector);
+ },
+ };
+
+ function constant$2(x) {
+ return function () {
+ return x;
+ };
+ }
+
+ var keyPrefix = "$"; // Protect against keys like “__proto__”.
+
+ function bindIndex(parent, group, enter, update, exit, data) {
+ var i = 0,
+ node,
+ groupLength = group.length,
+ dataLength = data.length;
+
+ // Put any non-null nodes that fit into update.
+ // Put any null nodes into enter.
+ // Put any remaining data into enter.
+ for (; i < dataLength; ++i) {
+ if ((node = group[i])) {
+ node.__data__ = data[i];
+ update[i] = node;
+ } else {
+ enter[i] = new EnterNode(parent, data[i]);
+ }
+ }
+
+ // Put any non-null nodes that don’t fit into exit.
+ for (; i < groupLength; ++i) {
+ if ((node = group[i])) {
+ exit[i] = node;
+ }
+ }
+ }
+
+ function bindKey(parent, group, enter, update, exit, data, key) {
+ var i,
+ node,
+ nodeByKeyValue = {},
+ groupLength = group.length,
+ dataLength = data.length,
+ keyValues = new Array(groupLength),
+ keyValue;
+
+ // Compute the key for each node.
+ // If multiple nodes have the same key, the duplicates are added to exit.
+ for (i = 0; i < groupLength; ++i) {
+ if ((node = group[i])) {
+ keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
+ if (keyValue in nodeByKeyValue) {
+ exit[i] = node;
+ } else {
+ nodeByKeyValue[keyValue] = node;
+ }
+ }
+ }
+
+ // Compute the key for each datum.
+ // If there a node associated with this key, join and add it to update.
+ // If there is not (or the key is a duplicate), add it to enter.
+ for (i = 0; i < dataLength; ++i) {
+ keyValue = keyPrefix + key.call(parent, data[i], i, data);
+ if ((node = nodeByKeyValue[keyValue])) {
+ update[i] = node;
+ node.__data__ = data[i];
+ nodeByKeyValue[keyValue] = null;
+ } else {
+ enter[i] = new EnterNode(parent, data[i]);
+ }
+ }
+
+ // Add any remaining nodes that were not bound to data to exit.
+ for (i = 0; i < groupLength; ++i) {
+ if ((node = group[i]) && nodeByKeyValue[keyValues[i]] === node) {
+ exit[i] = node;
+ }
+ }
+ }
+
+ function selection_data(value, key) {
+ if (!value) {
+ (data = new Array(this.size())), (j = -1);
+ this.each(function (d) {
+ data[++j] = d;
+ });
+ return data;
+ }
+
+ var bind = key ? bindKey : bindIndex,
+ parents = this._parents,
+ groups = this._groups;
+
+ if (typeof value !== "function") value = constant$2(value);
+
+ for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
+ var parent = parents[j],
+ group = groups[j],
+ groupLength = group.length,
+ data = value.call(parent, parent && parent.__data__, j, parents),
+ dataLength = data.length,
+ enterGroup = (enter[j] = new Array(dataLength)),
+ updateGroup = (update[j] = new Array(dataLength)),
+ exitGroup = (exit[j] = new Array(groupLength));
+
+ bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
+
+ // Now connect the enter nodes to their following update node, such that
+ // appendChild can insert the materialized enter node before this node,
+ // rather than at the end of the parent node.
+ for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
+ if ((previous = enterGroup[i0])) {
+ if (i0 >= i1) i1 = i0 + 1;
+ while (!(next = updateGroup[i1]) && ++i1 < dataLength);
+ previous._next = next || null;
+ }
+ }
+ }
+
+ update = new Selection(update, parents);
+ update._enter = enter;
+ update._exit = exit;
+ return update;
+ }
+
+ function selection_exit() {
+ return new Selection(this._exit || this._groups.map(sparse), this._parents);
+ }
+
+ function selection_join(onenter, onupdate, onexit) {
+ var enter = this.enter(),
+ update = this,
+ exit = this.exit();
+ enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + "");
+ if (onupdate != null) update = onupdate(update);
+ if (onexit == null) exit.remove();
+ else onexit(exit);
+ return enter && update ? enter.merge(update).order() : update;
+ }
+
+ function selection_merge(selection) {
+ for (
+ var groups0 = this._groups,
+ groups1 = selection._groups,
+ m0 = groups0.length,
+ m1 = groups1.length,
+ m = Math.min(m0, m1),
+ merges = new Array(m0),
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = (merges[j] = new Array(n)), node, i = 0; i < n; ++i) {
+ if ((node = group0[i] || group1[i])) {
+ merge[i] = node;
+ }
+ }
+ }
+
+ for (; j < m0; ++j) {
+ merges[j] = groups0[j];
+ }
+
+ return new Selection(merges, this._parents);
+ }
+
+ function selection_order() {
+ for (var groups = this._groups, j = -1, m = groups.length; ++j < m; ) {
+ for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {
+ if ((node = group[i])) {
+ if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);
+ next = node;
+ }
+ }
+ }
+
+ return this;
+ }
+
+ function selection_sort(compare) {
+ if (!compare) compare = ascending$1;
+
+ function compareNode(a, b) {
+ return a && b ? compare(a.__data__, b.__data__) : !a - !b;
+ }
+
+ for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, sortgroup = (sortgroups[j] = new Array(n)), node, i = 0; i < n; ++i) {
+ if ((node = group[i])) {
+ sortgroup[i] = node;
+ }
+ }
+ sortgroup.sort(compareNode);
+ }
+
+ return new Selection(sortgroups, this._parents).order();
+ }
+
+ function ascending$1(a, b) {
+ return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+ }
+
+ function selection_call() {
+ var callback = arguments[0];
+ arguments[0] = this;
+ callback.apply(null, arguments);
+ return this;
+ }
+
+ function selection_nodes() {
+ var nodes = new Array(this.size()),
+ i = -1;
+ this.each(function () {
+ nodes[++i] = this;
+ });
+ return nodes;
+ }
+
+ function selection_node() {
+ for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+ for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
+ var node = group[i];
+ if (node) return node;
+ }
+ }
+
+ return null;
+ }
+
+ function selection_size() {
+ var size = 0;
+ this.each(function () {
+ ++size;
+ });
+ return size;
+ }
+
+ function selection_empty() {
+ return !this.node();
+ }
+
+ function selection_each(callback) {
+ for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+ for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
+ if ((node = group[i])) callback.call(node, node.__data__, i, group);
+ }
+ }
+
+ return this;
+ }
+
+ function attrRemove(name) {
+ return function () {
+ this.removeAttribute(name);
+ };
+ }
+
+ function attrRemoveNS(fullname) {
+ return function () {
+ this.removeAttributeNS(fullname.space, fullname.local);
+ };
+ }
+
+ function attrConstant(name, value) {
+ return function () {
+ this.setAttribute(name, value);
+ };
+ }
+
+ function attrConstantNS(fullname, value) {
+ return function () {
+ this.setAttributeNS(fullname.space, fullname.local, value);
+ };
+ }
+
+ function attrFunction(name, value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (v == null) this.removeAttribute(name);
+ else this.setAttribute(name, v);
+ };
+ }
+
+ function attrFunctionNS(fullname, value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
+ else this.setAttributeNS(fullname.space, fullname.local, v);
+ };
+ }
+
+ function selection_attr(name, value) {
+ var fullname = namespace(name);
+
+ if (arguments.length < 2) {
+ var node = this.node();
+ return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname);
+ }
+
+ return this.each(
+ (value == null
+ ? fullname.local
+ ? attrRemoveNS
+ : attrRemove
+ : typeof value === "function"
+ ? fullname.local
+ ? attrFunctionNS
+ : attrFunction
+ : fullname.local
+ ? attrConstantNS
+ : attrConstant)(fullname, value)
+ );
+ }
+
+ function defaultView(node) {
+ return (
+ (node.ownerDocument && node.ownerDocument.defaultView) || // node is a Node
+ (node.document && node) || // node is a Window
+ node.defaultView
+ ); // node is a Document
+ }
+
+ function styleRemove(name) {
+ return function () {
+ this.style.removeProperty(name);
+ };
+ }
+
+ function styleConstant(name, value, priority) {
+ return function () {
+ this.style.setProperty(name, value, priority);
+ };
+ }
+
+ function styleFunction(name, value, priority) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (v == null) this.style.removeProperty(name);
+ else this.style.setProperty(name, v, priority);
+ };
+ }
+
+ function selection_style(name, value, priority) {
+ return arguments.length > 1
+ ? this.each(
+ (value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)
+ )
+ : styleValue(this.node(), name);
+ }
+
+ function styleValue(node, name) {
+ return node.style.getPropertyValue(name) || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
+ }
+
+ function propertyRemove(name) {
+ return function () {
+ delete this[name];
+ };
+ }
+
+ function propertyConstant(name, value) {
+ return function () {
+ this[name] = value;
+ };
+ }
+
+ function propertyFunction(name, value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (v == null) delete this[name];
+ else this[name] = v;
+ };
+ }
+
+ function selection_property(name, value) {
+ return arguments.length > 1
+ ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value))
+ : this.node()[name];
+ }
+
+ function classArray(string) {
+ return string.trim().split(/^|\s+/);
+ }
+
+ function classList(node) {
+ return node.classList || new ClassList(node);
+ }
+
+ function ClassList(node) {
+ this._node = node;
+ this._names = classArray(node.getAttribute("class") || "");
+ }
+
+ ClassList.prototype = {
+ add: function (name) {
+ var i = this._names.indexOf(name);
+ if (i < 0) {
+ this._names.push(name);
+ this._node.setAttribute("class", this._names.join(" "));
+ }
+ },
+ remove: function (name) {
+ var i = this._names.indexOf(name);
+ if (i >= 0) {
+ this._names.splice(i, 1);
+ this._node.setAttribute("class", this._names.join(" "));
+ }
+ },
+ contains: function (name) {
+ return this._names.indexOf(name) >= 0;
+ },
+ };
+
+ function classedAdd(node, names) {
+ var list = classList(node),
+ i = -1,
+ n = names.length;
+ while (++i < n) list.add(names[i]);
+ }
+
+ function classedRemove(node, names) {
+ var list = classList(node),
+ i = -1,
+ n = names.length;
+ while (++i < n) list.remove(names[i]);
+ }
+
+ function classedTrue(names) {
+ return function () {
+ classedAdd(this, names);
+ };
+ }
+
+ function classedFalse(names) {
+ return function () {
+ classedRemove(this, names);
+ };
+ }
+
+ function classedFunction(names, value) {
+ return function () {
+ (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
+ };
+ }
+
+ function selection_classed(name, value) {
+ var names = classArray(name + "");
+
+ if (arguments.length < 2) {
+ var list = classList(this.node()),
+ i = -1,
+ n = names.length;
+ while (++i < n) if (!list.contains(names[i])) return false;
+ return true;
+ }
+
+ return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value));
+ }
+
+ function textRemove() {
+ this.textContent = "";
+ }
+
+ function textConstant(value) {
+ return function () {
+ this.textContent = value;
+ };
+ }
+
+ function textFunction(value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ this.textContent = v == null ? "" : v;
+ };
+ }
+
+ function selection_text(value) {
+ return arguments.length
+ ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value))
+ : this.node().textContent;
+ }
+
+ function htmlRemove() {
+ this.innerHTML = "";
+ }
+
+ function htmlConstant(value) {
+ return function () {
+ this.innerHTML = value;
+ };
+ }
+
+ function htmlFunction(value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ this.innerHTML = v == null ? "" : v;
+ };
+ }
+
+ function selection_html(value) {
+ return arguments.length
+ ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value))
+ : this.node().innerHTML;
+ }
+
+ function raise() {
+ if (this.nextSibling) this.parentNode.appendChild(this);
+ }
+
+ function selection_raise() {
+ return this.each(raise);
+ }
+
+ function lower() {
+ if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
+ }
+
+ function selection_lower() {
+ return this.each(lower);
+ }
+
+ function selection_append(name) {
+ var create = typeof name === "function" ? name : creator(name);
+ return this.select(function () {
+ return this.appendChild(create.apply(this, arguments));
+ });
+ }
+
+ function constantNull() {
+ return null;
+ }
+
+ function selection_insert(name, before) {
+ var create = typeof name === "function" ? name : creator(name),
+ select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
+ return this.select(function () {
+ return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
+ });
+ }
+
+ function remove() {
+ var parent = this.parentNode;
+ if (parent) parent.removeChild(this);
+ }
+
+ function selection_remove() {
+ return this.each(remove);
+ }
+
+ function selection_cloneShallow() {
+ var clone = this.cloneNode(false),
+ parent = this.parentNode;
+ return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
+ }
+
+ function selection_cloneDeep() {
+ var clone = this.cloneNode(true),
+ parent = this.parentNode;
+ return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
+ }
+
+ function selection_clone(deep) {
+ return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
+ }
+
+ function selection_datum(value) {
+ return arguments.length ? this.property("__data__", value) : this.node().__data__;
+ }
+
+ var filterEvents = {};
+
+ var event = null;
+
+ if (typeof document !== "undefined") {
+ var element = document.documentElement;
+ if (!("onmouseenter" in element)) {
+ filterEvents = { mouseenter: "mouseover", mouseleave: "mouseout" };
+ }
+ }
+
+ function filterContextListener(listener, index, group) {
+ listener = contextListener(listener, index, group);
+ return function (event) {
+ var related = event.relatedTarget;
+ if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
+ listener.call(this, event);
+ }
+ };
+ }
+
+ function contextListener(listener, index, group) {
+ return function (event1) {
+ var event0 = event; // Events can be reentrant (e.g., focus).
+ event = event1;
+ try {
+ listener.call(this, this.__data__, index, group);
+ } finally {
+ event = event0;
+ }
+ };
+ }
+
+ function parseTypenames$1(typenames) {
+ return typenames
+ .trim()
+ .split(/^|\s+/)
+ .map(function (t) {
+ var name = "",
+ i = t.indexOf(".");
+ if (i >= 0) (name = t.slice(i + 1)), (t = t.slice(0, i));
+ return { type: t, name: name };
+ });
+ }
+
+ function onRemove(typename) {
+ return function () {
+ var on = this.__on;
+ if (!on) return;
+ for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
+ if (((o = on[j]), (!typename.type || o.type === typename.type) && o.name === typename.name)) {
+ this.removeEventListener(o.type, o.listener, o.capture);
+ } else {
+ on[++i] = o;
+ }
+ }
+ if (++i) on.length = i;
+ else delete this.__on;
+ };
+ }
+
+ function onAdd(typename, value, capture) {
+ var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
+ return function (d, i, group) {
+ var on = this.__on,
+ o,
+ listener = wrap(value, i, group);
+ if (on)
+ for (var j = 0, m = on.length; j < m; ++j) {
+ if ((o = on[j]).type === typename.type && o.name === typename.name) {
+ this.removeEventListener(o.type, o.listener, o.capture);
+ this.addEventListener(o.type, (o.listener = listener), (o.capture = capture));
+ o.value = value;
+ return;
+ }
+ }
+ this.addEventListener(typename.type, listener, capture);
+ o = {
+ type: typename.type,
+ name: typename.name,
+ value: value,
+ listener: listener,
+ capture: capture,
+ };
+ if (!on) this.__on = [o];
+ else on.push(o);
+ };
+ }
+
+ function selection_on(typename, value, capture) {
+ var typenames = parseTypenames$1(typename + ""),
+ i,
+ n = typenames.length,
+ t;
+
+ if (arguments.length < 2) {
+ var on = this.node().__on;
+ if (on)
+ for (var j = 0, m = on.length, o; j < m; ++j) {
+ for (i = 0, o = on[j]; i < n; ++i) {
+ if ((t = typenames[i]).type === o.type && t.name === o.name) {
+ return o.value;
+ }
+ }
+ }
+ return;
+ }
+
+ on = value ? onAdd : onRemove;
+ if (capture == null) capture = false;
+ for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
+ return this;
+ }
+
+ function customEvent(event1, listener, that, args) {
+ var event0 = event;
+ event1.sourceEvent = event;
+ event = event1;
+ try {
+ return listener.apply(that, args);
+ } finally {
+ event = event0;
+ }
+ }
+
+ function dispatchEvent(node, type, params) {
+ var window = defaultView(node),
+ event = window.CustomEvent;
+
+ if (typeof event === "function") {
+ event = new event(type, params);
+ } else {
+ event = window.document.createEvent("Event");
+ if (params) event.initEvent(type, params.bubbles, params.cancelable), (event.detail = params.detail);
+ else event.initEvent(type, false, false);
+ }
+
+ node.dispatchEvent(event);
+ }
+
+ function dispatchConstant(type, params) {
+ return function () {
+ return dispatchEvent(this, type, params);
+ };
+ }
+
+ function dispatchFunction(type, params) {
+ return function () {
+ return dispatchEvent(this, type, params.apply(this, arguments));
+ };
+ }
+
+ function selection_dispatch(type, params) {
+ return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type, params));
+ }
+
+ var root = [null];
+
+ function Selection(groups, parents) {
+ this._groups = groups;
+ this._parents = parents;
+ }
+
+ function selection() {
+ return new Selection([[document.documentElement]], root);
+ }
+
+ Selection.prototype = selection.prototype = {
+ constructor: Selection,
+ select: selection_select,
+ selectAll: selection_selectAll,
+ filter: selection_filter,
+ data: selection_data,
+ enter: selection_enter,
+ exit: selection_exit,
+ join: selection_join,
+ merge: selection_merge,
+ order: selection_order,
+ sort: selection_sort,
+ call: selection_call,
+ nodes: selection_nodes,
+ node: selection_node,
+ size: selection_size,
+ empty: selection_empty,
+ each: selection_each,
+ attr: selection_attr,
+ style: selection_style,
+ property: selection_property,
+ classed: selection_classed,
+ text: selection_text,
+ html: selection_html,
+ raise: selection_raise,
+ lower: selection_lower,
+ append: selection_append,
+ insert: selection_insert,
+ remove: selection_remove,
+ clone: selection_clone,
+ datum: selection_datum,
+ on: selection_on,
+ dispatch: selection_dispatch,
+ };
+
+ function select(selector) {
+ return typeof selector === "string"
+ ? new Selection([[document.querySelector(selector)]], [document.documentElement])
+ : new Selection([[selector]], root);
+ }
+
+ function sourceEvent() {
+ var current = event,
+ source;
+ while ((source = current.sourceEvent)) current = source;
+ return current;
+ }
+
+ function point(node, event) {
+ var svg = node.ownerSVGElement || node;
+
+ if (svg.createSVGPoint) {
+ var point = svg.createSVGPoint();
+ (point.x = event.clientX), (point.y = event.clientY);
+ point = point.matrixTransform(node.getScreenCTM().inverse());
+ return [point.x, point.y];
+ }
+
+ var rect = node.getBoundingClientRect();
+ return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
+ }
+
+ function mouse(node) {
+ var event = sourceEvent();
+ if (event.changedTouches) event = event.changedTouches[0];
+ return point(node, event);
+ }
+
+ function touch(node, touches, identifier) {
+ if (arguments.length < 3) (identifier = touches), (touches = sourceEvent().changedTouches);
+
+ for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
+ if ((touch = touches[i]).identifier === identifier) {
+ return point(node, touch);
+ }
+ }
+
+ return null;
+ }
+
+ function nopropagation() {
+ event.stopImmediatePropagation();
+ }
+
+ function noevent() {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+
+ function nodrag(view) {
+ var root = view.document.documentElement,
+ selection = select(view).on("dragstart.drag", noevent, true);
+ if ("onselectstart" in root) {
+ selection.on("selectstart.drag", noevent, true);
+ } else {
+ root.__noselect = root.style.MozUserSelect;
+ root.style.MozUserSelect = "none";
+ }
+ }
+
+ function yesdrag(view, noclick) {
+ var root = view.document.documentElement,
+ selection = select(view).on("dragstart.drag", null);
+ if (noclick) {
+ selection.on("click.drag", noevent, true);
+ setTimeout(function () {
+ selection.on("click.drag", null);
+ }, 0);
+ }
+ if ("onselectstart" in root) {
+ selection.on("selectstart.drag", null);
+ } else {
+ root.style.MozUserSelect = root.__noselect;
+ delete root.__noselect;
+ }
+ }
+
+ function constant$3(x) {
+ return function () {
+ return x;
+ };
+ }
+
+ function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
+ this.target = target;
+ this.type = type;
+ this.subject = subject;
+ this.identifier = id;
+ this.active = active;
+ this.x = x;
+ this.y = y;
+ this.dx = dx;
+ this.dy = dy;
+ this._ = dispatch;
+ }
+
+ DragEvent.prototype.on = function () {
+ var value = this._.on.apply(this._, arguments);
+ return value === this._ ? this : value;
+ };
+
+ // Ignore right-click, since that should open the context menu.
+ function defaultFilter() {
+ return !event.ctrlKey && !event.button;
+ }
+
+ function defaultContainer() {
+ return this.parentNode;
+ }
+
+ function defaultSubject(d) {
+ return d == null ? { x: event.x, y: event.y } : d;
+ }
+
+ function defaultTouchable() {
+ return navigator.maxTouchPoints || "ontouchstart" in this;
+ }
+
+ function drag() {
+ var filter = defaultFilter,
+ container = defaultContainer,
+ subject = defaultSubject,
+ touchable = defaultTouchable,
+ gestures = {},
+ listeners = dispatch("start", "drag", "end"),
+ active = 0,
+ mousedownx,
+ mousedowny,
+ mousemoving,
+ touchending,
+ clickDistance2 = 0;
+
+ function drag(selection) {
+ selection
+ .on("mousedown.drag", mousedowned)
+ .filter(touchable)
+ .on("touchstart.drag", touchstarted)
+ .on("touchmove.drag", touchmoved)
+ .on("touchend.drag touchcancel.drag", touchended)
+ .style("touch-action", "none")
+ .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
+ }
+
+ function mousedowned() {
+ if (touchending || !filter.apply(this, arguments)) return;
+ var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
+ if (!gesture) return;
+ select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
+ nodrag(event.view);
+ nopropagation();
+ mousemoving = false;
+ mousedownx = event.clientX;
+ mousedowny = event.clientY;
+ gesture("start");
+ }
+
+ function mousemoved() {
+ noevent();
+ if (!mousemoving) {
+ var dx = event.clientX - mousedownx,
+ dy = event.clientY - mousedowny;
+ mousemoving = dx * dx + dy * dy > clickDistance2;
+ }
+ gestures.mouse("drag");
+ }
+
+ function mouseupped() {
+ select(event.view).on("mousemove.drag mouseup.drag", null);
+ yesdrag(event.view, mousemoving);
+ noevent();
+ gestures.mouse("end");
+ }
+
+ function touchstarted() {
+ if (!filter.apply(this, arguments)) return;
+ var touches = event.changedTouches,
+ c = container.apply(this, arguments),
+ n = touches.length,
+ i,
+ gesture;
+
+ for (i = 0; i < n; ++i) {
+ if ((gesture = beforestart(touches[i].identifier, c, touch, this, arguments))) {
+ nopropagation();
+ gesture("start");
+ }
+ }
+ }
+
+ function touchmoved() {
+ var touches = event.changedTouches,
+ n = touches.length,
+ i,
+ gesture;
+
+ for (i = 0; i < n; ++i) {
+ if ((gesture = gestures[touches[i].identifier])) {
+ noevent();
+ gesture("drag");
+ }
+ }
+ }
+
+ function touchended() {
+ var touches = event.changedTouches,
+ n = touches.length,
+ i,
+ gesture;
+
+ if (touchending) clearTimeout(touchending);
+ touchending = setTimeout(function () {
+ touchending = null;
+ }, 500); // Ghost clicks are delayed!
+ for (i = 0; i < n; ++i) {
+ if ((gesture = gestures[touches[i].identifier])) {
+ nopropagation();
+ gesture("end");
+ }
+ }
+ }
+
+ function beforestart(id, container, point, that, args) {
+ var p = point(container, id),
+ s,
+ dx,
+ dy,
+ sublisteners = listeners.copy();
+
+ if (
+ !customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function () {
+ if ((event.subject = s = subject.apply(that, args)) == null) return false;
+ dx = s.x - p[0] || 0;
+ dy = s.y - p[1] || 0;
+ return true;
+ })
+ )
+ return;
+
+ return function gesture(type) {
+ var p0 = p,
+ n;
+ switch (type) {
+ case "start":
+ (gestures[id] = gesture), (n = active++);
+ break;
+ case "end":
+ delete gestures[id], --active; // nobreak
+ case "drag":
+ (p = point(container, id)), (n = active);
+ break;
+ }
+ customEvent(
+ new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners),
+ sublisteners.apply,
+ sublisteners,
+ [type, that, args]
+ );
+ };
+ }
+
+ drag.filter = function (_) {
+ return arguments.length ? ((filter = typeof _ === "function" ? _ : constant$3(!!_)), drag) : filter;
+ };
+
+ drag.container = function (_) {
+ return arguments.length ? ((container = typeof _ === "function" ? _ : constant$3(_)), drag) : container;
+ };
+
+ drag.subject = function (_) {
+ return arguments.length ? ((subject = typeof _ === "function" ? _ : constant$3(_)), drag) : subject;
+ };
+
+ drag.touchable = function (_) {
+ return arguments.length ? ((touchable = typeof _ === "function" ? _ : constant$3(!!_)), drag) : touchable;
+ };
+
+ drag.on = function () {
+ var value = listeners.on.apply(listeners, arguments);
+ return value === listeners ? drag : value;
+ };
+
+ drag.clickDistance = function (_) {
+ return arguments.length ? ((clickDistance2 = (_ = +_) * _), drag) : Math.sqrt(clickDistance2);
+ };
+
+ return drag;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$a = Template(
+ "d-slider",
+ `
+
+
+
+`
+ );
+
+ // ARIA
+ // If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.
+ // If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.
+
+ const keyCodes = {
+ left: 37,
+ up: 38,
+ right: 39,
+ down: 40,
+ pageUp: 33,
+ pageDown: 34,
+ end: 35,
+ home: 36,
+ };
+
+ class Slider extends T$a(HTMLElement) {
+ connectedCallback() {
+ this.connected = true;
+ this.setAttribute("role", "slider");
+ // Makes the element tab-able.
+ if (!this.hasAttribute("tabindex")) {
+ this.setAttribute("tabindex", 0);
+ }
+
+ // Keeps track of keyboard vs. mouse interactions for focus rings
+ this.mouseEvent = false;
+
+ // Handles to shadow DOM elements
+ this.knob = this.root.querySelector(".knob-container");
+ this.background = this.root.querySelector(".background");
+ this.trackFill = this.root.querySelector(".track-fill");
+ this.track = this.root.querySelector(".track");
+
+ // Default values for attributes
+ this.min = this.min ? this.min : 0;
+ this.max = this.max ? this.max : 100;
+ this.scale = linear$1().domain([this.min, this.max]).range([0, 1]).clamp(true);
+
+ this.origin = this.origin !== undefined ? this.origin : this.min;
+ this.step = this.step ? this.step : 1;
+ this.update(this.value ? this.value : 0);
+
+ this.ticks = this.ticks ? this.ticks : false;
+ this.renderTicks();
+
+ this.drag = drag()
+ .container(this.background)
+ .on("start", () => {
+ this.mouseEvent = true;
+ this.background.classList.add("mousedown");
+ this.changeValue = this.value;
+ this.dragUpdate();
+ })
+ .on("drag", () => {
+ this.dragUpdate();
+ })
+ .on("end", () => {
+ this.mouseEvent = false;
+ this.background.classList.remove("mousedown");
+ this.dragUpdate();
+ if (this.changeValue !== this.value) this.dispatchChange();
+ this.changeValue = this.value;
+ });
+ this.drag(select(this.background));
+
+ this.addEventListener("focusin", () => {
+ if (!this.mouseEvent) {
+ this.background.classList.add("focus");
+ }
+ });
+ this.addEventListener("focusout", () => {
+ this.background.classList.remove("focus");
+ });
+ this.addEventListener("keydown", this.onKeyDown);
+ }
+
+ static get observedAttributes() {
+ return ["min", "max", "value", "step", "ticks", "origin", "tickValues", "tickLabels"];
+ }
+
+ attributeChangedCallback(attr, oldValue, newValue) {
+ if (isNaN(newValue) || newValue === undefined || newValue === null) return;
+ if (attr == "min") {
+ this.min = +newValue;
+ this.setAttribute("aria-valuemin", this.min);
+ }
+ if (attr == "max") {
+ this.max = +newValue;
+ this.setAttribute("aria-valuemax", this.max);
+ }
+ if (attr == "value") {
+ this.update(+newValue);
+ }
+ if (attr == "origin") {
+ this.origin = +newValue;
+ // this.update(this.value);
+ }
+ if (attr == "step") {
+ if (newValue > 0) {
+ this.step = +newValue;
+ }
+ }
+ if (attr == "ticks") {
+ this.ticks = newValue === "" ? true : newValue;
+ }
+ }
+
+ onKeyDown(event) {
+ this.changeValue = this.value;
+ let stopPropagation = false;
+ switch (event.keyCode) {
+ case keyCodes.left:
+ case keyCodes.down:
+ this.update(this.value - this.step);
+ stopPropagation = true;
+ break;
+ case keyCodes.right:
+ case keyCodes.up:
+ this.update(this.value + this.step);
+ stopPropagation = true;
+ break;
+ case keyCodes.pageUp:
+ this.update(this.value + this.step * 10);
+ stopPropagation = true;
+ break;
+
+ case keyCodes.pageDown:
+ this.update(this.value + this.step * 10);
+ stopPropagation = true;
+ break;
+ case keyCodes.home:
+ this.update(this.min);
+ stopPropagation = true;
+ break;
+ case keyCodes.end:
+ this.update(this.max);
+ stopPropagation = true;
+ break;
+ }
+ if (stopPropagation) {
+ this.background.classList.add("focus");
+ event.preventDefault();
+ event.stopPropagation();
+ if (this.changeValue !== this.value) this.dispatchChange();
+ }
+ }
+
+ validateValueRange(min, max, value) {
+ return Math.max(Math.min(max, value), min);
+ }
+
+ quantizeValue(value, step) {
+ return Math.round(value / step) * step;
+ }
+
+ dragUpdate() {
+ const bbox = this.background.getBoundingClientRect();
+ const x = event.x;
+ const width = bbox.width;
+ this.update(this.scale.invert(x / width));
+ }
+
+ update(value) {
+ let v = value;
+ if (this.step !== "any") {
+ v = this.quantizeValue(value, this.step);
+ }
+ v = this.validateValueRange(this.min, this.max, v);
+ if (this.connected) {
+ this.knob.style.left = this.scale(v) * 100 + "%";
+ this.trackFill.style.width = this.scale(this.min + Math.abs(v - this.origin)) * 100 + "%";
+ this.trackFill.style.left = this.scale(Math.min(v, this.origin)) * 100 + "%";
+ }
+ if (this.value !== v) {
+ this.value = v;
+ this.setAttribute("aria-valuenow", this.value);
+ this.dispatchInput();
+ }
+ }
+
+ // Dispatches only on a committed change (basically only on mouseup).
+ dispatchChange() {
+ const e = new Event("change");
+ this.dispatchEvent(e, {});
+ }
+
+ // Dispatches on each value change.
+ dispatchInput() {
+ const e = new Event("input");
+ this.dispatchEvent(e, {});
+ }
+
+ renderTicks() {
+ const ticksContainer = this.root.querySelector(".ticks");
+ if (this.ticks !== false) {
+ let tickData = [];
+ if (this.ticks > 0) {
+ tickData = this.scale.ticks(this.ticks);
+ } else if (this.step === "any") {
+ tickData = this.scale.ticks();
+ } else {
+ tickData = range(this.min, this.max + 1e-6, this.step);
+ }
+ tickData.forEach((d) => {
+ const tick = document.createElement("div");
+ tick.classList.add("tick");
+ tick.style.left = this.scale(d) * 100 + "%";
+ ticksContainer.appendChild(tick);
+ });
+ } else {
+ ticksContainer.style.display = "none";
+ }
+ }
+ }
+
+ var logo =
+ '\n \n \n';
+
+ const headerTemplate = `
+
+
+`;
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$b = Template("distill-header", headerTemplate, false);
+
+ class DistillHeader extends T$b(HTMLElement) {}
+
+ // Copyright 2018 The Distill Template Authors
+
+ const styles$2 = `
+
+`;
+
+ function appendixTemplate(frontMatter) {
+ let html = styles$2;
+
+ if (typeof frontMatter.githubUrl !== "undefined") {
+ html += `
+ Updates and Corrections
+ `;
+ if (frontMatter.githubCompareUpdatesUrl) {
+ html += `View all changes to this article since it was first published.`;
+ }
+ html += `
+ If you see mistakes or want to suggest changes, please create an issue on GitHub .
+ `;
+ }
+
+ const journal = frontMatter.journal;
+ if (typeof journal !== "undefined" && journal.title === "Distill") {
+ html += `
+ Reuse
+ Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub , unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.
+ `;
+ }
+
+ if (typeof frontMatter.publishedDate !== "undefined") {
+ html += `
+ Citation
+ For attribution in academic contexts, please cite this work as
+ ${frontMatter.concatenatedAuthors}, "${frontMatter.title}", Distill, ${frontMatter.publishedYear}.
+ BibTeX citation
+ ${serializeFrontmatterToBibtex(frontMatter)}
+ `;
+ }
+
+ return html;
+ }
+
+ class DistillAppendix extends HTMLElement {
+ static get is() {
+ return "distill-appendix";
+ }
+
+ set frontMatter(frontMatter) {
+ this.innerHTML = appendixTemplate(frontMatter);
+ }
+ }
+
+ const footerTemplate = `
+
+
+
+
+`;
+
+ // Copyright 2018 The Distill Template Authors
+
+ const T$c = Template("distill-footer", footerTemplate);
+
+ class DistillFooter extends T$c(HTMLElement) {}
+
+ // Copyright 2018 The Distill Template Authors
+
+ let templateIsLoading = false;
+ let runlevel = 0;
+ const initialize = function () {
+ if (window.distill.runlevel < 1) {
+ throw new Error("Insufficient Runlevel for Distill Template!");
+ }
+
+ /* 1. Flag that we're being loaded */
+ if ("distill" in window && window.distill.templateIsLoading) {
+ throw new Error("Runlevel 1: Distill Template is getting loaded more than once, aborting!");
+ } else {
+ window.distill.templateIsLoading = true;
+ console.debug("Runlevel 1: Distill Template has started loading.");
+ }
+
+ /* 2. Add styles if they weren't added during prerendering */
+ makeStyleTag(document);
+ console.debug("Runlevel 1: Static Distill styles have been added.");
+ console.debug("Runlevel 1->2.");
+ window.distill.runlevel += 1;
+
+ /* 3. Register Controller listener functions */
+ /* Needs to happen before components to their connected callbacks have a controller to talk to. */
+ for (const [functionName, callback] of Object.entries(Controller.listeners)) {
+ if (typeof callback === "function") {
+ document.addEventListener(functionName, callback);
+ } else {
+ console.error("Runlevel 2: Controller listeners need to be functions!");
+ }
+ }
+ console.debug("Runlevel 2: We can now listen to controller events.");
+ console.debug("Runlevel 2->3.");
+ window.distill.runlevel += 1;
+
+ /* 4. Register components */
+ const components = [
+ Abstract,
+ Appendix,
+ Article,
+ Bibliography,
+ Byline,
+ Cite,
+ CitationList,
+ Code,
+ Footnote,
+ FootnoteList,
+ FrontMatter$1,
+ HoverBox,
+ Title,
+ DMath,
+ References,
+ TOC,
+ Figure,
+ Slider,
+ Interstitial,
+ ];
+
+ const distillComponents = [DistillHeader, DistillAppendix, DistillFooter];
+
+ if (window.distill.runlevel < 2) {
+ throw new Error("Insufficient Runlevel for adding custom elements!");
+ }
+ const allComponents = components.concat(distillComponents);
+ for (const component of allComponents) {
+ console.debug("Runlevel 2: Registering custom element: " + component.is);
+ customElements.define(component.is, component);
+ }
+
+ console.debug("Runlevel 3: Distill Template finished registering custom elements.");
+ console.debug("Runlevel 3->4.");
+ window.distill.runlevel += 1;
+
+ // If template was added after DOMContentLoaded we may have missed that event.
+ // Controller will check for that case, so trigger the event explicitly:
+ if (domContentLoaded()) {
+ Controller.listeners.DOMContentLoaded();
+ }
+
+ console.debug("Runlevel 4: Distill Template initialisation complete.");
+ window.distill.templateIsLoading = false;
+ window.distill.templateHasLoaded = true;
+ };
+
+ window.distill = { runlevel, initialize, templateIsLoading };
+
+ /* 0. Check browser feature support; synchronously polyfill if needed */
+ if (Polyfills.browserSupportsAllFeatures()) {
+ console.debug("Runlevel 0: No need for polyfills.");
+ console.debug("Runlevel 0->1.");
+ window.distill.runlevel += 1;
+ window.distill.initialize();
+ } else {
+ console.debug("Runlevel 0: Distill Template is loading polyfills.");
+ Polyfills.load(window.distill.initialize);
+ }
+});
+//# sourceMappingURL=template.v2.js.map
diff --git a/assets/js/distillpub/transforms.v2.js b/assets/js/distillpub/transforms.v2.js
index 7ef24246..abbcc86f 100644
--- a/assets/js/distillpub/transforms.v2.js
+++ b/assets/js/distillpub/transforms.v2.js
@@ -1,14557 +1,14557 @@
-(function (global, factory) {
- typeof exports === "object" && typeof module !== "undefined"
- ? factory(exports, require("fs"))
- : typeof define === "function" && define.amd
- ? define(["exports", "fs"], factory)
- : ((global = global || self), factory((global.dl = {}), global.fs));
-})(this, function (exports, fs) {
- "use strict";
-
- fs = fs && Object.prototype.hasOwnProperty.call(fs, "default") ? fs["default"] : fs;
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
- const months = ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."];
- const zeroPad = (n) => (n < 10 ? "0" + n : n);
-
- const RFC = function (date) {
- const day = days[date.getDay()].substring(0, 3);
- const paddedDate = zeroPad(date.getDate());
- const month = months[date.getMonth()].substring(0, 3);
- const year = date.getFullYear().toString();
- const hours = date.getUTCHours().toString();
- const minutes = date.getUTCMinutes().toString();
- const seconds = date.getUTCSeconds().toString();
- return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`;
- };
-
- const objectFromMap = function (map) {
- const object = Array.from(map).reduce(
- (object, [key, value]) => Object.assign(object, { [key]: value }), // Be careful! Maps can have non-String keys; object literals can't.
- {}
- );
- return object;
- };
-
- const mapFromObject = function (object) {
- const map = new Map();
- for (var property in object) {
- if (object.hasOwnProperty(property)) {
- map.set(property, object[property]);
- }
- }
- return map;
- };
-
- class Author {
- // constructor(name='', personalURL='', affiliation='', affiliationURL='') {
- // this.name = name; // 'Chris Olah'
- // this.personalURL = personalURL; // 'https://colah.github.io'
- // this.affiliation = affiliation; // 'Google Brain'
- // this.affiliationURL = affiliationURL; // 'https://g.co/brain'
- // }
-
- constructor(object) {
- this.name = object.author; // 'Chris Olah'
- this.personalURL = object.authorURL; // 'https://colah.github.io'
- this.affiliation = object.affiliation; // 'Google Brain'
- this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'
- this.affiliations = object.affiliations || []; // new-style affiliations
- }
-
- // 'Chris'
- get firstName() {
- const names = this.name.split(" ");
- return names.slice(0, names.length - 1).join(" ");
- }
-
- // 'Olah'
- get lastName() {
- const names = this.name.split(" ");
- return names[names.length - 1];
- }
- }
-
- function mergeFromYMLFrontmatter(target, source) {
- target.title = source.title;
- if (source.published) {
- if (source.published instanceof Date) {
- target.publishedDate = source.published;
- } else if (source.published.constructor === String) {
- target.publishedDate = new Date(source.published);
- }
- }
- if (source.publishedDate) {
- if (source.publishedDate instanceof Date) {
- target.publishedDate = source.publishedDate;
- } else if (source.publishedDate.constructor === String) {
- target.publishedDate = new Date(source.publishedDate);
- } else {
- console.error("Don't know what to do with published date: " + source.publishedDate);
- }
- }
- target.description = source.description;
- target.authors = source.authors.map((authorObject) => new Author(authorObject));
- target.katex = source.katex;
- target.password = source.password;
- if (source.doi) {
- target.doi = source.doi;
- }
- }
-
- class FrontMatter {
- constructor() {
- this.title = "unnamed article"; // 'Attention and Augmented Recurrent Neural Networks'
- this.description = ""; // 'A visual overview of neural attention...'
- this.authors = []; // Array of Author(s)
-
- this.bibliography = new Map();
- this.bibliographyParsed = false;
- // {
- // 'gregor2015draw': {
- // 'title': 'DRAW: A recurrent neural network for image generation',
- // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',
- // 'journal': 'arXiv preprint arXiv:1502.04623',
- // 'year': '2015',
- // 'url': 'https://arxiv.org/pdf/1502.04623.pdf',
- // 'type': 'article'
- // },
- // }
-
- // Citation keys should be listed in the order that they are appear in the document.
- // Each key refers to a key in the bibliography dictionary.
- this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]
- this.citationsCollected = false;
-
- //
- // Assigned from posts.csv
- //
-
- // publishedDate: 2016-09-08T07:00:00.000Z,
- // tags: [ 'rnn' ],
- // distillPath: '2016/augmented-rnns',
- // githubPath: 'distillpub/post--augmented-rnns',
- // doiSuffix: 1,
-
- //
- // Assigned from journal
- //
- this.journal = {};
- // journal: {
- // 'title': 'Distill',
- // 'full_title': 'Distill',
- // 'abbrev_title': 'Distill',
- // 'url': 'http://distill.pub',
- // 'doi': '10.23915/distill',
- // 'publisherName': 'Distill Working Group',
- // 'publisherEmail': 'admin@distill.pub',
- // 'issn': '2476-0757',
- // 'editors': [...],
- // 'committee': [...]
- // }
- // volume: 1,
- // issue: 9,
-
- this.katex = {};
-
- //
- // Assigned from publishing process
- //
-
- // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',
- // updatedDate: 2017-03-21T07:13:16.000Z,
- // doi: '10.23915/distill.00001',
- this.doi = undefined;
- this.publishedDate = undefined;
- }
-
- // Example:
- // title: Demo Title Attention and Augmented Recurrent Neural Networks
- // published: Jan 10, 2017
- // authors:
- // - Chris Olah:
- // - Shan Carter: http://shancarter.com
- // affiliations:
- // - Google Brain:
- // - Google Brain: http://g.co/brain
-
- //
- // Computed Properties
- //
-
- // 'http://distill.pub/2016/augmented-rnns',
- set url(value) {
- this._url = value;
- }
- get url() {
- if (this._url) {
- return this._url;
- } else if (this.distillPath && this.journal.url) {
- return this.journal.url + "/" + this.distillPath;
- } else if (this.journal.url) {
- return this.journal.url;
- }
- }
-
- // 'https://github.com/distillpub/post--augmented-rnns',
- get githubUrl() {
- if (this.githubPath) {
- return "https://github.com/" + this.githubPath;
- } else {
- return undefined;
- }
- }
-
- // TODO resolve differences in naming of URL/Url/url.
- // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',
- set previewURL(value) {
- this._previewURL = value;
- }
- get previewURL() {
- return this._previewURL ? this._previewURL : this.url + "/thumbnail.jpg";
- }
-
- // 'Thu, 08 Sep 2016 00:00:00 -0700',
- get publishedDateRFC() {
- return RFC(this.publishedDate);
- }
-
- // 'Thu, 08 Sep 2016 00:00:00 -0700',
- get updatedDateRFC() {
- return RFC(this.updatedDate);
- }
-
- // 2016,
- get publishedYear() {
- return this.publishedDate.getFullYear();
- }
-
- // 'Sept',
- get publishedMonth() {
- return months[this.publishedDate.getMonth()];
- }
-
- // 8,
- get publishedDay() {
- return this.publishedDate.getDate();
- }
-
- // '09',
- get publishedMonthPadded() {
- return zeroPad(this.publishedDate.getMonth() + 1);
- }
-
- // '08',
- get publishedDayPadded() {
- return zeroPad(this.publishedDate.getDate());
- }
-
- get publishedISODateOnly() {
- return this.publishedDate.toISOString().split("T")[0];
- }
-
- get volume() {
- const volume = this.publishedYear - 2015;
- if (volume < 1) {
- throw new Error("Invalid publish date detected during computing volume");
- }
- return volume;
- }
-
- get issue() {
- return this.publishedDate.getMonth() + 1;
- }
-
- // 'Olah & Carter',
- get concatenatedAuthors() {
- if (this.authors.length > 2) {
- return this.authors[0].lastName + ", et al.";
- } else if (this.authors.length === 2) {
- return this.authors[0].lastName + " & " + this.authors[1].lastName;
- } else if (this.authors.length === 1) {
- return this.authors[0].lastName;
- }
- }
-
- // 'Olah, Chris and Carter, Shan',
- get bibtexAuthors() {
- return this.authors
- .map((author) => {
- return author.lastName + ", " + author.firstName;
- })
- .join(" and ");
- }
-
- // 'olah2016attention'
- get slug() {
- let slug = "";
- if (this.authors.length) {
- slug += this.authors[0].lastName.toLowerCase();
- slug += this.publishedYear;
- slug += this.title.split(" ")[0].toLowerCase();
- }
- return slug || "Untitled";
- }
-
- get bibliographyEntries() {
- return new Map(
- this.citations.map((citationKey) => {
- const entry = this.bibliography.get(citationKey);
- return [citationKey, entry];
- })
- );
- }
-
- set bibliography(bibliography) {
- if (bibliography instanceof Map) {
- this._bibliography = bibliography;
- } else if (typeof bibliography === "object") {
- this._bibliography = mapFromObject(bibliography);
- }
- }
-
- get bibliography() {
- return this._bibliography;
- }
-
- static fromObject(source) {
- const frontMatter = new FrontMatter();
- Object.assign(frontMatter, source);
- return frontMatter;
- }
-
- assignToObject(target) {
- Object.assign(target, this);
- target.bibliography = objectFromMap(this.bibliographyEntries);
- target.url = this.url;
- target.doi = this.doi;
- target.githubUrl = this.githubUrl;
- target.previewURL = this.previewURL;
- if (this.publishedDate) {
- target.volume = this.volume;
- target.issue = this.issue;
- target.publishedDateRFC = this.publishedDateRFC;
- target.publishedYear = this.publishedYear;
- target.publishedMonth = this.publishedMonth;
- target.publishedDay = this.publishedDay;
- target.publishedMonthPadded = this.publishedMonthPadded;
- target.publishedDayPadded = this.publishedDayPadded;
- }
- if (this.updatedDate) {
- target.updatedDateRFC = this.updatedDateRFC;
- }
- target.concatenatedAuthors = this.concatenatedAuthors;
- target.bibtexAuthors = this.bibtexAuthors;
- target.slug = this.slug;
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- function _moveLegacyAffiliationFormatIntoArray(frontMatter) {
- // authors used to have propoerties "affiliation" and "affiliationURL".
- // We now encourage using an array for affiliations containing objects with
- // properties "name" and "url".
- for (let author of frontMatter.authors) {
- const hasOldStyle = Boolean(author.affiliation);
- const hasNewStyle = Boolean(author.affiliations);
- if (!hasOldStyle) continue;
- if (hasNewStyle) {
- console.warn(
- `Author ${author.author} has both old-style ("affiliation" & "affiliationURL") and new style ("affiliations") affiliation information!`
- );
- } else {
- let newAffiliation = {
- name: author.affiliation,
- };
- if (author.affiliationURL) newAffiliation.url = author.affiliationURL;
- author.affiliations = [newAffiliation];
- }
- }
- return frontMatter;
- }
-
- function parseFrontmatter(element) {
- const scriptTag = element.firstElementChild;
- if (scriptTag) {
- const type = scriptTag.getAttribute("type");
- if (type.split("/")[1] == "json") {
- const content = scriptTag.textContent;
- const parsed = JSON.parse(content);
- return _moveLegacyAffiliationFormatIntoArray(parsed);
- } else {
- console.error("Distill only supports JSON frontmatter tags anymore; no more YAML.");
- }
- } else {
- console.error(
- "You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates."
- );
- }
- return {};
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function ExtractFrontmatter(dom, data) {
- const frontMatterTag = dom.querySelector("d-front-matter");
- if (!frontMatterTag) {
- console.warn("No front matter tag found!");
- return;
- }
- const extractedData = parseFrontmatter(frontMatterTag);
- mergeFromYMLFrontmatter(data, extractedData);
- }
-
- function commonjsRequire() {
- throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs");
- }
-
- function unwrapExports(x) {
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
- }
-
- function createCommonjsModule(fn, module) {
- return (module = { exports: {} }), fn(module, module.exports), module.exports;
- }
-
- var bibtexParse = createCommonjsModule(function (module, exports) {
- /* start bibtexParse 0.0.22 */
-
- //Original work by Henrik Muehe (c) 2010
- //
- //CommonJS port by Mikola Lysenko 2013
- //
- //Port to Browser lib by ORCID / RCPETERS
- //
- //Issues:
- //no comment handling within strings
- //no string concatenation
- //no variable values yet
- //Grammar implemented here:
- //bibtex -> (string | preamble | comment | entry)*;
- //string -> '@STRING' '{' key_equals_value '}';
- //preamble -> '@PREAMBLE' '{' value '}';
- //comment -> '@COMMENT' '{' value '}';
- //entry -> '@' key '{' key ',' key_value_list '}';
- //key_value_list -> key_equals_value (',' key_equals_value)*;
- //key_equals_value -> key '=' value;
- //value -> value_quotes | value_braces | key;
- //value_quotes -> '"' .*? '"'; // not quite
- //value_braces -> '{' .*? '"'; // not quite
- (function (exports) {
- function BibtexParser() {
- this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
- this.notKey = [",", "{", "}", " ", "="];
- this.pos = 0;
- this.input = "";
- this.entries = new Array();
-
- this.currentEntry = "";
-
- this.setInput = function (t) {
- this.input = t;
- };
-
- this.getEntries = function () {
- return this.entries;
- };
-
- this.isWhitespace = function (s) {
- return s == " " || s == "\r" || s == "\t" || s == "\n";
- };
-
- this.match = function (s, canCommentOut) {
- if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;
- this.skipWhitespace(canCommentOut);
- if (this.input.substring(this.pos, this.pos + s.length) == s) {
- this.pos += s.length;
- } else {
- throw "Token mismatch, expected " + s + ", found " + this.input.substring(this.pos);
- }
- this.skipWhitespace(canCommentOut);
- };
-
- this.tryMatch = function (s, canCommentOut) {
- if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;
- this.skipWhitespace(canCommentOut);
- if (this.input.substring(this.pos, this.pos + s.length) == s) {
- return true;
- } else {
- return false;
- }
- };
-
- /* when search for a match all text can be ignored, not just white space */
- this.matchAt = function () {
- while (this.input.length > this.pos && this.input[this.pos] != "@") {
- this.pos++;
- }
- if (this.input[this.pos] == "@") {
- return true;
- }
- return false;
- };
-
- this.skipWhitespace = function (canCommentOut) {
- while (this.isWhitespace(this.input[this.pos])) {
- this.pos++;
- }
- if (this.input[this.pos] == "%" && canCommentOut == true) {
- while (this.input[this.pos] != "\n") {
- this.pos++;
- }
- this.skipWhitespace(canCommentOut);
- }
- };
-
- this.value_braces = function () {
- var bracecount = 0;
- this.match("{", false);
- var start = this.pos;
- var escaped = false;
- while (true) {
- if (!escaped) {
- if (this.input[this.pos] == "}") {
- if (bracecount > 0) {
- bracecount--;
- } else {
- var end = this.pos;
- this.match("}", false);
- return this.input.substring(start, end);
- }
- } else if (this.input[this.pos] == "{") {
- bracecount++;
- } else if (this.pos >= this.input.length - 1) {
- throw "Unterminated value";
- }
- }
- if (this.input[this.pos] == "\\" && escaped == false) escaped = true;
- else escaped = false;
- this.pos++;
- }
- };
-
- this.value_comment = function () {
- var str = "";
- var brcktCnt = 0;
- while (!(this.tryMatch("}", false) && brcktCnt == 0)) {
- str = str + this.input[this.pos];
- if (this.input[this.pos] == "{") brcktCnt++;
- if (this.input[this.pos] == "}") brcktCnt--;
- if (this.pos >= this.input.length - 1) {
- throw "Unterminated value:" + this.input.substring(start);
- }
- this.pos++;
- }
- return str;
- };
-
- this.value_quotes = function () {
- this.match('"', false);
- var start = this.pos;
- var escaped = false;
- while (true) {
- if (!escaped) {
- if (this.input[this.pos] == '"') {
- var end = this.pos;
- this.match('"', false);
- return this.input.substring(start, end);
- } else if (this.pos >= this.input.length - 1) {
- throw "Unterminated value:" + this.input.substring(start);
- }
- }
- if (this.input[this.pos] == "\\" && escaped == false) escaped = true;
- else escaped = false;
- this.pos++;
- }
- };
-
- this.single_value = function () {
- var start = this.pos;
- if (this.tryMatch("{")) {
- return this.value_braces();
- } else if (this.tryMatch('"')) {
- return this.value_quotes();
- } else {
- var k = this.key();
- if (k.match("^[0-9]+$")) return k;
- else if (this.months.indexOf(k.toLowerCase()) >= 0) return k.toLowerCase();
- else throw "Value expected:" + this.input.substring(start) + " for key: " + k;
- }
- };
-
- this.value = function () {
- var values = [];
- values.push(this.single_value());
- while (this.tryMatch("#")) {
- this.match("#");
- values.push(this.single_value());
- }
- return values.join("");
- };
-
- this.key = function () {
- var start = this.pos;
- while (true) {
- if (this.pos >= this.input.length) {
- throw "Runaway key";
- } // а-яА-Я is Cyrillic
- //console.log(this.input[this.pos]);
- if (this.notKey.indexOf(this.input[this.pos]) >= 0) {
- return this.input.substring(start, this.pos);
- } else {
- this.pos++;
- }
- }
- };
-
- this.key_equals_value = function () {
- var key = this.key();
- if (this.tryMatch("=")) {
- this.match("=");
- var val = this.value();
- return [key, val];
- } else {
- throw "... = value expected, equals sign missing:" + this.input.substring(this.pos);
- }
- };
-
- this.key_value_list = function () {
- var kv = this.key_equals_value();
- this.currentEntry["entryTags"] = {};
- this.currentEntry["entryTags"][kv[0]] = kv[1];
- while (this.tryMatch(",")) {
- this.match(",");
- // fixes problems with commas at the end of a list
- if (this.tryMatch("}")) {
- break;
- }
- kv = this.key_equals_value();
- this.currentEntry["entryTags"][kv[0]] = kv[1];
- }
- };
-
- this.entry_body = function (d) {
- this.currentEntry = {};
- this.currentEntry["citationKey"] = this.key();
- this.currentEntry["entryType"] = d.substring(1);
- this.match(",");
- this.key_value_list();
- this.entries.push(this.currentEntry);
- };
-
- this.directive = function () {
- this.match("@");
- return "@" + this.key();
- };
-
- this.preamble = function () {
- this.currentEntry = {};
- this.currentEntry["entryType"] = "PREAMBLE";
- this.currentEntry["entry"] = this.value_comment();
- this.entries.push(this.currentEntry);
- };
-
- this.comment = function () {
- this.currentEntry = {};
- this.currentEntry["entryType"] = "COMMENT";
- this.currentEntry["entry"] = this.value_comment();
- this.entries.push(this.currentEntry);
- };
-
- this.entry = function (d) {
- this.entry_body(d);
- };
-
- this.bibtex = function () {
- while (this.matchAt()) {
- var d = this.directive();
- this.match("{");
- if (d == "@STRING") {
- this.string();
- } else if (d == "@PREAMBLE") {
- this.preamble();
- } else if (d == "@COMMENT") {
- this.comment();
- } else {
- this.entry(d);
- }
- this.match("}");
- }
- };
- }
- exports.toJSON = function (bibtex) {
- var b = new BibtexParser();
- b.setInput(bibtex);
- b.bibtex();
- return b.entries;
- };
-
- /* added during hackathon don't hate on me */
- exports.toBibtex = function (json) {
- var out = "";
- for (var i in json) {
- out += "@" + json[i].entryType;
- out += "{";
- if (json[i].citationKey) out += json[i].citationKey + ", ";
- if (json[i].entry) out += json[i].entry;
- if (json[i].entryTags) {
- var tags = "";
- for (var jdx in json[i].entryTags) {
- if (tags.length != 0) tags += ", ";
- tags += jdx + "= {" + json[i].entryTags[jdx] + "}";
- }
- out += tags;
- }
- out += "}\n\n";
- }
- return out;
- };
- })(exports);
-
- /* end bibtexParse */
- });
-
- // Copyright 2018 The Distill Template Authors
-
- function normalizeTag(string) {
- return string
- .replace(/[\t\n ]+/g, " ")
- .replace(/{\\["^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char)
- .replace(/{\\([a-zA-Z])}/g, (full, char) => char);
- }
-
- function parseBibtex(bibtex) {
- const bibliography = new Map();
- const parsedEntries = bibtexParse.toJSON(bibtex);
- for (const entry of parsedEntries) {
- // normalize tags; note entryTags is an object, not Map
- for (const [key, value] of Object.entries(entry.entryTags)) {
- entry.entryTags[key.toLowerCase()] = normalizeTag(value);
- }
- entry.entryTags.type = entry.entryType;
- // add to bibliography
- bibliography.set(entry.citationKey, entry.entryTags);
- }
- return bibliography;
- }
-
- function serializeFrontmatterToBibtex(frontMatter) {
- return `@article{${frontMatter.slug},
- author = {${frontMatter.bibtexAuthors}},
- title = {${frontMatter.title}},
- journal = {${frontMatter.journal.title}},
- year = {${frontMatter.publishedYear}},
- note = {${frontMatter.url}},
- doi = {${frontMatter.doi}}
-}`;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function parseBibliography(element) {
- const scriptTag = element.firstElementChild;
- if (scriptTag && scriptTag.tagName === "SCRIPT") {
- if (scriptTag.type == "text/bibtex") {
- const bibtex = element.firstElementChild.textContent;
- return parseBibtex(bibtex);
- } else if (scriptTag.type == "text/json") {
- return new Map(JSON.parse(scriptTag.textContent));
- } else {
- console.warn("Unsupported bibliography script tag type: " + scriptTag.type);
- }
- } else {
- console.warn("Bibliography did not have any script tag.");
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function ExtractBibliography(dom, data) {
- const bibliographyTag = dom.querySelector("d-bibliography");
- if (!bibliographyTag) {
- console.warn("No bibliography tag found!");
- return;
- }
-
- const src = bibliographyTag.getAttribute("src");
- if (src) {
- const path = data.inputDirectory + "/" + src;
- const text = fs.readFileSync(path, "utf-8");
- const bibliography = parseBibtex(text);
- const scriptTag = dom.createElement("script");
- scriptTag.type = "text/json";
- scriptTag.textContent = JSON.stringify([...bibliography]);
- bibliographyTag.appendChild(scriptTag);
- bibliographyTag.removeAttribute("src");
- }
-
- data.bibliography = parseBibliography(bibliographyTag);
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- function collect_citations(dom = document) {
- const citations = new Set();
- const citeTags = dom.querySelectorAll("d-cite");
- for (const tag of citeTags) {
- const keyString = tag.getAttribute("key") || tag.getAttribute("bibtex-key");
- const keys = keyString.split(",").map((k) => k.trim());
- for (const key of keys) {
- citations.add(key);
- }
- }
- return [...citations];
- }
-
- function author_string(ent, template, sep, finalSep) {
- if (ent.author == null) {
- return "";
- }
- var names = ent.author.split(" and ");
- let name_strings = names.map((name) => {
- name = name.trim();
- if (name.indexOf(",") != -1) {
- var last = name.split(",")[0].trim();
- var firsts = name.split(",")[1];
- } else if (name.indexOf(" ") != -1) {
- var last = name.split(" ").slice(-1)[0].trim();
- var firsts = name.split(" ").slice(0, -1).join(" ");
- } else {
- var last = name.trim();
- }
- var initials = "";
- if (firsts != undefined) {
- initials = firsts
- .trim()
- .split(" ")
- .map((s) => s.trim()[0]);
- initials = initials.join(".") + ".";
- }
- return template.replace("${F}", firsts).replace("${L}", last).replace("${I}", initials).trim(); // in case one of first or last was empty
- });
- if (names.length > 1) {
- var str = name_strings.slice(0, names.length - 1).join(sep);
- str += (finalSep || sep) + name_strings[names.length - 1];
- return str;
- } else {
- return name_strings[0];
- }
- }
-
- function venue_string(ent) {
- var cite = ent.journal || ent.booktitle || "";
- if ("volume" in ent) {
- var issue = ent.issue || ent.number;
- issue = issue != undefined ? "(" + issue + ")" : "";
- cite += ", Vol " + ent.volume + issue;
- }
- if ("pages" in ent) {
- cite += ", pp. " + ent.pages;
- }
- if (cite != "") cite += ". ";
- if ("publisher" in ent) {
- cite += ent.publisher;
- if (cite[cite.length - 1] != ".") cite += ".";
- }
- return cite;
- }
-
- function link_string(ent) {
- if ("url" in ent) {
- var url = ent.url;
- var arxiv_match = /arxiv\.org\/abs\/([0-9\.]*)/.exec(url);
- if (arxiv_match != null) {
- url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`;
- }
-
- if (url.slice(-4) == ".pdf") {
- var label = "PDF";
- } else if (url.slice(-5) == ".html") {
- var label = "HTML";
- }
- return ` [${label || "link"}] `;
- } /* else if ("doi" in ent){
- return ` [DOI] `;
- }*/ else {
- return "";
- }
- }
- function doi_string(ent, new_line) {
- if ("doi" in ent) {
- return `${new_line ? " " : ""} DOI: ${ent.doi} `;
- } else {
- return "";
- }
- }
-
- function title_string(ent) {
- return '' + ent.title + " ";
- }
-
- function bibliography_cite(ent, fancy) {
- if (ent) {
- var cite = title_string(ent);
- cite += link_string(ent) + " ";
- if (ent.author) {
- cite += author_string(ent, "${L}, ${I}", ", ", " and ");
- if (ent.year || ent.date) {
- cite += ", ";
- }
- }
- if (ent.year || ent.date) {
- cite += (ent.year || ent.date) + ". ";
- } else {
- cite += ". ";
- }
- cite += venue_string(ent);
- cite += doi_string(ent);
- return cite;
- /*var cite = author_string(ent, "${L}, ${I}", ", ", " and ");
- if (ent.year || ent.date){
- cite += ", " + (ent.year || ent.date) + ". "
- } else {
- cite += ". "
- }
- cite += "" + ent.title + " . ";
- cite += venue_string(ent);
- cite += doi_string(ent);
- cite += link_string(ent);
- return cite*/
- } else {
- return "?";
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function ExtractCitations(dom, data) {
- const citations = new Set(data.citations);
- const newCitations = collect_citations(dom);
- for (const citation of newCitations) {
- citations.add(citation);
- }
- data.citations = Array.from(citations);
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- function HTML(dom) {
- const head = dom.querySelector("head");
-
- // set language to 'en'
- if (!dom.querySelector("html").getAttribute("lang")) {
- dom.querySelector("html").setAttribute("lang", "en");
- }
-
- // set charset to 'utf-8'
- if (!dom.querySelector("meta[charset]")) {
- const meta = dom.createElement("meta");
- meta.setAttribute("charset", "utf-8");
- head.appendChild(meta);
- }
-
- // set viewport
- if (!dom.querySelector("meta[name=viewport]")) {
- const meta = dom.createElement("meta");
- meta.setAttribute("name", "viewport");
- meta.setAttribute("content", "width=device-width, initial-scale=1");
- head.appendChild(meta);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // import style from '../styles/d-byline.css';
-
- function bylineTemplate(frontMatter) {
- return `
-
-
-
Authors
-
Affiliations
- ${frontMatter.authors
- .map(
- (author) => `
-
- ${
- author.personalURL
- ? `
- ${author.name} `
- : `
- ${author.name} `
- }
-
-
- ${author.affiliations
- .map((affiliation) =>
- affiliation.url
- ? `${affiliation.name} `
- : `${affiliation.name} `
- )
- .join(", ")}
-
- `
- )
- .join("")}
-
-
-
Published
- ${
- frontMatter.publishedDate
- ? `
-
${frontMatter.publishedMonth} ${frontMatter.publishedDay}, ${frontMatter.publishedYear}
`
- : `
-
Not published yet.
`
- }
-
-
-`;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function Byline(dom, data) {
- const byline = dom.querySelector("d-byline");
- if (byline) {
- byline.innerHTML = bylineTemplate(data);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // no appendix -> add appendix
- // title in front, no h1 -> add it
- // no title in front, h1 -> read and put into frontMatter
- // footnote -> footnote list
- // break up bib
- // if citation, no bib-list -> add citation-list
-
- // if authors, no byline -> add byline
-
- function OptionalComponents(dom, data) {
- const body = dom.body;
- const article = body.querySelector("d-article");
-
- // If we don't have an article tag, something weird is going on—giving up.
- if (!article) {
- console.warn("No d-article tag found; skipping adding optional components!");
- return;
- }
-
- let byline = dom.querySelector("d-byline");
- if (!byline) {
- if (data.authors) {
- byline = dom.createElement("d-byline");
- body.insertBefore(byline, article);
- } else {
- console.warn("No authors found in front matter; please add them before submission!");
- }
- }
-
- let title = dom.querySelector("d-title");
- if (!title) {
- title = dom.createElement("d-title");
- body.insertBefore(title, byline);
- }
-
- let h1 = title.querySelector("h1");
- if (!h1) {
- h1 = dom.createElement("h1");
- h1.textContent = data.title;
- title.insertBefore(h1, title.firstChild);
- }
-
- const hasPassword = typeof data.password !== "undefined";
- let interstitial = body.querySelector("d-interstitial");
- if (hasPassword && !interstitial) {
- const inBrowser = typeof window !== "undefined";
- const onLocalhost = inBrowser && window.location.hostname.includes("localhost");
- if (!inBrowser || !onLocalhost) {
- interstitial = dom.createElement("d-interstitial");
- interstitial.password = data.password;
- body.insertBefore(interstitial, body.firstChild);
- }
- } else if (!hasPassword && interstitial) {
- interstitial.parentElement.removeChild(this);
- }
-
- let appendix = dom.querySelector("d-appendix");
- if (!appendix) {
- appendix = dom.createElement("d-appendix");
- dom.body.appendChild(appendix);
- }
-
- let footnoteList = dom.querySelector("d-footnote-list");
- if (!footnoteList) {
- footnoteList = dom.createElement("d-footnote-list");
- appendix.appendChild(footnoteList);
- }
-
- let citationList = dom.querySelector("d-citation-list");
- if (!citationList) {
- citationList = dom.createElement("d-citation-list");
- appendix.appendChild(citationList);
- }
- }
-
- var katex$1 = createCommonjsModule(function (module, exports) {
- (function (f) {
- {
- module.exports = f();
- }
- })(function () {
- return (function e(t, n, r) {
- function s(o, u) {
- if (!n[o]) {
- if (!t[o]) {
- var a = typeof commonjsRequire == "function" && commonjsRequire;
- if (!u && a) return a(o, !0);
- if (i) return i(o, !0);
- var f = new Error("Cannot find module '" + o + "'");
- throw ((f.code = "MODULE_NOT_FOUND"), f);
- }
- var l = (n[o] = { exports: {} });
- t[o][0].call(
- l.exports,
- function (e) {
- var n = t[o][1][e];
- return s(n ? n : e);
- },
- l,
- l.exports,
- e,
- t,
- n,
- r
- );
- }
- return n[o].exports;
- }
- var i = typeof commonjsRequire == "function" && commonjsRequire;
- for (var o = 0; o < r.length; o++) s(r[o]);
- return s;
- })(
- {
- 1: [
- function (require, module, exports) {
- var _ParseError = require("./src/ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- var _Settings = require("./src/Settings");
-
- var _Settings2 = _interopRequireDefault(_Settings);
-
- var _buildTree = require("./src/buildTree");
-
- var _buildTree2 = _interopRequireDefault(_buildTree);
-
- var _parseTree = require("./src/parseTree");
-
- var _parseTree2 = _interopRequireDefault(_parseTree);
-
- var _utils = require("./src/utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * Parse and build an expression, and place that expression in the DOM node
- * given.
- */
- var render = function render(expression, baseNode, options) {
- _utils2.default.clearNode(baseNode);
-
- var settings = new _Settings2.default(options);
-
- var tree = (0, _parseTree2.default)(expression, settings);
- var node = (0, _buildTree2.default)(tree, expression, settings).toNode();
-
- baseNode.appendChild(node);
- };
-
- // KaTeX's styles don't work properly in quirks mode. Print out an error, and
- // disable rendering.
- /* eslint no-console:0 */
- /**
- * This is the main entry point for KaTeX. Here, we expose functions for
- * rendering expressions either to DOM nodes or to markup strings.
- *
- * We also expose the ParseError class to check if errors thrown from KaTeX are
- * errors in the expression, or errors in javascript handling.
- */
-
- if (typeof document !== "undefined") {
- if (document.compatMode !== "CSS1Compat") {
- typeof console !== "undefined" &&
- console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype.");
-
- render = function render() {
- throw new _ParseError2.default("KaTeX doesn't work in quirks mode.");
- };
- }
- }
-
- /**
- * Parse and build an expression, and return the markup for that.
- */
- var renderToString = function renderToString(expression, options) {
- var settings = new _Settings2.default(options);
-
- var tree = (0, _parseTree2.default)(expression, settings);
- return (0, _buildTree2.default)(tree, expression, settings).toMarkup();
- };
-
- /**
- * Parse an expression and return the parse tree.
- */
- var generateParseTree = function generateParseTree(expression, options) {
- var settings = new _Settings2.default(options);
- return (0, _parseTree2.default)(expression, settings);
- };
-
- module.exports = {
- render: render,
- renderToString: renderToString,
- /**
- * NOTE: This method is not currently recommended for public use.
- * The internal tree representation is unstable and is very likely
- * to change. Use at your own risk.
- */
- __parse: generateParseTree,
- ParseError: _ParseError2.default,
- };
- },
- {
- "./src/ParseError": 29,
- "./src/Settings": 32,
- "./src/buildTree": 37,
- "./src/parseTree": 46,
- "./src/utils": 51,
- },
- ],
- 2: [
- function (require, module, exports) {
- module.exports = {
- default: require("core-js/library/fn/json/stringify"),
- __esModule: true,
- };
- },
- { "core-js/library/fn/json/stringify": 6 },
- ],
- 3: [
- function (require, module, exports) {
- module.exports = {
- default: require("core-js/library/fn/object/define-property"),
- __esModule: true,
- };
- },
- { "core-js/library/fn/object/define-property": 7 },
- ],
- 4: [
- function (require, module, exports) {
- exports.__esModule = true;
-
- exports.default = function (instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- };
- },
- {},
- ],
- 5: [
- function (require, module, exports) {
- exports.__esModule = true;
-
- var _defineProperty = require("../core-js/object/define-property");
-
- var _defineProperty2 = _interopRequireDefault(_defineProperty);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- exports.default = (function () {
- function defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- (0, _defineProperty2.default)(target, descriptor.key, descriptor);
- }
- }
-
- return function (Constructor, protoProps, staticProps) {
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
- if (staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- })();
- },
- { "../core-js/object/define-property": 3 },
- ],
- 6: [
- function (require, module, exports) {
- var core = require("../../modules/_core"),
- $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
- module.exports = function stringify(it) {
- // eslint-disable-line no-unused-vars
- return $JSON.stringify.apply($JSON, arguments);
- };
- },
- { "../../modules/_core": 10 },
- ],
- 7: [
- function (require, module, exports) {
- require("../../modules/es6.object.define-property");
- var $Object = require("../../modules/_core").Object;
- module.exports = function defineProperty(it, key, desc) {
- return $Object.defineProperty(it, key, desc);
- };
- },
- {
- "../../modules/_core": 10,
- "../../modules/es6.object.define-property": 23,
- },
- ],
- 8: [
- function (require, module, exports) {
- module.exports = function (it) {
- if (typeof it != "function") throw TypeError(it + " is not a function!");
- return it;
- };
- },
- {},
- ],
- 9: [
- function (require, module, exports) {
- var isObject = require("./_is-object");
- module.exports = function (it) {
- if (!isObject(it)) throw TypeError(it + " is not an object!");
- return it;
- };
- },
- { "./_is-object": 19 },
- ],
- 10: [
- function (require, module, exports) {
- var core = (module.exports = { version: "2.4.0" });
- if (typeof __e == "number") __e = core; // eslint-disable-line no-undef
- },
- {},
- ],
- 11: [
- function (require, module, exports) {
- // optional / simple context binding
- var aFunction = require("./_a-function");
- module.exports = function (fn, that, length) {
- aFunction(fn);
- if (that === undefined) return fn;
- switch (length) {
- case 1:
- return function (a) {
- return fn.call(that, a);
- };
- case 2:
- return function (a, b) {
- return fn.call(that, a, b);
- };
- case 3:
- return function (a, b, c) {
- return fn.call(that, a, b, c);
- };
- }
- return function (/* ...args */) {
- return fn.apply(that, arguments);
- };
- };
- },
- { "./_a-function": 8 },
- ],
- 12: [
- function (require, module, exports) {
- // Thank's IE8 for his funny defineProperty
- module.exports = !require("./_fails")(function () {
- return (
- Object.defineProperty({}, "a", {
- get: function () {
- return 7;
- },
- }).a != 7
- );
- });
- },
- { "./_fails": 15 },
- ],
- 13: [
- function (require, module, exports) {
- var isObject = require("./_is-object"),
- document = require("./_global").document,
- // in old IE typeof document.createElement is 'object'
- is = isObject(document) && isObject(document.createElement);
- module.exports = function (it) {
- return is ? document.createElement(it) : {};
- };
- },
- { "./_global": 16, "./_is-object": 19 },
- ],
- 14: [
- function (require, module, exports) {
- var global = require("./_global"),
- core = require("./_core"),
- ctx = require("./_ctx"),
- hide = require("./_hide"),
- PROTOTYPE = "prototype";
-
- var $export = function (type, name, source) {
- var IS_FORCED = type & $export.F,
- IS_GLOBAL = type & $export.G,
- IS_STATIC = type & $export.S,
- IS_PROTO = type & $export.P,
- IS_BIND = type & $export.B,
- IS_WRAP = type & $export.W,
- exports = IS_GLOBAL ? core : core[name] || (core[name] = {}),
- expProto = exports[PROTOTYPE],
- target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE],
- key,
- own,
- out;
- if (IS_GLOBAL) source = name;
- for (key in source) {
- // contains in native
- own = !IS_FORCED && target && target[key] !== undefined;
- if (own && key in exports) continue;
- // export native or passed
- out = own ? target[key] : source[key];
- // prevent global pollution for namespaces
- exports[key] =
- IS_GLOBAL && typeof target[key] != "function"
- ? source[key]
- : // bind timers to global for call from export context
- IS_BIND && own
- ? ctx(out, global)
- : // wrap global constructors for prevent change them in library
- IS_WRAP && target[key] == out
- ? (function (C) {
- var F = function (a, b, c) {
- if (this instanceof C) {
- switch (arguments.length) {
- case 0:
- return new C();
- case 1:
- return new C(a);
- case 2:
- return new C(a, b);
- }
- return new C(a, b, c);
- }
- return C.apply(this, arguments);
- };
- F[PROTOTYPE] = C[PROTOTYPE];
- return F;
- // make static versions for prototype methods
- })(out)
- : IS_PROTO && typeof out == "function"
- ? ctx(Function.call, out)
- : out;
- // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
- if (IS_PROTO) {
- (exports.virtual || (exports.virtual = {}))[key] = out;
- // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
- if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
- }
- }
- };
- // type bitmap
- $export.F = 1; // forced
- $export.G = 2; // global
- $export.S = 4; // static
- $export.P = 8; // proto
- $export.B = 16; // bind
- $export.W = 32; // wrap
- $export.U = 64; // safe
- $export.R = 128; // real proto method for `library`
- module.exports = $export;
- },
- {
- "./_core": 10,
- "./_ctx": 11,
- "./_global": 16,
- "./_hide": 17,
- },
- ],
- 15: [
- function (require, module, exports) {
- module.exports = function (exec) {
- try {
- return !!exec();
- } catch (e) {
- return true;
- }
- };
- },
- {},
- ],
- 16: [
- function (require, module, exports) {
- // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
- var global = (module.exports =
- typeof window != "undefined" && window.Math == Math
- ? window
- : typeof self != "undefined" && self.Math == Math
- ? self
- : Function("return this")());
- if (typeof __g == "number") __g = global; // eslint-disable-line no-undef
- },
- {},
- ],
- 17: [
- function (require, module, exports) {
- var dP = require("./_object-dp"),
- createDesc = require("./_property-desc");
- module.exports = require("./_descriptors")
- ? function (object, key, value) {
- return dP.f(object, key, createDesc(1, value));
- }
- : function (object, key, value) {
- object[key] = value;
- return object;
- };
- },
- {
- "./_descriptors": 12,
- "./_object-dp": 20,
- "./_property-desc": 21,
- },
- ],
- 18: [
- function (require, module, exports) {
- module.exports =
- !require("./_descriptors") &&
- !require("./_fails")(function () {
- return (
- Object.defineProperty(require("./_dom-create")("div"), "a", {
- get: function () {
- return 7;
- },
- }).a != 7
- );
- });
- },
- {
- "./_descriptors": 12,
- "./_dom-create": 13,
- "./_fails": 15,
- },
- ],
- 19: [
- function (require, module, exports) {
- module.exports = function (it) {
- return typeof it === "object" ? it !== null : typeof it === "function";
- };
- },
- {},
- ],
- 20: [
- function (require, module, exports) {
- var anObject = require("./_an-object"),
- IE8_DOM_DEFINE = require("./_ie8-dom-define"),
- toPrimitive = require("./_to-primitive"),
- dP = Object.defineProperty;
-
- exports.f = require("./_descriptors")
- ? Object.defineProperty
- : function defineProperty(O, P, Attributes) {
- anObject(O);
- P = toPrimitive(P, true);
- anObject(Attributes);
- if (IE8_DOM_DEFINE)
- try {
- return dP(O, P, Attributes);
- } catch (e) {
- /* empty */
- }
- if ("get" in Attributes || "set" in Attributes) throw TypeError("Accessors not supported!");
- if ("value" in Attributes) O[P] = Attributes.value;
- return O;
- };
- },
- {
- "./_an-object": 9,
- "./_descriptors": 12,
- "./_ie8-dom-define": 18,
- "./_to-primitive": 22,
- },
- ],
- 21: [
- function (require, module, exports) {
- module.exports = function (bitmap, value) {
- return {
- enumerable: !(bitmap & 1),
- configurable: !(bitmap & 2),
- writable: !(bitmap & 4),
- value: value,
- };
- };
- },
- {},
- ],
- 22: [
- function (require, module, exports) {
- // 7.1.1 ToPrimitive(input [, PreferredType])
- var isObject = require("./_is-object");
- // instead of the ES6 spec version, we didn't implement @@toPrimitive case
- // and the second argument - flag - preferred type is a string
- module.exports = function (it, S) {
- if (!isObject(it)) return it;
- var fn, val;
- if (S && typeof (fn = it.toString) == "function" && !isObject((val = fn.call(it)))) return val;
- if (typeof (fn = it.valueOf) == "function" && !isObject((val = fn.call(it)))) return val;
- if (!S && typeof (fn = it.toString) == "function" && !isObject((val = fn.call(it)))) return val;
- throw TypeError("Can't convert object to primitive value");
- };
- },
- { "./_is-object": 19 },
- ],
- 23: [
- function (require, module, exports) {
- var $export = require("./_export");
- // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
- $export($export.S + $export.F * !require("./_descriptors"), "Object", { defineProperty: require("./_object-dp").f });
- },
- {
- "./_descriptors": 12,
- "./_export": 14,
- "./_object-dp": 20,
- },
- ],
- 24: [
- function (require, module, exports) {
- function getRelocatable(re) {
- // In the future, this could use a WeakMap instead of an expando.
- if (!re.__matchAtRelocatable) {
- // Disjunctions are the lowest-precedence operator, so we can make any
- // pattern match the empty string by appending `|()` to it:
- // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-patterns
- var source = re.source + "|()";
-
- // We always make the new regex global.
- var flags = "g" + (re.ignoreCase ? "i" : "") + (re.multiline ? "m" : "") + (re.unicode ? "u" : "");
- // sticky (/.../y) doesn't make sense in conjunction with our relocation
- // logic, so we ignore it here.
- re.__matchAtRelocatable = new RegExp(source, flags);
- }
- return re.__matchAtRelocatable;
- }
-
- function matchAt(re, str, pos) {
- if (re.global || re.sticky) {
- throw new Error("matchAt(...): Only non-global regexes are supported");
- }
- var reloc = getRelocatable(re);
- reloc.lastIndex = pos;
- var match = reloc.exec(str);
- // Last capturing group is our sentinel that indicates whether the regex
- // matched at the given location.
- if (match[match.length - 1] == null) {
- // Original regex matched.
- match.length = match.length - 1;
- return match;
- } else {
- return null;
- }
- }
-
- module.exports = matchAt;
- },
- {},
- ],
- 25: [
- function (require, module, exports) {
- /* eslint-disable no-unused-vars */
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- var propIsEnumerable = Object.prototype.propertyIsEnumerable;
-
- function toObject(val) {
- if (val === null || val === undefined) {
- throw new TypeError("Object.assign cannot be called with null or undefined");
- }
-
- return Object(val);
- }
-
- function shouldUseNative() {
- try {
- if (!Object.assign) {
- return false;
- }
-
- // Detect buggy property enumeration order in older V8 versions.
-
- // https://bugs.chromium.org/p/v8/issues/detail?id=4118
- var test1 = new String("abc"); // eslint-disable-line
- test1[5] = "de";
- if (Object.getOwnPropertyNames(test1)[0] === "5") {
- return false;
- }
-
- // https://bugs.chromium.org/p/v8/issues/detail?id=3056
- var test2 = {};
- for (var i = 0; i < 10; i++) {
- test2["_" + String.fromCharCode(i)] = i;
- }
- var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
- return test2[n];
- });
- if (order2.join("") !== "0123456789") {
- return false;
- }
-
- // https://bugs.chromium.org/p/v8/issues/detail?id=3056
- var test3 = {};
- "abcdefghijklmnopqrst".split("").forEach(function (letter) {
- test3[letter] = letter;
- });
- if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") {
- return false;
- }
-
- return true;
- } catch (e) {
- // We don't expect any of the above to throw, but better to be safe.
- return false;
- }
- }
-
- module.exports = shouldUseNative()
- ? Object.assign
- : function (target, source) {
- var from;
- var to = toObject(target);
- var symbols;
-
- for (var s = 1; s < arguments.length; s++) {
- from = Object(arguments[s]);
-
- for (var key in from) {
- if (hasOwnProperty.call(from, key)) {
- to[key] = from[key];
- }
- }
-
- if (Object.getOwnPropertySymbols) {
- symbols = Object.getOwnPropertySymbols(from);
- for (var i = 0; i < symbols.length; i++) {
- if (propIsEnumerable.call(from, symbols[i])) {
- to[symbols[i]] = from[symbols[i]];
- }
- }
- }
- }
-
- return to;
- };
- },
- {},
- ],
- 26: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- var _createClass2 = require("babel-runtime/helpers/createClass");
-
- var _createClass3 = _interopRequireDefault(_createClass2);
-
- var _matchAt = require("match-at");
-
- var _matchAt2 = _interopRequireDefault(_matchAt);
-
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * The resulting token returned from `lex`.
- *
- * It consists of the token text plus some position information.
- * The position information is essentially a range in an input string,
- * but instead of referencing the bare input string, we refer to the lexer.
- * That way it is possible to attach extra metadata to the input string,
- * like for example a file name or similar.
- *
- * The position information (all three parameters) is optional,
- * so it is OK to construct synthetic tokens if appropriate.
- * Not providing available position information may lead to
- * degraded error reporting, though.
- *
- * @param {string} text the text of this token
- * @param {number=} start the start offset, zero-based inclusive
- * @param {number=} end the end offset, zero-based exclusive
- * @param {Lexer=} lexer the lexer which in turn holds the input string
- */
- /**
- * The Lexer class handles tokenizing the input in various ways. Since our
- * parser expects us to be able to backtrack, the lexer allows lexing from any
- * given starting point.
- *
- * Its main exposed function is the `lex` function, which takes a position to
- * lex from and a type of token to lex. It defers to the appropriate `_innerLex`
- * function.
- *
- * The various `_innerLex` functions perform the actual lexing of different
- * kinds.
- */
-
- var Token = (function () {
- function Token(text, start, end, lexer) {
- (0, _classCallCheck3.default)(this, Token);
-
- this.text = text;
- this.start = start;
- this.end = end;
- this.lexer = lexer;
- }
-
- /**
- * Given a pair of tokens (this and endToken), compute a “Token” encompassing
- * the whole input range enclosed by these two.
- *
- * @param {Token} endToken last token of the range, inclusive
- * @param {string} text the text of the newly constructed token
- */
-
- (0, _createClass3.default)(Token, [
- {
- key: "range",
- value: function range(endToken, text) {
- if (endToken.lexer !== this.lexer) {
- return new Token(text); // sorry, no position information available
- }
- return new Token(text, this.start, endToken.end, this.lexer);
- },
- },
- ]);
- return Token;
- })();
-
- /* The following tokenRegex
- * - matches typical whitespace (but not NBSP etc.) using its first group
- * - does not match any control character \x00-\x1f except whitespace
- * - does not match a bare backslash
- * - matches any ASCII character except those just mentioned
- * - does not match the BMP private use area \uE000-\uF8FF
- * - does not match bare surrogate code units
- * - matches any BMP character except for those just described
- * - matches any valid Unicode surrogate pair
- * - matches a backslash followed by one or more letters
- * - matches a backslash followed by any BMP character, including newline
- * Just because the Lexer matches something doesn't mean it's valid input:
- * If there is no matching function or symbol definition, the Parser will
- * still reject the input.
- */
-
- var tokenRegex = new RegExp(
- "([ \r\n\t]+)|" + // whitespace
- "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint
- "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair
- "|\\\\(?:[a-zA-Z]+|[^\uD800-\uDFFF])" + // function name
- ")"
- );
-
- /*
- * Main Lexer class
- */
-
- var Lexer = (function () {
- function Lexer(input) {
- (0, _classCallCheck3.default)(this, Lexer);
-
- this.input = input;
- this.pos = 0;
- }
-
- /**
- * This function lexes a single token.
- */
-
- (0, _createClass3.default)(Lexer, [
- {
- key: "lex",
- value: function lex() {
- var input = this.input;
- var pos = this.pos;
- if (pos === input.length) {
- return new Token("EOF", pos, pos, this);
- }
- var match = (0, _matchAt2.default)(tokenRegex, input, pos);
- if (match === null) {
- throw new _ParseError2.default("Unexpected character: '" + input[pos] + "'", new Token(input[pos], pos, pos + 1, this));
- }
- var text = match[2] || " ";
- var start = this.pos;
- this.pos += match[0].length;
- var end = this.pos;
- return new Token(text, start, end, this);
- },
- },
- ]);
- return Lexer;
- })();
-
- module.exports = Lexer;
- },
- {
- "./ParseError": 29,
- "babel-runtime/helpers/classCallCheck": 4,
- "babel-runtime/helpers/createClass": 5,
- "match-at": 24,
- },
- ],
- 27: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- var _createClass2 = require("babel-runtime/helpers/createClass");
-
- var _createClass3 = _interopRequireDefault(_createClass2);
-
- var _Lexer = require("./Lexer");
-
- var _Lexer2 = _interopRequireDefault(_Lexer);
-
- var _macros = require("./macros");
-
- var _macros2 = _interopRequireDefault(_macros);
-
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- var _objectAssign = require("object-assign");
-
- var _objectAssign2 = _interopRequireDefault(_objectAssign);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * This file contains the “gullet” where macros are expanded
- * until only non-macro tokens remain.
- */
-
- var MacroExpander = (function () {
- function MacroExpander(input, macros) {
- (0, _classCallCheck3.default)(this, MacroExpander);
-
- this.lexer = new _Lexer2.default(input);
- this.macros = (0, _objectAssign2.default)({}, _macros2.default, macros);
- this.stack = []; // contains tokens in REVERSE order
- this.discardedWhiteSpace = [];
- }
-
- /**
- * Recursively expand first token, then return first non-expandable token.
- *
- * At the moment, macro expansion doesn't handle delimited macros,
- * i.e. things like those defined by \def\foo#1\end{…}.
- * See the TeX book page 202ff. for details on how those should behave.
- */
-
- (0, _createClass3.default)(MacroExpander, [
- {
- key: "nextToken",
- value: function nextToken() {
- for (;;) {
- if (this.stack.length === 0) {
- this.stack.push(this.lexer.lex());
- }
- var topToken = this.stack.pop();
- var name = topToken.text;
- if (!(name.charAt(0) === "\\" && this.macros.hasOwnProperty(name))) {
- return topToken;
- }
- var tok = void 0;
- var expansion = this.macros[name];
- if (typeof expansion === "string") {
- var numArgs = 0;
- if (expansion.indexOf("#") !== -1) {
- var stripped = expansion.replace(/##/g, "");
- while (stripped.indexOf("#" + (numArgs + 1)) !== -1) {
- ++numArgs;
- }
- }
- var bodyLexer = new _Lexer2.default(expansion);
- expansion = [];
- tok = bodyLexer.lex();
- while (tok.text !== "EOF") {
- expansion.push(tok);
- tok = bodyLexer.lex();
- }
- expansion.reverse(); // to fit in with stack using push and pop
- expansion.numArgs = numArgs;
- this.macros[name] = expansion;
- }
- if (expansion.numArgs) {
- var args = [];
- var i = void 0;
- // obtain arguments, either single token or balanced {…} group
- for (i = 0; i < expansion.numArgs; ++i) {
- var startOfArg = this.get(true);
- if (startOfArg.text === "{") {
- var arg = [];
- var depth = 1;
- while (depth !== 0) {
- tok = this.get(false);
- arg.push(tok);
- if (tok.text === "{") {
- ++depth;
- } else if (tok.text === "}") {
- --depth;
- } else if (tok.text === "EOF") {
- throw new _ParseError2.default("End of input in macro argument", startOfArg);
- }
- }
- arg.pop(); // remove last }
- arg.reverse(); // like above, to fit in with stack order
- args[i] = arg;
- } else if (startOfArg.text === "EOF") {
- throw new _ParseError2.default("End of input expecting macro argument", topToken);
- } else {
- args[i] = [startOfArg];
- }
- }
- // paste arguments in place of the placeholders
- expansion = expansion.slice(); // make a shallow copy
- for (i = expansion.length - 1; i >= 0; --i) {
- tok = expansion[i];
- if (tok.text === "#") {
- if (i === 0) {
- throw new _ParseError2.default("Incomplete placeholder at end of macro body", tok);
- }
- tok = expansion[--i]; // next token on stack
- if (tok.text === "#") {
- // ## → #
- expansion.splice(i + 1, 1); // drop first #
- } else if (/^[1-9]$/.test(tok.text)) {
- // expansion.splice(i, 2, arg[0], arg[1], …)
- // to replace placeholder with the indicated argument.
- // TODO: use spread once we move to ES2015
- expansion.splice.apply(expansion, [i, 2].concat(args[tok.text - 1]));
- } else {
- throw new _ParseError2.default("Not a valid argument number", tok);
- }
- }
- }
- }
- this.stack = this.stack.concat(expansion);
- }
- },
- },
- {
- key: "get",
- value: function get(ignoreSpace) {
- this.discardedWhiteSpace = [];
- var token = this.nextToken();
- if (ignoreSpace) {
- while (token.text === " ") {
- this.discardedWhiteSpace.push(token);
- token = this.nextToken();
- }
- }
- return token;
- },
-
- /**
- * Undo the effect of the preceding call to the get method.
- * A call to this method MUST be immediately preceded and immediately followed
- * by a call to get. Only used during mode switching, i.e. after one token
- * was got in the old mode but should get got again in a new mode
- * with possibly different whitespace handling.
- */
- },
- {
- key: "unget",
- value: function unget(token) {
- this.stack.push(token);
- while (this.discardedWhiteSpace.length !== 0) {
- this.stack.push(this.discardedWhiteSpace.pop());
- }
- },
- },
- ]);
- return MacroExpander;
- })();
-
- module.exports = MacroExpander;
- },
- {
- "./Lexer": 26,
- "./ParseError": 29,
- "./macros": 44,
- "babel-runtime/helpers/classCallCheck": 4,
- "babel-runtime/helpers/createClass": 5,
- "object-assign": 25,
- },
- ],
- 28: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- var _createClass2 = require("babel-runtime/helpers/createClass");
-
- var _createClass3 = _interopRequireDefault(_createClass2);
-
- var _fontMetrics2 = require("./fontMetrics");
-
- var _fontMetrics3 = _interopRequireDefault(_fontMetrics2);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- var BASESIZE = 6; /**
- * This file contains information about the options that the Parser carries
- * around with it while parsing. Data is held in an `Options` object, and when
- * recursing, a new `Options` object can be created with the `.with*` and
- * `.reset` functions.
- */
-
- var sizeStyleMap = [
- // Each element contains [textsize, scriptsize, scriptscriptsize].
- // The size mappings are taken from TeX with \normalsize=10pt.
- [1, 1, 1], // size1: [5, 5, 5] \tiny
- [2, 1, 1], // size2: [6, 5, 5]
- [3, 1, 1], // size3: [7, 5, 5] \scriptsize
- [4, 2, 1], // size4: [8, 6, 5] \footnotesize
- [5, 2, 1], // size5: [9, 6, 5] \small
- [6, 3, 1], // size6: [10, 7, 5] \normalsize
- [7, 4, 2], // size7: [12, 8, 6] \large
- [8, 6, 3], // size8: [14.4, 10, 7] \Large
- [9, 7, 6], // size9: [17.28, 12, 10] \LARGE
- [10, 8, 7], // size10: [20.74, 14.4, 12] \huge
- [11, 10, 9],
- ];
-
- var sizeMultipliers = [
- // fontMetrics.js:getFontMetrics also uses size indexes, so if
- // you change size indexes, change that function.
- 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488,
- ];
-
- var sizeAtStyle = function sizeAtStyle(size, style) {
- return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
- };
-
- /**
- * This is the main options class. It contains the current style, size, color,
- * and font.
- *
- * Options objects should not be modified. To create a new Options with
- * different properties, call a `.having*` method.
- */
-
- var Options = (function () {
- function Options(data) {
- (0, _classCallCheck3.default)(this, Options);
-
- this.style = data.style;
- this.color = data.color;
- this.size = data.size || BASESIZE;
- this.textSize = data.textSize || this.size;
- this.phantom = data.phantom;
- this.font = data.font;
- this.sizeMultiplier = sizeMultipliers[this.size - 1];
- this._fontMetrics = null;
- }
-
- /**
- * Returns a new options object with the same properties as "this". Properties
- * from "extension" will be copied to the new options object.
- */
-
- (0, _createClass3.default)(Options, [
- {
- key: "extend",
- value: function extend(extension) {
- var data = {
- style: this.style,
- size: this.size,
- textSize: this.textSize,
- color: this.color,
- phantom: this.phantom,
- font: this.font,
- };
-
- for (var key in extension) {
- if (extension.hasOwnProperty(key)) {
- data[key] = extension[key];
- }
- }
-
- return new Options(data);
- },
-
- /**
- * Return an options object with the given style. If `this.style === style`,
- * returns `this`.
- */
- },
- {
- key: "havingStyle",
- value: function havingStyle(style) {
- if (this.style === style) {
- return this;
- } else {
- return this.extend({
- style: style,
- size: sizeAtStyle(this.textSize, style),
- });
- }
- },
-
- /**
- * Return an options object with a cramped version of the current style. If
- * the current style is cramped, returns `this`.
- */
- },
- {
- key: "havingCrampedStyle",
- value: function havingCrampedStyle() {
- return this.havingStyle(this.style.cramp());
- },
-
- /**
- * Return an options object with the given size and in at least `\textstyle`.
- * Returns `this` if appropriate.
- */
- },
- {
- key: "havingSize",
- value: function havingSize(size) {
- if (this.size === size && this.textSize === size) {
- return this;
- } else {
- return this.extend({
- style: this.style.text(),
- size: size,
- textSize: size,
- });
- }
- },
-
- /**
- * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
- * changes to at least `\textstyle`.
- */
- },
- {
- key: "havingBaseStyle",
- value: function havingBaseStyle(style) {
- style = style || this.style.text();
- var wantSize = sizeAtStyle(BASESIZE, style);
- if (this.size === wantSize && this.textSize === BASESIZE && this.style === style) {
- return this;
- } else {
- return this.extend({
- style: style,
- size: wantSize,
- baseSize: BASESIZE,
- });
- }
- },
-
- /**
- * Create a new options object with the given color.
- */
- },
- {
- key: "withColor",
- value: function withColor(color) {
- return this.extend({
- color: color,
- });
- },
-
- /**
- * Create a new options object with "phantom" set to true.
- */
- },
- {
- key: "withPhantom",
- value: function withPhantom() {
- return this.extend({
- phantom: true,
- });
- },
-
- /**
- * Create a new options objects with the give font.
- */
- },
- {
- key: "withFont",
- value: function withFont(font) {
- return this.extend({
- font: font || this.font,
- });
- },
-
- /**
- * Return the CSS sizing classes required to switch from enclosing options
- * `oldOptions` to `this`. Returns an array of classes.
- */
- },
- {
- key: "sizingClasses",
- value: function sizingClasses(oldOptions) {
- if (oldOptions.size !== this.size) {
- return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];
- } else {
- return [];
- }
- },
-
- /**
- * Return the CSS sizing classes required to switch to the base size. Like
- * `this.havingSize(BASESIZE).sizingClasses(this)`.
- */
- },
- {
- key: "baseSizingClasses",
- value: function baseSizingClasses() {
- if (this.size !== BASESIZE) {
- return ["sizing", "reset-size" + this.size, "size" + BASESIZE];
- } else {
- return [];
- }
- },
-
- /**
- * Return the font metrics for this size.
- */
- },
- {
- key: "fontMetrics",
- value: function fontMetrics() {
- if (!this._fontMetrics) {
- this._fontMetrics = _fontMetrics3.default.getFontMetrics(this.size);
- }
- return this._fontMetrics;
- },
-
- /**
- * A map of color names to CSS colors.
- * TODO(emily): Remove this when we have real macros
- */
- },
- {
- key: "getColor",
-
- /**
- * Gets the CSS color of the current options object, accounting for the
- * `colorMap`.
- */
- value: function getColor() {
- if (this.phantom) {
- return "transparent";
- } else {
- return Options.colorMap[this.color] || this.color;
- }
- },
- },
- ]);
- return Options;
- })();
-
- /**
- * The base size index.
- */
-
- Options.colorMap = {
- "katex-blue": "#6495ed",
- "katex-orange": "#ffa500",
- "katex-pink": "#ff00af",
- "katex-red": "#df0030",
- "katex-green": "#28ae7b",
- "katex-gray": "gray",
- "katex-purple": "#9d38bd",
- "katex-blueA": "#ccfaff",
- "katex-blueB": "#80f6ff",
- "katex-blueC": "#63d9ea",
- "katex-blueD": "#11accd",
- "katex-blueE": "#0c7f99",
- "katex-tealA": "#94fff5",
- "katex-tealB": "#26edd5",
- "katex-tealC": "#01d1c1",
- "katex-tealD": "#01a995",
- "katex-tealE": "#208170",
- "katex-greenA": "#b6ffb0",
- "katex-greenB": "#8af281",
- "katex-greenC": "#74cf70",
- "katex-greenD": "#1fab54",
- "katex-greenE": "#0d923f",
- "katex-goldA": "#ffd0a9",
- "katex-goldB": "#ffbb71",
- "katex-goldC": "#ff9c39",
- "katex-goldD": "#e07d10",
- "katex-goldE": "#a75a05",
- "katex-redA": "#fca9a9",
- "katex-redB": "#ff8482",
- "katex-redC": "#f9685d",
- "katex-redD": "#e84d39",
- "katex-redE": "#bc2612",
- "katex-maroonA": "#ffbde0",
- "katex-maroonB": "#ff92c6",
- "katex-maroonC": "#ed5fa6",
- "katex-maroonD": "#ca337c",
- "katex-maroonE": "#9e034e",
- "katex-purpleA": "#ddd7ff",
- "katex-purpleB": "#c6b9fc",
- "katex-purpleC": "#aa87ff",
- "katex-purpleD": "#7854ab",
- "katex-purpleE": "#543b78",
- "katex-mintA": "#f5f9e8",
- "katex-mintB": "#edf2df",
- "katex-mintC": "#e0e5cc",
- "katex-grayA": "#f6f7f7",
- "katex-grayB": "#f0f1f2",
- "katex-grayC": "#e3e5e6",
- "katex-grayD": "#d6d8da",
- "katex-grayE": "#babec2",
- "katex-grayF": "#888d93",
- "katex-grayG": "#626569",
- "katex-grayH": "#3b3e40",
- "katex-grayI": "#21242c",
- "katex-kaBlue": "#314453",
- "katex-kaGreen": "#71B307",
- };
- Options.BASESIZE = BASESIZE;
-
- module.exports = Options;
- },
- {
- "./fontMetrics": 41,
- "babel-runtime/helpers/classCallCheck": 4,
- "babel-runtime/helpers/createClass": 5,
- },
- ],
- 29: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * This is the ParseError class, which is the main error thrown by KaTeX
- * functions when something has gone wrong. This is used to distinguish internal
- * errors from errors in the expression that the user provided.
- *
- * If possible, a caller should provide a Token or ParseNode with information
- * about where in the source string the problem occurred.
- *
- * @param {string} message The error message
- * @param {(Token|ParseNode)=} token An object providing position information
- */
- var ParseError = function ParseError(message, token) {
- (0, _classCallCheck3.default)(this, ParseError);
-
- var error = "KaTeX parse error: " + message;
- var start = void 0;
- var end = void 0;
-
- if (token && token.lexer && token.start <= token.end) {
- // If we have the input and a position, make the error a bit fancier
-
- // Get the input
- var input = token.lexer.input;
-
- // Prepend some information
- start = token.start;
- end = token.end;
- if (start === input.length) {
- error += " at end of input: ";
- } else {
- error += " at position " + (start + 1) + ": ";
- }
-
- // Underline token in question using combining underscores
- var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332");
-
- // Extract some context from the input and add it to the error
- var left = void 0;
- if (start > 15) {
- left = "…" + input.slice(start - 15, start);
- } else {
- left = input.slice(0, start);
- }
- var right = void 0;
- if (end + 15 < input.length) {
- right = input.slice(end, end + 15) + "…";
- } else {
- right = input.slice(end);
- }
- error += left + underlined + right;
- }
-
- // Some hackery to make ParseError a prototype of Error
- // See http://stackoverflow.com/a/8460753
- var self = new Error(error);
- self.name = "ParseError";
- self.__proto__ = ParseError.prototype;
-
- self.position = start;
- return self;
- };
-
- // More hackery
-
- ParseError.prototype.__proto__ = Error.prototype;
-
- module.exports = ParseError;
- },
- { "babel-runtime/helpers/classCallCheck": 4 },
- ],
- 30: [
- function (require, module, exports) {
- Object.defineProperty(exports, "__esModule", {
- value: true,
- });
-
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * The resulting parse tree nodes of the parse tree.
- *
- * It is possible to provide position information, so that a ParseNode can
- * fulfil a role similar to a Token in error reporting.
- * For details on the corresponding properties see Token constructor.
- * Providing such information can lead to better error reporting.
- *
- * @param {string} type type of node, like e.g. "ordgroup"
- * @param {?object} value type-specific representation of the node
- * @param {string} mode parse mode in action for this node,
- * "math" or "text"
- * @param {Token=} firstToken first token of the input for this node,
- * will omit position information if unset
- * @param {Token=} lastToken last token of the input for this node,
- * will default to firstToken if unset
- */
- var ParseNode = function ParseNode(type, value, mode, firstToken, lastToken) {
- (0, _classCallCheck3.default)(this, ParseNode);
-
- this.type = type;
- this.value = value;
- this.mode = mode;
- if (firstToken && (!lastToken || lastToken.lexer === firstToken.lexer)) {
- this.lexer = firstToken.lexer;
- this.start = firstToken.start;
- this.end = (lastToken || firstToken).end;
- }
- };
-
- exports.default = ParseNode;
- },
- { "babel-runtime/helpers/classCallCheck": 4 },
- ],
- 31: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- var _createClass2 = require("babel-runtime/helpers/createClass");
-
- var _createClass3 = _interopRequireDefault(_createClass2);
-
- var _functions = require("./functions");
-
- var _functions2 = _interopRequireDefault(_functions);
-
- var _environments = require("./environments");
-
- var _environments2 = _interopRequireDefault(_environments);
-
- var _MacroExpander = require("./MacroExpander");
-
- var _MacroExpander2 = _interopRequireDefault(_MacroExpander);
-
- var _symbols = require("./symbols");
-
- var _symbols2 = _interopRequireDefault(_symbols);
-
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- var _units = require("./units");
-
- var _units2 = _interopRequireDefault(_units);
-
- var _unicodeRegexes = require("./unicodeRegexes");
-
- var _ParseNode = require("./ParseNode");
-
- var _ParseNode2 = _interopRequireDefault(_ParseNode);
-
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * This file contains the parser used to parse out a TeX expression from the
- * input. Since TeX isn't context-free, standard parsers don't work particularly
- * well.
- *
- * The strategy of this parser is as such:
- *
- * The main functions (the `.parse...` ones) take a position in the current
- * parse string to parse tokens from. The lexer (found in Lexer.js, stored at
- * this.lexer) also supports pulling out tokens at arbitrary places. When
- * individual tokens are needed at a position, the lexer is called to pull out a
- * token, which is then used.
- *
- * The parser has a property called "mode" indicating the mode that
- * the parser is currently in. Currently it has to be one of "math" or
- * "text", which denotes whether the current environment is a math-y
- * one or a text-y one (e.g. inside \text). Currently, this serves to
- * limit the functions which can be used in text mode.
- *
- * The main functions then return an object which contains the useful data that
- * was parsed at its given point, and a new position at the end of the parsed
- * data. The main functions can call each other and continue the parsing by
- * using the returned position as a new starting point.
- *
- * There are also extra `.handle...` functions, which pull out some reused
- * functionality into self-contained functions.
- *
- * The earlier functions return ParseNodes.
- * The later functions (which are called deeper in the parse) sometimes return
- * ParseFuncOrArgument, which contain a ParseNode as well as some data about
- * whether the parsed object is a function which is missing some arguments, or a
- * standalone object which can be used as an argument to another function.
- */
-
- /**
- * An initial function (without its arguments), or an argument to a function.
- * The `result` argument should be a ParseNode.
- */
- function ParseFuncOrArgument(result, isFunction, token) {
- this.result = result;
- // Is this a function (i.e. is it something defined in functions.js)?
- this.isFunction = isFunction;
- this.token = token;
- } /* eslint no-constant-condition:0 */
-
- var Parser = (function () {
- function Parser(input, settings) {
- (0, _classCallCheck3.default)(this, Parser);
-
- // Create a new macro expander (gullet) and (indirectly via that) also a
- // new lexer (mouth) for this parser (stomach, in the language of TeX)
- this.gullet = new _MacroExpander2.default(input, settings.macros);
- // Use old \color behavior (same as LaTeX's \textcolor) if requested.
- // We do this after the macros object has been copied by MacroExpander.
- if (settings.colorIsTextColor) {
- this.gullet.macros["\\color"] = "\\textcolor";
- }
- // Store the settings for use in parsing
- this.settings = settings;
- // Count leftright depth (for \middle errors)
- this.leftrightDepth = 0;
- }
-
- /**
- * Checks a result to make sure it has the right type, and throws an
- * appropriate error otherwise.
- *
- * @param {boolean=} consume whether to consume the expected token,
- * defaults to true
- */
-
- (0, _createClass3.default)(Parser, [
- {
- key: "expect",
- value: function expect(text, consume) {
- if (this.nextToken.text !== text) {
- throw new _ParseError2.default("Expected '" + text + "', got '" + this.nextToken.text + "'", this.nextToken);
- }
- if (consume !== false) {
- this.consume();
- }
- },
-
- /**
- * Considers the current look ahead token as consumed,
- * and fetches the one after that as the new look ahead.
- */
- },
- {
- key: "consume",
- value: function consume() {
- this.nextToken = this.gullet.get(this.mode === "math");
- },
- },
- {
- key: "switchMode",
- value: function switchMode(newMode) {
- this.gullet.unget(this.nextToken);
- this.mode = newMode;
- this.consume();
- },
-
- /**
- * Main parsing function, which parses an entire input.
- *
- * @return {?Array.}
- */
- },
- {
- key: "parse",
- value: function parse() {
- // Try to parse the input
- this.mode = "math";
- this.consume();
- var parse = this.parseInput();
- return parse;
- },
-
- /**
- * Parses an entire input tree.
- */
- },
- {
- key: "parseInput",
- value: function parseInput() {
- // Parse an expression
- var expression = this.parseExpression(false);
- // If we succeeded, make sure there's an EOF at the end
- this.expect("EOF", false);
- return expression;
- },
- },
- {
- key: "parseExpression",
-
- /**
- * Parses an "expression", which is a list of atoms.
- *
- * @param {boolean} breakOnInfix Should the parsing stop when we hit infix
- * nodes? This happens when functions have higher precendence
- * than infix nodes in implicit parses.
- *
- * @param {?string} breakOnTokenText The text of the token that the expression
- * should end with, or `null` if something else should end the
- * expression.
- *
- * @return {ParseNode}
- */
- value: function parseExpression(breakOnInfix, breakOnTokenText) {
- var body = [];
- // Keep adding atoms to the body until we can't parse any more atoms (either
- // we reached the end, a }, or a \right)
- while (true) {
- var lex = this.nextToken;
- if (Parser.endOfExpression.indexOf(lex.text) !== -1) {
- break;
- }
- if (breakOnTokenText && lex.text === breakOnTokenText) {
- break;
- }
- if (breakOnInfix && _functions2.default[lex.text] && _functions2.default[lex.text].infix) {
- break;
- }
- var atom = this.parseAtom();
- if (!atom) {
- if (!this.settings.throwOnError && lex.text[0] === "\\") {
- var errorNode = this.handleUnsupportedCmd();
- body.push(errorNode);
- continue;
- }
-
- break;
- }
- body.push(atom);
- }
- return this.handleInfixNodes(body);
- },
-
- /**
- * Rewrites infix operators such as \over with corresponding commands such
- * as \frac.
- *
- * There can only be one infix operator per group. If there's more than one
- * then the expression is ambiguous. This can be resolved by adding {}.
- *
- * @returns {Array}
- */
- },
- {
- key: "handleInfixNodes",
- value: function handleInfixNodes(body) {
- var overIndex = -1;
- var funcName = void 0;
-
- for (var i = 0; i < body.length; i++) {
- var node = body[i];
- if (node.type === "infix") {
- if (overIndex !== -1) {
- throw new _ParseError2.default("only one infix operator per group", node.value.token);
- }
- overIndex = i;
- funcName = node.value.replaceWith;
- }
- }
-
- if (overIndex !== -1) {
- var numerNode = void 0;
- var denomNode = void 0;
-
- var numerBody = body.slice(0, overIndex);
- var denomBody = body.slice(overIndex + 1);
-
- if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
- numerNode = numerBody[0];
- } else {
- numerNode = new _ParseNode2.default("ordgroup", numerBody, this.mode);
- }
-
- if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
- denomNode = denomBody[0];
- } else {
- denomNode = new _ParseNode2.default("ordgroup", denomBody, this.mode);
- }
-
- var value = this.callFunction(funcName, [numerNode, denomNode], null);
- return [new _ParseNode2.default(value.type, value, this.mode)];
- } else {
- return body;
- }
- },
-
- // The greediness of a superscript or subscript
- },
- {
- key: "handleSupSubscript",
-
- /**
- * Handle a subscript or superscript with nice errors.
- */
- value: function handleSupSubscript(name) {
- var symbolToken = this.nextToken;
- var symbol = symbolToken.text;
- this.consume();
- var group = this.parseGroup();
-
- if (!group) {
- if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") {
- return this.handleUnsupportedCmd();
- } else {
- throw new _ParseError2.default("Expected group after '" + symbol + "'", symbolToken);
- }
- } else if (group.isFunction) {
- // ^ and _ have a greediness, so handle interactions with functions'
- // greediness
- var funcGreediness = _functions2.default[group.result].greediness;
- if (funcGreediness > Parser.SUPSUB_GREEDINESS) {
- return this.parseFunction(group);
- } else {
- throw new _ParseError2.default("Got function '" + group.result + "' with no arguments " + "as " + name, symbolToken);
- }
- } else {
- return group.result;
- }
- },
-
- /**
- * Converts the textual input of an unsupported command into a text node
- * contained within a color node whose color is determined by errorColor
- */
- },
- {
- key: "handleUnsupportedCmd",
- value: function handleUnsupportedCmd() {
- var text = this.nextToken.text;
- var textordArray = [];
-
- for (var i = 0; i < text.length; i++) {
- textordArray.push(new _ParseNode2.default("textord", text[i], "text"));
- }
-
- var textNode = new _ParseNode2.default(
- "text",
- {
- body: textordArray,
- type: "text",
- },
- this.mode
- );
-
- var colorNode = new _ParseNode2.default(
- "color",
- {
- color: this.settings.errorColor,
- value: [textNode],
- type: "color",
- },
- this.mode
- );
-
- this.consume();
- return colorNode;
- },
-
- /**
- * Parses a group with optional super/subscripts.
- *
- * @return {?ParseNode}
- */
- },
- {
- key: "parseAtom",
- value: function parseAtom() {
- // The body of an atom is an implicit group, so that things like
- // \left(x\right)^2 work correctly.
- var base = this.parseImplicitGroup();
-
- // In text mode, we don't have superscripts or subscripts
- if (this.mode === "text") {
- return base;
- }
-
- // Note that base may be empty (i.e. null) at this point.
-
- var superscript = void 0;
- var subscript = void 0;
- while (true) {
- // Lex the first token
- var lex = this.nextToken;
-
- if (lex.text === "\\limits" || lex.text === "\\nolimits") {
- // We got a limit control
- if (!base || base.type !== "op") {
- throw new _ParseError2.default("Limit controls must follow a math operator", lex);
- } else {
- var limits = lex.text === "\\limits";
- base.value.limits = limits;
- base.value.alwaysHandleSupSub = true;
- }
- this.consume();
- } else if (lex.text === "^") {
- // We got a superscript start
- if (superscript) {
- throw new _ParseError2.default("Double superscript", lex);
- }
- superscript = this.handleSupSubscript("superscript");
- } else if (lex.text === "_") {
- // We got a subscript start
- if (subscript) {
- throw new _ParseError2.default("Double subscript", lex);
- }
- subscript = this.handleSupSubscript("subscript");
- } else if (lex.text === "'") {
- // We got a prime
- if (superscript) {
- throw new _ParseError2.default("Double superscript", lex);
- }
- var prime = new _ParseNode2.default("textord", "\\prime", this.mode);
-
- // Many primes can be grouped together, so we handle this here
- var primes = [prime];
- this.consume();
- // Keep lexing tokens until we get something that's not a prime
- while (this.nextToken.text === "'") {
- // For each one, add another prime to the list
- primes.push(prime);
- this.consume();
- }
- // If there's a superscript following the primes, combine that
- // superscript in with the primes.
- if (this.nextToken.text === "^") {
- primes.push(this.handleSupSubscript("superscript"));
- }
- // Put everything into an ordgroup as the superscript
- superscript = new _ParseNode2.default("ordgroup", primes, this.mode);
- } else {
- // If it wasn't ^, _, or ', stop parsing super/subscripts
- break;
- }
- }
-
- if (superscript || subscript) {
- // If we got either a superscript or subscript, create a supsub
- return new _ParseNode2.default(
- "supsub",
- {
- base: base,
- sup: superscript,
- sub: subscript,
- },
- this.mode
- );
- } else {
- // Otherwise return the original body
- return base;
- }
- },
-
- // A list of the size-changing functions, for use in parseImplicitGroup
-
- // A list of the style-changing functions, for use in parseImplicitGroup
-
- // Old font functions
- },
- {
- key: "parseImplicitGroup",
-
- /**
- * Parses an implicit group, which is a group that starts at the end of a
- * specified, and ends right before a higher explicit group ends, or at EOL. It
- * is used for functions that appear to affect the current style, like \Large or
- * \textrm, where instead of keeping a style we just pretend that there is an
- * implicit grouping after it until the end of the group. E.g.
- * small text {\Large large text} small text again
- * It is also used for \left and \right to get the correct grouping.
- *
- * @return {?ParseNode}
- */
- value: function parseImplicitGroup() {
- var start = this.parseSymbol();
-
- if (start == null) {
- // If we didn't get anything we handle, fall back to parseFunction
- return this.parseFunction();
- }
-
- var func = start.result;
-
- if (func === "\\left") {
- // If we see a left:
- // Parse the entire left function (including the delimiter)
- var left = this.parseFunction(start);
- // Parse out the implicit body
- ++this.leftrightDepth;
- var body = this.parseExpression(false);
- --this.leftrightDepth;
- // Check the next token
- this.expect("\\right", false);
- var right = this.parseFunction();
- return new _ParseNode2.default(
- "leftright",
- {
- body: body,
- left: left.value.value,
- right: right.value.value,
- },
- this.mode
- );
- } else if (func === "\\begin") {
- // begin...end is similar to left...right
- var begin = this.parseFunction(start);
- var envName = begin.value.name;
- if (!_environments2.default.hasOwnProperty(envName)) {
- throw new _ParseError2.default("No such environment: " + envName, begin.value.nameGroup);
- }
- // Build the environment object. Arguments and other information will
- // be made available to the begin and end methods using properties.
- var env = _environments2.default[envName];
- var args = this.parseArguments("\\begin{" + envName + "}", env);
- var context = {
- mode: this.mode,
- envName: envName,
- parser: this,
- positions: args.pop(),
- };
- var result = env.handler(context, args);
- this.expect("\\end", false);
- var endNameToken = this.nextToken;
- var end = this.parseFunction();
- if (end.value.name !== envName) {
- throw new _ParseError2.default(
- "Mismatch: \\begin{" + envName + "} matched " + "by \\end{" + end.value.name + "}",
- endNameToken
- );
- }
- result.position = end.position;
- return result;
- } else if (_utils2.default.contains(Parser.sizeFuncs, func)) {
- // If we see a sizing function, parse out the implicit body
- this.consumeSpaces();
- var _body = this.parseExpression(false);
- return new _ParseNode2.default(
- "sizing",
- {
- // Figure out what size to use based on the list of functions above
- size: _utils2.default.indexOf(Parser.sizeFuncs, func) + 1,
- value: _body,
- },
- this.mode
- );
- } else if (_utils2.default.contains(Parser.styleFuncs, func)) {
- // If we see a styling function, parse out the implicit body
- this.consumeSpaces();
- var _body2 = this.parseExpression(true);
- return new _ParseNode2.default(
- "styling",
- {
- // Figure out what style to use by pulling out the style from
- // the function name
- style: func.slice(1, func.length - 5),
- value: _body2,
- },
- this.mode
- );
- } else if (func in Parser.oldFontFuncs) {
- var style = Parser.oldFontFuncs[func];
- // If we see an old font function, parse out the implicit body
- this.consumeSpaces();
- var _body3 = this.parseExpression(true);
- if (style.slice(0, 4) === "text") {
- return new _ParseNode2.default(
- "text",
- {
- style: style,
- body: new _ParseNode2.default("ordgroup", _body3, this.mode),
- },
- this.mode
- );
- } else {
- return new _ParseNode2.default(
- "font",
- {
- font: style,
- body: new _ParseNode2.default("ordgroup", _body3, this.mode),
- },
- this.mode
- );
- }
- } else if (func === "\\color") {
- // If we see a styling function, parse out the implicit body
- var color = this.parseColorGroup(false);
- if (!color) {
- throw new _ParseError2.default("\\color not followed by color");
- }
- var _body4 = this.parseExpression(true);
- return new _ParseNode2.default(
- "color",
- {
- type: "color",
- color: color.result.value,
- value: _body4,
- },
- this.mode
- );
- } else if (func === "$") {
- if (this.mode === "math") {
- throw new _ParseError2.default("$ within math mode");
- }
- this.consume();
- var outerMode = this.mode;
- this.switchMode("math");
- var _body5 = this.parseExpression(false, "$");
- this.expect("$", true);
- this.switchMode(outerMode);
- return new _ParseNode2.default(
- "styling",
- {
- style: "text",
- value: _body5,
- },
- "math"
- );
- } else {
- // Defer to parseFunction if it's not a function we handle
- return this.parseFunction(start);
- }
- },
-
- /**
- * Parses an entire function, including its base and all of its arguments.
- * The base might either have been parsed already, in which case
- * it is provided as an argument, or it's the next group in the input.
- *
- * @param {ParseFuncOrArgument=} baseGroup optional as described above
- * @return {?ParseNode}
- */
- },
- {
- key: "parseFunction",
- value: function parseFunction(baseGroup) {
- if (!baseGroup) {
- baseGroup = this.parseGroup();
- }
-
- if (baseGroup) {
- if (baseGroup.isFunction) {
- var func = baseGroup.result;
- var funcData = _functions2.default[func];
- if (this.mode === "text" && !funcData.allowedInText) {
- throw new _ParseError2.default("Can't use function '" + func + "' in text mode", baseGroup.token);
- } else if (this.mode === "math" && funcData.allowedInMath === false) {
- throw new _ParseError2.default("Can't use function '" + func + "' in math mode", baseGroup.token);
- }
-
- var args = this.parseArguments(func, funcData);
- var token = baseGroup.token;
- var result = this.callFunction(func, args, args.pop(), token);
- return new _ParseNode2.default(result.type, result, this.mode);
- } else {
- return baseGroup.result;
- }
- } else {
- return null;
- }
- },
-
- /**
- * Call a function handler with a suitable context and arguments.
- */
- },
- {
- key: "callFunction",
- value: function callFunction(name, args, positions, token) {
- var context = {
- funcName: name,
- parser: this,
- positions: positions,
- token: token,
- };
- return _functions2.default[name].handler(context, args);
- },
-
- /**
- * Parses the arguments of a function or environment
- *
- * @param {string} func "\name" or "\begin{name}"
- * @param {{numArgs:number,numOptionalArgs:number|undefined}} funcData
- * @return the array of arguments, with the list of positions as last element
- */
- },
- {
- key: "parseArguments",
- value: function parseArguments(func, funcData) {
- var totalArgs = funcData.numArgs + funcData.numOptionalArgs;
- if (totalArgs === 0) {
- return [[this.pos]];
- }
-
- var baseGreediness = funcData.greediness;
- var positions = [this.pos];
- var args = [];
-
- for (var i = 0; i < totalArgs; i++) {
- var nextToken = this.nextToken;
- var argType = funcData.argTypes && funcData.argTypes[i];
- var arg = void 0;
- if (i < funcData.numOptionalArgs) {
- if (argType) {
- arg = this.parseGroupOfType(argType, true);
- } else {
- arg = this.parseGroup(true);
- }
- if (!arg) {
- args.push(null);
- positions.push(this.pos);
- continue;
- }
- } else {
- if (argType) {
- arg = this.parseGroupOfType(argType);
- } else {
- arg = this.parseGroup();
- }
- if (!arg) {
- if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") {
- arg = new ParseFuncOrArgument(this.handleUnsupportedCmd(this.nextToken.text), false);
- } else {
- throw new _ParseError2.default("Expected group after '" + func + "'", nextToken);
- }
- }
- }
- var argNode = void 0;
- if (arg.isFunction) {
- var argGreediness = _functions2.default[arg.result].greediness;
- if (argGreediness > baseGreediness) {
- argNode = this.parseFunction(arg);
- } else {
- throw new _ParseError2.default("Got function '" + arg.result + "' as " + "argument to '" + func + "'", nextToken);
- }
- } else {
- argNode = arg.result;
- }
- args.push(argNode);
- positions.push(this.pos);
- }
-
- args.push(positions);
-
- return args;
- },
-
- /**
- * Parses a group when the mode is changing.
- *
- * @return {?ParseFuncOrArgument}
- */
- },
- {
- key: "parseGroupOfType",
- value: function parseGroupOfType(innerMode, optional) {
- var outerMode = this.mode;
- // Handle `original` argTypes
- if (innerMode === "original") {
- innerMode = outerMode;
- }
-
- if (innerMode === "color") {
- return this.parseColorGroup(optional);
- }
- if (innerMode === "size") {
- return this.parseSizeGroup(optional);
- }
-
- this.switchMode(innerMode);
- if (innerMode === "text") {
- // text mode is special because it should ignore the whitespace before
- // it
- this.consumeSpaces();
- }
- // By the time we get here, innerMode is one of "text" or "math".
- // We switch the mode of the parser, recurse, then restore the old mode.
- var res = this.parseGroup(optional);
- this.switchMode(outerMode);
- return res;
- },
- },
- {
- key: "consumeSpaces",
- value: function consumeSpaces() {
- while (this.nextToken.text === " ") {
- this.consume();
- }
- },
-
- /**
- * Parses a group, essentially returning the string formed by the
- * brace-enclosed tokens plus some position information.
- *
- * @param {string} modeName Used to describe the mode in error messages
- * @param {boolean=} optional Whether the group is optional or required
- */
- },
- {
- key: "parseStringGroup",
- value: function parseStringGroup(modeName, optional) {
- if (optional && this.nextToken.text !== "[") {
- return null;
- }
- var outerMode = this.mode;
- this.mode = "text";
- this.expect(optional ? "[" : "{");
- var str = "";
- var firstToken = this.nextToken;
- var lastToken = firstToken;
- while (this.nextToken.text !== (optional ? "]" : "}")) {
- if (this.nextToken.text === "EOF") {
- throw new _ParseError2.default("Unexpected end of input in " + modeName, firstToken.range(this.nextToken, str));
- }
- lastToken = this.nextToken;
- str += lastToken.text;
- this.consume();
- }
- this.mode = outerMode;
- this.expect(optional ? "]" : "}");
- return firstToken.range(lastToken, str);
- },
-
- /**
- * Parses a regex-delimited group: the largest sequence of tokens
- * whose concatenated strings match `regex`. Returns the string
- * formed by the tokens plus some position information.
- *
- * @param {RegExp} regex
- * @param {string} modeName Used to describe the mode in error messages
- */
- },
- {
- key: "parseRegexGroup",
- value: function parseRegexGroup(regex, modeName) {
- var outerMode = this.mode;
- this.mode = "text";
- var firstToken = this.nextToken;
- var lastToken = firstToken;
- var str = "";
- while (this.nextToken.text !== "EOF" && regex.test(str + this.nextToken.text)) {
- lastToken = this.nextToken;
- str += lastToken.text;
- this.consume();
- }
- if (str === "") {
- throw new _ParseError2.default("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken);
- }
- this.mode = outerMode;
- return firstToken.range(lastToken, str);
- },
-
- /**
- * Parses a color description.
- */
- },
- {
- key: "parseColorGroup",
- value: function parseColorGroup(optional) {
- var res = this.parseStringGroup("color", optional);
- if (!res) {
- return null;
- }
- var match = /^(#[a-z0-9]+|[a-z]+)$/i.exec(res.text);
- if (!match) {
- throw new _ParseError2.default("Invalid color: '" + res.text + "'", res);
- }
- return new ParseFuncOrArgument(new _ParseNode2.default("color", match[0], this.mode), false);
- },
-
- /**
- * Parses a size specification, consisting of magnitude and unit.
- */
- },
- {
- key: "parseSizeGroup",
- value: function parseSizeGroup(optional) {
- var res = void 0;
- if (!optional && this.nextToken.text !== "{") {
- res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size");
- } else {
- res = this.parseStringGroup("size", optional);
- }
- if (!res) {
- return null;
- }
- var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text);
- if (!match) {
- throw new _ParseError2.default("Invalid size: '" + res.text + "'", res);
- }
- var data = {
- number: +(match[1] + match[2]), // sign + magnitude, cast to number
- unit: match[3],
- };
- if (!_units2.default.validUnit(data)) {
- throw new _ParseError2.default("Invalid unit: '" + data.unit + "'", res);
- }
- return new ParseFuncOrArgument(new _ParseNode2.default("size", data, this.mode), false);
- },
-
- /**
- * If the argument is false or absent, this parses an ordinary group,
- * which is either a single nucleus (like "x") or an expression
- * in braces (like "{x+y}").
- * If the argument is true, it parses either a bracket-delimited expression
- * (like "[x+y]") or returns null to indicate the absence of a
- * bracket-enclosed group.
- *
- * @param {boolean=} optional Whether the group is optional or required
- * @return {?ParseFuncOrArgument}
- */
- },
- {
- key: "parseGroup",
- value: function parseGroup(optional) {
- var firstToken = this.nextToken;
- // Try to parse an open brace
- if (this.nextToken.text === (optional ? "[" : "{")) {
- // If we get a brace, parse an expression
- this.consume();
- var expression = this.parseExpression(false, optional ? "]" : null);
- var lastToken = this.nextToken;
- // Make sure we get a close brace
- this.expect(optional ? "]" : "}");
- if (this.mode === "text") {
- this.formLigatures(expression);
- }
- return new ParseFuncOrArgument(new _ParseNode2.default("ordgroup", expression, this.mode, firstToken, lastToken), false);
- } else {
- // Otherwise, just return a nucleus, or nothing for an optional group
- return optional ? null : this.parseSymbol();
- }
- },
-
- /**
- * Form ligature-like combinations of characters for text mode.
- * This includes inputs like "--", "---", "``" and "''".
- * The result will simply replace multiple textord nodes with a single
- * character in each value by a single textord node having multiple
- * characters in its value. The representation is still ASCII source.
- *
- * @param {Array.} group the nodes of this group,
- * list will be moified in place
- */
- },
- {
- key: "formLigatures",
- value: function formLigatures(group) {
- var n = group.length - 1;
- for (var i = 0; i < n; ++i) {
- var a = group[i];
- var v = a.value;
- if (v === "-" && group[i + 1].value === "-") {
- if (i + 1 < n && group[i + 2].value === "-") {
- group.splice(i, 3, new _ParseNode2.default("textord", "---", "text", a, group[i + 2]));
- n -= 2;
- } else {
- group.splice(i, 2, new _ParseNode2.default("textord", "--", "text", a, group[i + 1]));
- n -= 1;
- }
- }
- if ((v === "'" || v === "`") && group[i + 1].value === v) {
- group.splice(i, 2, new _ParseNode2.default("textord", v + v, "text", a, group[i + 1]));
- n -= 1;
- }
- }
- },
-
- /**
- * Parse a single symbol out of the string. Here, we handle both the functions
- * we have defined, as well as the single character symbols
- *
- * @return {?ParseFuncOrArgument}
- */
- },
- {
- key: "parseSymbol",
- value: function parseSymbol() {
- var nucleus = this.nextToken;
-
- if (_functions2.default[nucleus.text]) {
- this.consume();
- // If there exists a function with this name, we return the function and
- // say that it is a function.
- return new ParseFuncOrArgument(nucleus.text, true, nucleus);
- } else if (_symbols2.default[this.mode][nucleus.text]) {
- this.consume();
- // Otherwise if this is a no-argument function, find the type it
- // corresponds to in the symbols map
- return new ParseFuncOrArgument(
- new _ParseNode2.default(_symbols2.default[this.mode][nucleus.text].group, nucleus.text, this.mode, nucleus),
- false,
- nucleus
- );
- } else if (this.mode === "text" && _unicodeRegexes.cjkRegex.test(nucleus.text)) {
- this.consume();
- return new ParseFuncOrArgument(new _ParseNode2.default("textord", nucleus.text, this.mode, nucleus), false, nucleus);
- } else if (nucleus.text === "$") {
- return new ParseFuncOrArgument(nucleus.text, false, nucleus);
- } else {
- return null;
- }
- },
- },
- ]);
- return Parser;
- })();
-
- Parser.endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"];
- Parser.SUPSUB_GREEDINESS = 1;
- Parser.sizeFuncs = [
- "\\tiny",
- "\\sixptsize",
- "\\scriptsize",
- "\\footnotesize",
- "\\small",
- "\\normalsize",
- "\\large",
- "\\Large",
- "\\LARGE",
- "\\huge",
- "\\Huge",
- ];
- Parser.styleFuncs = ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"];
- Parser.oldFontFuncs = {
- "\\rm": "mathrm",
- "\\sf": "mathsf",
- "\\tt": "mathtt",
- "\\bf": "mathbf",
- "\\it": "mathit",
- };
-
- Parser.prototype.ParseNode = _ParseNode2.default;
-
- module.exports = Parser;
- },
- {
- "./MacroExpander": 27,
- "./ParseError": 29,
- "./ParseNode": 30,
- "./environments": 40,
- "./functions": 43,
- "./symbols": 48,
- "./unicodeRegexes": 49,
- "./units": 50,
- "./utils": 51,
- "babel-runtime/helpers/classCallCheck": 4,
- "babel-runtime/helpers/createClass": 5,
- },
- ],
- 32: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * The main Settings object
- *
- * The current options stored are:
- * - displayMode: Whether the expression should be typeset as inline math
- * (false, the default), meaning that the math starts in
- * \textstyle and is placed in an inline-block); or as display
- * math (true), meaning that the math starts in \displaystyle
- * and is placed in a block with vertical margin.
- */
- var Settings = function Settings(options) {
- (0, _classCallCheck3.default)(this, Settings);
-
- // allow null options
- options = options || {};
- this.displayMode = _utils2.default.deflt(options.displayMode, false);
- this.throwOnError = _utils2.default.deflt(options.throwOnError, true);
- this.errorColor = _utils2.default.deflt(options.errorColor, "#cc0000");
- this.macros = options.macros || {};
- this.colorIsTextColor = _utils2.default.deflt(options.colorIsTextColor, false);
- }; /**
- * This is a module for storing settings passed into KaTeX. It correctly handles
- * default settings.
- */
-
- module.exports = Settings;
- },
- {
- "./utils": 51,
- "babel-runtime/helpers/classCallCheck": 4,
- },
- ],
- 33: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- var _createClass2 = require("babel-runtime/helpers/createClass");
-
- var _createClass3 = _interopRequireDefault(_createClass2);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * This file contains information and classes for the various kinds of styles
- * used in TeX. It provides a generic `Style` class, which holds information
- * about a specific style. It then provides instances of all the different kinds
- * of styles possible, and provides functions to move between them and get
- * information about them.
- */
-
- /**
- * The main style class. Contains a unique id for the style, a size (which is
- * the same for cramped and uncramped version of a style), and a cramped flag.
- */
- var Style = (function () {
- function Style(id, size, cramped) {
- (0, _classCallCheck3.default)(this, Style);
-
- this.id = id;
- this.size = size;
- this.cramped = cramped;
- }
-
- /**
- * Get the style of a superscript given a base in the current style.
- */
-
- (0, _createClass3.default)(Style, [
- {
- key: "sup",
- value: function sup() {
- return styles[_sup[this.id]];
- },
-
- /**
- * Get the style of a subscript given a base in the current style.
- */
- },
- {
- key: "sub",
- value: function sub() {
- return styles[_sub[this.id]];
- },
-
- /**
- * Get the style of a fraction numerator given the fraction in the current
- * style.
- */
- },
- {
- key: "fracNum",
- value: function fracNum() {
- return styles[_fracNum[this.id]];
- },
-
- /**
- * Get the style of a fraction denominator given the fraction in the current
- * style.
- */
- },
- {
- key: "fracDen",
- value: function fracDen() {
- return styles[_fracDen[this.id]];
- },
-
- /**
- * Get the cramped version of a style (in particular, cramping a cramped style
- * doesn't change the style).
- */
- },
- {
- key: "cramp",
- value: function cramp() {
- return styles[_cramp[this.id]];
- },
-
- /**
- * Get a text or display version of this style.
- */
- },
- {
- key: "text",
- value: function text() {
- return styles[_text[this.id]];
- },
-
- /**
- * Return if this style is tightly spaced (scriptstyle/scriptscriptstyle)
- */
- },
- {
- key: "isTight",
- value: function isTight() {
- return this.size >= 2;
- },
- },
- ]);
- return Style;
- })();
-
- // IDs of the different styles
-
- var D = 0;
- var Dc = 1;
- var T = 2;
- var Tc = 3;
- var S = 4;
- var Sc = 5;
- var SS = 6;
- var SSc = 7;
-
- // Instances of the different styles
- var styles = [
- new Style(D, 0, false),
- new Style(Dc, 0, true),
- new Style(T, 1, false),
- new Style(Tc, 1, true),
- new Style(S, 2, false),
- new Style(Sc, 2, true),
- new Style(SS, 3, false),
- new Style(SSc, 3, true),
- ];
-
- // Lookup tables for switching from one style to another
- var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
- var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
- var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
- var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
- var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
- var _text = [D, Dc, T, Tc, T, Tc, T, Tc];
-
- // We only export some of the styles. Also, we don't export the `Style` class so
- // no more styles can be generated.
- module.exports = {
- DISPLAY: styles[D],
- TEXT: styles[T],
- SCRIPT: styles[S],
- SCRIPTSCRIPT: styles[SS],
- };
- },
- {
- "babel-runtime/helpers/classCallCheck": 4,
- "babel-runtime/helpers/createClass": 5,
- },
- ],
- 34: [
- function (require, module, exports) {
- var _domTree = require("./domTree");
-
- var _domTree2 = _interopRequireDefault(_domTree);
-
- var _fontMetrics = require("./fontMetrics");
-
- var _fontMetrics2 = _interopRequireDefault(_fontMetrics);
-
- var _symbols = require("./symbols");
-
- var _symbols2 = _interopRequireDefault(_symbols);
-
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- // The following have to be loaded from Main-Italic font, using class mainit
- /* eslint no-console:0 */
- /**
- * This module contains general functions that can be used for building
- * different kinds of domTree nodes in a consistent manner.
- */
-
- var mainitLetters = [
- "\\imath", // dotless i
- "\\jmath", // dotless j
- "\\pounds",
- ];
-
- /**
- * Looks up the given symbol in fontMetrics, after applying any symbol
- * replacements defined in symbol.js
- */
- var lookupSymbol = function lookupSymbol(value, fontFamily, mode) {
- // Replace the value with its replaced value from symbol.js
- if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) {
- value = _symbols2.default[mode][value].replace;
- }
- return {
- value: value,
- metrics: _fontMetrics2.default.getCharacterMetrics(value, fontFamily),
- };
- };
-
- /**
- * Makes a symbolNode after translation via the list of symbols in symbols.js.
- * Correctly pulls out metrics for the character, and optionally takes a list of
- * classes to be attached to the node.
- *
- * TODO: make argument order closer to makeSpan
- * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
- * should if present come first in `classes`.
- */
- var makeSymbol = function makeSymbol(value, fontFamily, mode, options, classes) {
- var lookup = lookupSymbol(value, fontFamily, mode);
- var metrics = lookup.metrics;
- value = lookup.value;
-
- var symbolNode = void 0;
- if (metrics) {
- var italic = metrics.italic;
- if (mode === "text") {
- italic = 0;
- }
- symbolNode = new _domTree2.default.symbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, classes);
- } else {
- // TODO(emily): Figure out a good way to only print this in development
- typeof console !== "undefined" && console.warn("No character metrics for '" + value + "' in style '" + fontFamily + "'");
- symbolNode = new _domTree2.default.symbolNode(value, 0, 0, 0, 0, classes);
- }
-
- if (options) {
- symbolNode.maxFontSize = options.sizeMultiplier;
- if (options.style.isTight()) {
- symbolNode.classes.push("mtight");
- }
- if (options.getColor()) {
- symbolNode.style.color = options.getColor();
- }
- }
-
- return symbolNode;
- };
-
- /**
- * Makes a symbol in Main-Regular or AMS-Regular.
- * Used for rel, bin, open, close, inner, and punct.
- */
- var mathsym = function mathsym(value, mode, options, classes) {
- // Decide what font to render the symbol in by its entry in the symbols
- // table.
- // Have a special case for when the value = \ because the \ is used as a
- // textord in unsupported command errors but cannot be parsed as a regular
- // text ordinal and is therefore not present as a symbol in the symbols
- // table for text
- if (value === "\\" || _symbols2.default[mode][value].font === "main") {
- return makeSymbol(value, "Main-Regular", mode, options, classes);
- } else {
- return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
- }
- };
-
- /**
- * Makes a symbol in the default font for mathords and textords.
- */
- var mathDefault = function mathDefault(value, mode, options, classes, type) {
- if (type === "mathord") {
- var fontLookup = mathit(value);
- return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass]));
- } else if (type === "textord") {
- var font = _symbols2.default[mode][value] && _symbols2.default[mode][value].font;
- if (font === "ams") {
- return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
- } else {
- // if (font === "main") {
- return makeSymbol(value, "Main-Regular", mode, options, classes.concat(["mathrm"]));
- }
- } else {
- throw new Error("unexpected type: " + type + " in mathDefault");
- }
- };
-
- /**
- * Determines which of the two font names (Main-Italic and Math-Italic) and
- * corresponding style tags (mainit or mathit) to use for font "mathit",
- * depending on the symbol. Use this function instead of fontMap for font
- * "mathit".
- */
- var mathit = function mathit(value, mode, options, classes) {
- if (
- /[0-9]/.test(value.charAt(0)) ||
- // glyphs for \imath and \jmath do not exist in Math-Italic so we
- // need to use Main-Italic instead
- _utils2.default.contains(mainitLetters, value)
- ) {
- return {
- fontName: "Main-Italic",
- fontClass: "mainit",
- };
- } else {
- return {
- fontName: "Math-Italic",
- fontClass: "mathit",
- };
- }
- };
-
- /**
- * Makes either a mathord or textord in the correct font and color.
- */
- var makeOrd = function makeOrd(group, options, type) {
- var mode = group.mode;
- var value = group.value;
-
- var classes = ["mord"];
-
- var font = options.font;
- if (font) {
- var fontLookup = void 0;
- if (font === "mathit" || _utils2.default.contains(mainitLetters, value)) {
- fontLookup = mathit(value);
- } else {
- fontLookup = fontMap[font];
- }
- if (lookupSymbol(value, fontLookup.fontName, mode).metrics) {
- return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass || font]));
- } else {
- return mathDefault(value, mode, options, classes, type);
- }
- } else {
- return mathDefault(value, mode, options, classes, type);
- }
- };
-
- /**
- * Calculate the height, depth, and maxFontSize of an element based on its
- * children.
- */
- var sizeElementFromChildren = function sizeElementFromChildren(elem) {
- var height = 0;
- var depth = 0;
- var maxFontSize = 0;
-
- if (elem.children) {
- for (var i = 0; i < elem.children.length; i++) {
- if (elem.children[i].height > height) {
- height = elem.children[i].height;
- }
- if (elem.children[i].depth > depth) {
- depth = elem.children[i].depth;
- }
- if (elem.children[i].maxFontSize > maxFontSize) {
- maxFontSize = elem.children[i].maxFontSize;
- }
- }
- }
-
- elem.height = height;
- elem.depth = depth;
- elem.maxFontSize = maxFontSize;
- };
-
- /**
- * Makes a span with the given list of classes, list of children, and options.
- *
- * TODO: Ensure that `options` is always provided (currently some call sites
- * don't pass it).
- * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
- * should if present come first in `classes`.
- */
- var makeSpan = function makeSpan(classes, children, options) {
- var span = new _domTree2.default.span(classes, children, options);
-
- sizeElementFromChildren(span);
-
- return span;
- };
-
- /**
- * Prepends the given children to the given span, updating height, depth, and
- * maxFontSize.
- */
- var prependChildren = function prependChildren(span, children) {
- span.children = children.concat(span.children);
-
- sizeElementFromChildren(span);
- };
-
- /**
- * Makes a document fragment with the given list of children.
- */
- var makeFragment = function makeFragment(children) {
- var fragment = new _domTree2.default.documentFragment(children);
-
- sizeElementFromChildren(fragment);
-
- return fragment;
- };
-
- /**
- * Makes a vertical list by stacking elements and kerns on top of each other.
- * Allows for many different ways of specifying the positioning method.
- *
- * Arguments:
- * - children: A list of child or kern nodes to be stacked on top of each other
- * (i.e. the first element will be at the bottom, and the last at
- * the top). Element nodes are specified as
- * {type: "elem", elem: node}
- * while kern nodes are specified as
- * {type: "kern", size: size}
- * - positionType: The method by which the vlist should be positioned. Valid
- * values are:
- * - "individualShift": The children list only contains elem
- * nodes, and each node contains an extra
- * "shift" value of how much it should be
- * shifted (note that shifting is always
- * moving downwards). positionData is
- * ignored.
- * - "top": The positionData specifies the topmost point of
- * the vlist (note this is expected to be a height,
- * so positive values move up)
- * - "bottom": The positionData specifies the bottommost point
- * of the vlist (note this is expected to be a
- * depth, so positive values move down
- * - "shift": The vlist will be positioned such that its
- * baseline is positionData away from the baseline
- * of the first child. Positive values move
- * downwards.
- * - "firstBaseline": The vlist will be positioned such that
- * its baseline is aligned with the
- * baseline of the first child.
- * positionData is ignored. (this is
- * equivalent to "shift" with
- * positionData=0)
- * - positionData: Data used in different ways depending on positionType
- * - options: An Options object
- *
- */
- var makeVList = function makeVList(children, positionType, positionData, options) {
- var depth = void 0;
- var currPos = void 0;
- var i = void 0;
- if (positionType === "individualShift") {
- var oldChildren = children;
- children = [oldChildren[0]];
-
- // Add in kerns to the list of children to get each element to be
- // shifted to the correct specified shift
- depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
- currPos = depth;
- for (i = 1; i < oldChildren.length; i++) {
- var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;
- var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);
-
- currPos = currPos + diff;
-
- children.push({
- type: "kern",
- size: size,
- });
- children.push(oldChildren[i]);
- }
- } else if (positionType === "top") {
- // We always start at the bottom, so calculate the bottom by adding up
- // all the sizes
- var bottom = positionData;
- for (i = 0; i < children.length; i++) {
- if (children[i].type === "kern") {
- bottom -= children[i].size;
- } else {
- bottom -= children[i].elem.height + children[i].elem.depth;
- }
- }
- depth = bottom;
- } else if (positionType === "bottom") {
- depth = -positionData;
- } else if (positionType === "shift") {
- depth = -children[0].elem.depth - positionData;
- } else if (positionType === "firstBaseline") {
- depth = -children[0].elem.depth;
- } else {
- depth = 0;
- }
-
- // Create a strut that is taller than any list item. The strut is added to
- // each item, where it will determine the item's baseline. Since it has
- // `overflow:hidden`, the strut's top edge will sit on the item's line box's
- // top edge and the strut's bottom edge will sit on the item's baseline,
- // with no additional line-height spacing. This allows the item baseline to
- // be positioned precisely without worrying about font ascent and
- // line-height.
- var pstrutSize = 0;
- for (i = 0; i < children.length; i++) {
- if (children[i].type === "elem") {
- var child = children[i].elem;
- pstrutSize = Math.max(pstrutSize, child.maxFontSize, child.height);
- }
- }
- pstrutSize += 2;
- var pstrut = makeSpan(["pstrut"], []);
- pstrut.style.height = pstrutSize + "em";
-
- // Create a new list of actual children at the correct offsets
- var realChildren = [];
- var minPos = depth;
- var maxPos = depth;
- currPos = depth;
- for (i = 0; i < children.length; i++) {
- if (children[i].type === "kern") {
- currPos += children[i].size;
- } else {
- var _child = children[i].elem;
-
- var childWrap = makeSpan([], [pstrut, _child]);
- childWrap.style.top = -pstrutSize - currPos - _child.depth + "em";
- if (children[i].marginLeft) {
- childWrap.style.marginLeft = children[i].marginLeft;
- }
- if (children[i].marginRight) {
- childWrap.style.marginRight = children[i].marginRight;
- }
-
- realChildren.push(childWrap);
- currPos += _child.height + _child.depth;
- }
- minPos = Math.min(minPos, currPos);
- maxPos = Math.max(maxPos, currPos);
- }
-
- // The vlist contents go in a table-cell with `vertical-align:bottom`.
- // This cell's bottom edge will determine the containing table's baseline
- // without overly expanding the containing line-box.
- var vlist = makeSpan(["vlist"], realChildren);
- vlist.style.height = maxPos + "em";
-
- // A second row is used if necessary to represent the vlist's depth.
- var rows = void 0;
- if (minPos < 0) {
- var depthStrut = makeSpan(["vlist"], []);
- depthStrut.style.height = -minPos + "em";
-
- // Safari wants the first row to have inline content; otherwise it
- // puts the bottom of the *second* row on the baseline.
- var topStrut = makeSpan(["vlist-s"], [new _domTree2.default.symbolNode("\u200B")]);
-
- rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])];
- } else {
- rows = [makeSpan(["vlist-r"], [vlist])];
- }
-
- var vtable = makeSpan(["vlist-t"], rows);
- if (rows.length === 2) {
- vtable.classes.push("vlist-t2");
- }
- vtable.height = maxPos;
- vtable.depth = -minPos;
- return vtable;
- };
-
- // A map of spacing functions to their attributes, like size and corresponding
- // CSS class
- var spacingFunctions = {
- "\\qquad": {
- size: "2em",
- className: "qquad",
- },
- "\\quad": {
- size: "1em",
- className: "quad",
- },
- "\\enspace": {
- size: "0.5em",
- className: "enspace",
- },
- "\\;": {
- size: "0.277778em",
- className: "thickspace",
- },
- "\\:": {
- size: "0.22222em",
- className: "mediumspace",
- },
- "\\,": {
- size: "0.16667em",
- className: "thinspace",
- },
- "\\!": {
- size: "-0.16667em",
- className: "negativethinspace",
- },
- };
-
- /**
- * Maps TeX font commands to objects containing:
- * - variant: string used for "mathvariant" attribute in buildMathML.js
- * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics
- */
- // A map between tex font commands an MathML mathvariant attribute values
- var fontMap = {
- // styles
- mathbf: {
- variant: "bold",
- fontName: "Main-Bold",
- },
- mathrm: {
- variant: "normal",
- fontName: "Main-Regular",
- },
- textit: {
- variant: "italic",
- fontName: "Main-Italic",
- },
-
- // "mathit" is missing because it requires the use of two fonts: Main-Italic
- // and Math-Italic. This is handled by a special case in makeOrd which ends
- // up calling mathit.
-
- // families
- mathbb: {
- variant: "double-struck",
- fontName: "AMS-Regular",
- },
- mathcal: {
- variant: "script",
- fontName: "Caligraphic-Regular",
- },
- mathfrak: {
- variant: "fraktur",
- fontName: "Fraktur-Regular",
- },
- mathscr: {
- variant: "script",
- fontName: "Script-Regular",
- },
- mathsf: {
- variant: "sans-serif",
- fontName: "SansSerif-Regular",
- },
- mathtt: {
- variant: "monospace",
- fontName: "Typewriter-Regular",
- },
- };
-
- module.exports = {
- fontMap: fontMap,
- makeSymbol: makeSymbol,
- mathsym: mathsym,
- makeSpan: makeSpan,
- makeFragment: makeFragment,
- makeVList: makeVList,
- makeOrd: makeOrd,
- prependChildren: prependChildren,
- spacingFunctions: spacingFunctions,
- };
- },
- {
- "./domTree": 39,
- "./fontMetrics": 41,
- "./symbols": 48,
- "./utils": 51,
- },
- ],
- 35: [
- function (require, module, exports) {
- var _stringify = require("babel-runtime/core-js/json/stringify");
-
- var _stringify2 = _interopRequireDefault(_stringify);
-
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- var _Style = require("./Style");
-
- var _Style2 = _interopRequireDefault(_Style);
-
- var _buildCommon = require("./buildCommon");
-
- var _buildCommon2 = _interopRequireDefault(_buildCommon);
-
- var _delimiter = require("./delimiter");
-
- var _delimiter2 = _interopRequireDefault(_delimiter);
-
- var _domTree = require("./domTree");
-
- var _domTree2 = _interopRequireDefault(_domTree);
-
- var _units = require("./units");
-
- var _units2 = _interopRequireDefault(_units);
-
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- var _stretchy = require("./stretchy");
-
- var _stretchy2 = _interopRequireDefault(_stretchy);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /* eslint no-console:0 */
- /**
- * This file does the main work of building a domTree structure from a parse
- * tree. The entry point is the `buildHTML` function, which takes a parse tree.
- * Then, the buildExpression, buildGroup, and various groupTypes functions are
- * called, to produce a final HTML tree.
- */
-
- var isSpace = function isSpace(node) {
- return node instanceof _domTree2.default.span && node.classes[0] === "mspace";
- };
-
- // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)
- // depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,
- // and the text before Rule 19.
- var isBin = function isBin(node) {
- return node && node.classes[0] === "mbin";
- };
-
- var isBinLeftCanceller = function isBinLeftCanceller(node, isRealGroup) {
- // TODO: This code assumes that a node's math class is the first element
- // of its `classes` array. A later cleanup should ensure this, for
- // instance by changing the signature of `makeSpan`.
- if (node) {
- return _utils2.default.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], node.classes[0]);
- } else {
- return isRealGroup;
- }
- };
-
- var isBinRightCanceller = function isBinRightCanceller(node, isRealGroup) {
- if (node) {
- return _utils2.default.contains(["mrel", "mclose", "mpunct"], node.classes[0]);
- } else {
- return isRealGroup;
- }
- };
-
- /**
- * Splice out any spaces from `children` starting at position `i`, and return
- * the spliced-out array. Returns null if `children[i]` does not exist or is not
- * a space.
- */
- var spliceSpaces = function spliceSpaces(children, i) {
- var j = i;
- while (j < children.length && isSpace(children[j])) {
- j++;
- }
- if (j === i) {
- return null;
- } else {
- return children.splice(i, j - i);
- }
- };
-
- /**
- * Take a list of nodes, build them in order, and return a list of the built
- * nodes. documentFragments are flattened into their contents, so the
- * returned list contains no fragments. `isRealGroup` is true if `expression`
- * is a real group (no atoms will be added on either side), as opposed to
- * a partial group (e.g. one created by \color).
- */
- var buildExpression = function buildExpression(expression, options, isRealGroup) {
- // Parse expressions into `groups`.
- var groups = [];
- for (var i = 0; i < expression.length; i++) {
- var group = expression[i];
- var output = buildGroup(group, options);
- if (output instanceof _domTree2.default.documentFragment) {
- Array.prototype.push.apply(groups, output.children);
- } else {
- groups.push(output);
- }
- }
- // At this point `groups` consists entirely of `symbolNode`s and `span`s.
-
- // Explicit spaces (e.g., \;, \,) should be ignored with respect to atom
- // spacing (e.g., "add thick space between mord and mrel"). Since CSS
- // adjacency rules implement atom spacing, spaces should be invisible to
- // CSS. So we splice them out of `groups` and into the atoms themselves.
- for (var _i = 0; _i < groups.length; _i++) {
- var spaces = spliceSpaces(groups, _i);
- if (spaces) {
- // Splicing of spaces may have removed all remaining groups.
- if (_i < groups.length) {
- // If there is a following group, move space within it.
- if (groups[_i] instanceof _domTree2.default.symbolNode) {
- groups[_i] = (0, _buildCommon.makeSpan)([].concat(groups[_i].classes), [groups[_i]]);
- }
- _buildCommon2.default.prependChildren(groups[_i], spaces);
- } else {
- // Otherwise, put any spaces back at the end of the groups.
- Array.prototype.push.apply(groups, spaces);
- break;
- }
- }
- }
-
- // Binary operators change to ordinary symbols in some contexts.
- for (var _i2 = 0; _i2 < groups.length; _i2++) {
- if (isBin(groups[_i2]) && (isBinLeftCanceller(groups[_i2 - 1], isRealGroup) || isBinRightCanceller(groups[_i2 + 1], isRealGroup))) {
- groups[_i2].classes[0] = "mord";
- }
- }
-
- // Process \\not commands within the group.
- // TODO(kevinb): Handle multiple \\not commands in a row.
- // TODO(kevinb): Handle \\not{abc} correctly. The \\not should appear over
- // the 'a' instead of the 'c'.
- for (var _i3 = 0; _i3 < groups.length; _i3++) {
- if (groups[_i3].value === "\u0338" && _i3 + 1 < groups.length) {
- var children = groups.slice(_i3, _i3 + 2);
-
- children[0].classes = ["mainrm"];
- // \u0338 is a combining glyph so we could reorder the children so
- // that it comes after the other glyph. This works correctly on
- // most browsers except for Safari. Instead we absolutely position
- // the glyph and set its right side to match that of the other
- // glyph which is visually equivalent.
- children[0].style.position = "absolute";
- children[0].style.right = "0";
-
- // Copy the classes from the second glyph to the new container.
- // This is so it behaves the same as though there was no \\not.
- var classes = groups[_i3 + 1].classes;
- var container = (0, _buildCommon.makeSpan)(classes, children);
-
- // LaTeX adds a space between ords separated by a \\not.
- if (classes.indexOf("mord") !== -1) {
- // \glue(\thickmuskip) 2.77771 plus 2.77771
- container.style.paddingLeft = "0.277771em";
- }
-
- // Ensure that the \u0338 is positioned relative to the container.
- container.style.position = "relative";
- groups.splice(_i3, 2, container);
- }
- }
-
- return groups;
- };
-
- // Return math atom class (mclass) of a domTree.
- var getTypeOfDomTree = function getTypeOfDomTree(node) {
- if (node instanceof _domTree2.default.documentFragment) {
- if (node.children.length) {
- return getTypeOfDomTree(node.children[node.children.length - 1]);
- }
- } else {
- if (_utils2.default.contains(["mord", "mop", "mbin", "mrel", "mopen", "mclose", "mpunct", "minner"], node.classes[0])) {
- return node.classes[0];
- }
- }
- return null;
- };
-
- /**
- * Sometimes, groups perform special rules when they have superscripts or
- * subscripts attached to them. This function lets the `supsub` group know that
- * its inner element should handle the superscripts and subscripts instead of
- * handling them itself.
- */
- var shouldHandleSupSub = function shouldHandleSupSub(group, options) {
- if (!group.value.base) {
- return false;
- } else {
- var base = group.value.base;
- if (base.type === "op") {
- // Operators handle supsubs differently when they have limits
- // (e.g. `\displaystyle\sum_2^3`)
- return base.value.limits && (options.style.size === _Style2.default.DISPLAY.size || base.value.alwaysHandleSupSub);
- } else if (base.type === "accent") {
- return isCharacterBox(base.value.base);
- } else if (base.type === "horizBrace") {
- var isSup = group.value.sub ? false : true;
- return isSup === base.value.isOver;
- } else {
- return null;
- }
- }
- };
-
- /**
- * Sometimes we want to pull out the innermost element of a group. In most
- * cases, this will just be the group itself, but when ordgroups and colors have
- * a single element, we want to pull that out.
- */
- var getBaseElem = function getBaseElem(group) {
- if (!group) {
- return false;
- } else if (group.type === "ordgroup") {
- if (group.value.length === 1) {
- return getBaseElem(group.value[0]);
- } else {
- return group;
- }
- } else if (group.type === "color") {
- if (group.value.value.length === 1) {
- return getBaseElem(group.value.value[0]);
- } else {
- return group;
- }
- } else if (group.type === "font") {
- return getBaseElem(group.value.body);
- } else {
- return group;
- }
- };
-
- /**
- * TeXbook algorithms often reference "character boxes", which are simply groups
- * with a single character in them. To decide if something is a character box,
- * we find its innermost group, and see if it is a single character.
- */
- var isCharacterBox = function isCharacterBox(group) {
- var baseElem = getBaseElem(group);
-
- // These are all they types of groups which hold single characters
- return (
- baseElem.type === "mathord" ||
- baseElem.type === "textord" ||
- baseElem.type === "bin" ||
- baseElem.type === "rel" ||
- baseElem.type === "inner" ||
- baseElem.type === "open" ||
- baseElem.type === "close" ||
- baseElem.type === "punct"
- );
- };
-
- var makeNullDelimiter = function makeNullDelimiter(options, classes) {
- var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses());
- return (0, _buildCommon.makeSpan)(classes.concat(moreClasses));
- };
-
- /**
- * This is a map of group types to the function used to handle that type.
- * Simpler types come at the beginning, while complicated types come afterwards.
- */
- var groupTypes = {};
-
- groupTypes.mathord = function (group, options) {
- return _buildCommon2.default.makeOrd(group, options, "mathord");
- };
-
- groupTypes.textord = function (group, options) {
- return _buildCommon2.default.makeOrd(group, options, "textord");
- };
-
- groupTypes.bin = function (group, options) {
- return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mbin"]);
- };
-
- groupTypes.rel = function (group, options) {
- return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mrel"]);
- };
-
- groupTypes.open = function (group, options) {
- return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mopen"]);
- };
-
- groupTypes.close = function (group, options) {
- return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mclose"]);
- };
-
- groupTypes.inner = function (group, options) {
- return _buildCommon2.default.mathsym(group.value, group.mode, options, ["minner"]);
- };
-
- groupTypes.punct = function (group, options) {
- return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mpunct"]);
- };
-
- groupTypes.ordgroup = function (group, options) {
- return (0, _buildCommon.makeSpan)(["mord"], buildExpression(group.value, options, true), options);
- };
-
- groupTypes.text = function (group, options) {
- var newOptions = options.withFont(group.value.style);
- var inner = buildExpression(group.value.body, newOptions, true);
- for (var i = 0; i < inner.length - 1; i++) {
- if (inner[i].tryCombine(inner[i + 1])) {
- inner.splice(i + 1, 1);
- i--;
- }
- }
- return (0, _buildCommon.makeSpan)(["mord", "text"], inner, newOptions);
- };
-
- groupTypes.color = function (group, options) {
- var elements = buildExpression(group.value.value, options.withColor(group.value.color), false);
-
- // \color isn't supposed to affect the type of the elements it contains.
- // To accomplish this, we wrap the results in a fragment, so the inner
- // elements will be able to directly interact with their neighbors. For
- // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3`
- return new _buildCommon2.default.makeFragment(elements);
- };
-
- groupTypes.supsub = function (group, options) {
- // Superscript and subscripts are handled in the TeXbook on page
- // 445-446, rules 18(a-f).
-
- // Here is where we defer to the inner group if it should handle
- // superscripts and subscripts itself.
- if (shouldHandleSupSub(group, options)) {
- return groupTypes[group.value.base.type](group, options);
- }
-
- var base = buildGroup(group.value.base, options);
- var supm = void 0;
- var subm = void 0;
-
- var metrics = options.fontMetrics();
- var newOptions = void 0;
-
- // Rule 18a
- var supShift = 0;
- var subShift = 0;
-
- if (group.value.sup) {
- newOptions = options.havingStyle(options.style.sup());
- supm = buildGroup(group.value.sup, newOptions, options);
- if (!isCharacterBox(group.value.base)) {
- supShift = base.height - (newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier) / options.sizeMultiplier;
- }
- }
-
- if (group.value.sub) {
- newOptions = options.havingStyle(options.style.sub());
- subm = buildGroup(group.value.sub, newOptions, options);
- if (!isCharacterBox(group.value.base)) {
- subShift = base.depth + (newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier) / options.sizeMultiplier;
- }
- }
-
- // Rule 18c
- var minSupShift = void 0;
- if (options.style === _Style2.default.DISPLAY) {
- minSupShift = metrics.sup1;
- } else if (options.style.cramped) {
- minSupShift = metrics.sup3;
- } else {
- minSupShift = metrics.sup2;
- }
-
- // scriptspace is a font-size-independent size, so scale it
- // appropriately
- var multiplier = options.sizeMultiplier;
- var scriptspace = 0.5 / metrics.ptPerEm / multiplier + "em";
-
- var supsub = void 0;
- if (!group.value.sup) {
- // Rule 18b
- subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);
-
- var vlistElem = [
- {
- type: "elem",
- elem: subm,
- marginRight: scriptspace,
- },
- ];
- // Subscripts shouldn't be shifted by the base's italic correction.
- // Account for that by shifting the subscript back the appropriate
- // amount. Note we only do this when the base is a single symbol.
- if (base instanceof _domTree2.default.symbolNode) {
- vlistElem[0].marginLeft = -base.italic + "em";
- }
-
- supsub = _buildCommon2.default.makeVList(vlistElem, "shift", subShift, options);
- } else if (!group.value.sub) {
- // Rule 18c, d
- supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
-
- supsub = _buildCommon2.default.makeVList(
- [
- {
- type: "elem",
- elem: supm,
- marginRight: scriptspace,
- },
- ],
- "shift",
- -supShift,
- options
- );
- } else {
- supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
- subShift = Math.max(subShift, metrics.sub2);
-
- var ruleWidth = metrics.defaultRuleThickness;
-
- // Rule 18e
- if (supShift - supm.depth - (subm.height - subShift) < 4 * ruleWidth) {
- subShift = 4 * ruleWidth - (supShift - supm.depth) + subm.height;
- var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);
- if (psi > 0) {
- supShift += psi;
- subShift -= psi;
- }
- }
-
- var _vlistElem = [
- {
- type: "elem",
- elem: subm,
- shift: subShift,
- marginRight: scriptspace,
- },
- {
- type: "elem",
- elem: supm,
- shift: -supShift,
- marginRight: scriptspace,
- },
- ];
- // See comment above about subscripts not being shifted
- if (base instanceof _domTree2.default.symbolNode) {
- _vlistElem[0].marginLeft = -base.italic + "em";
- }
-
- supsub = _buildCommon2.default.makeVList(_vlistElem, "individualShift", null, options);
- }
-
- // We ensure to wrap the supsub vlist in a span.msupsub to reset text-align
- var mclass = getTypeOfDomTree(base) || "mord";
- return (0, _buildCommon.makeSpan)([mclass], [base, (0, _buildCommon.makeSpan)(["msupsub"], [supsub])], options);
- };
-
- groupTypes.genfrac = function (group, options) {
- // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
- // Figure out what style this fraction should be in based on the
- // function used
- var style = options.style;
- if (group.value.size === "display") {
- style = _Style2.default.DISPLAY;
- } else if (group.value.size === "text") {
- style = _Style2.default.TEXT;
- }
-
- var nstyle = style.fracNum();
- var dstyle = style.fracDen();
- var newOptions = void 0;
-
- newOptions = options.havingStyle(nstyle);
- var numerm = buildGroup(group.value.numer, newOptions, options);
-
- newOptions = options.havingStyle(dstyle);
- var denomm = buildGroup(group.value.denom, newOptions, options);
-
- var rule = void 0;
- var ruleWidth = void 0;
- var ruleSpacing = void 0;
- if (group.value.hasBarLine) {
- rule = makeLineSpan("frac-line", options);
- ruleWidth = rule.height;
- ruleSpacing = rule.height;
- } else {
- rule = null;
- ruleWidth = 0;
- ruleSpacing = options.fontMetrics().defaultRuleThickness;
- }
-
- // Rule 15b
- var numShift = void 0;
- var clearance = void 0;
- var denomShift = void 0;
- if (style.size === _Style2.default.DISPLAY.size) {
- numShift = options.fontMetrics().num1;
- if (ruleWidth > 0) {
- clearance = 3 * ruleSpacing;
- } else {
- clearance = 7 * ruleSpacing;
- }
- denomShift = options.fontMetrics().denom1;
- } else {
- if (ruleWidth > 0) {
- numShift = options.fontMetrics().num2;
- clearance = ruleSpacing;
- } else {
- numShift = options.fontMetrics().num3;
- clearance = 3 * ruleSpacing;
- }
- denomShift = options.fontMetrics().denom2;
- }
-
- var frac = void 0;
- if (ruleWidth === 0) {
- // Rule 15c
- var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);
- if (candidateClearance < clearance) {
- numShift += 0.5 * (clearance - candidateClearance);
- denomShift += 0.5 * (clearance - candidateClearance);
- }
-
- frac = _buildCommon2.default.makeVList(
- [
- {
- type: "elem",
- elem: denomm,
- shift: denomShift,
- },
- {
- type: "elem",
- elem: numerm,
- shift: -numShift,
- },
- ],
- "individualShift",
- null,
- options
- );
- } else {
- // Rule 15d
- var axisHeight = options.fontMetrics().axisHeight;
-
- if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {
- numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));
- }
-
- if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {
- denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));
- }
-
- var midShift = -(axisHeight - 0.5 * ruleWidth);
-
- frac = _buildCommon2.default.makeVList(
- [
- {
- type: "elem",
- elem: denomm,
- shift: denomShift,
- },
- {
- type: "elem",
- elem: rule,
- shift: midShift,
- },
- {
- type: "elem",
- elem: numerm,
- shift: -numShift,
- },
- ],
- "individualShift",
- null,
- options
- );
- }
-
- // Since we manually change the style sometimes (with \dfrac or \tfrac),
- // account for the possible size change here.
- newOptions = options.havingStyle(style);
- frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;
- frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier;
-
- // Rule 15e
- var delimSize = void 0;
- if (style.size === _Style2.default.DISPLAY.size) {
- delimSize = options.fontMetrics().delim1;
- } else {
- delimSize = options.fontMetrics().delim2;
- }
-
- var leftDelim = void 0;
- var rightDelim = void 0;
- if (group.value.leftDelim == null) {
- leftDelim = makeNullDelimiter(options, ["mopen"]);
- } else {
- leftDelim = _delimiter2.default.customSizedDelim(group.value.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [
- "mopen",
- ]);
- }
- if (group.value.rightDelim == null) {
- rightDelim = makeNullDelimiter(options, ["mclose"]);
- } else {
- rightDelim = _delimiter2.default.customSizedDelim(group.value.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [
- "mclose",
- ]);
- }
-
- return (0, _buildCommon.makeSpan)(
- ["mord"].concat(newOptions.sizingClasses(options)),
- [leftDelim, (0, _buildCommon.makeSpan)(["mfrac"], [frac]), rightDelim],
- options
- );
- };
-
- groupTypes.array = function (group, options) {
- var r = void 0;
- var c = void 0;
- var nr = group.value.body.length;
- var nc = 0;
- var body = new Array(nr);
-
- // Horizontal spacing
- var pt = 1 / options.fontMetrics().ptPerEm;
- var arraycolsep = 5 * pt; // \arraycolsep in article.cls
-
- // Vertical spacing
- var baselineskip = 12 * pt; // see size10.clo
- // Default \jot from ltmath.dtx
- // TODO(edemaine): allow overriding \jot via \setlength (#687)
- var jot = 3 * pt;
- // Default \arraystretch from lttab.dtx
- // TODO(gagern): may get redefined once we have user-defined macros
- var arraystretch = _utils2.default.deflt(group.value.arraystretch, 1);
- var arrayskip = arraystretch * baselineskip;
- var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and
- var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx
-
- var totalHeight = 0;
- for (r = 0; r < group.value.body.length; ++r) {
- var inrow = group.value.body[r];
- var height = arstrutHeight; // \@array adds an \@arstrut
- var depth = arstrutDepth; // to each tow (via the template)
-
- if (nc < inrow.length) {
- nc = inrow.length;
- }
-
- var outrow = new Array(inrow.length);
- for (c = 0; c < inrow.length; ++c) {
- var elt = buildGroup(inrow[c], options);
- if (depth < elt.depth) {
- depth = elt.depth;
- }
- if (height < elt.height) {
- height = elt.height;
- }
- outrow[c] = elt;
- }
-
- var gap = 0;
- if (group.value.rowGaps[r]) {
- gap = _units2.default.calculateSize(group.value.rowGaps[r].value, options);
- if (gap > 0) {
- // \@argarraycr
- gap += arstrutDepth;
- if (depth < gap) {
- depth = gap; // \@xargarraycr
- }
- gap = 0;
- }
- }
- // In AMS multiline environments such as aligned and gathered, rows
- // correspond to lines that have additional \jot added to the
- // \baselineskip via \openup.
- if (group.value.addJot) {
- depth += jot;
- }
-
- outrow.height = height;
- outrow.depth = depth;
- totalHeight += height;
- outrow.pos = totalHeight;
- totalHeight += depth + gap; // \@yargarraycr
- body[r] = outrow;
- }
-
- var offset = totalHeight / 2 + options.fontMetrics().axisHeight;
- var colDescriptions = group.value.cols || [];
- var cols = [];
- var colSep = void 0;
- var colDescrNum = void 0;
- for (
- c = 0, colDescrNum = 0;
- // Continue while either there are more columns or more column
- // descriptions, so trailing separators don't get lost.
- c < nc || colDescrNum < colDescriptions.length;
- ++c, ++colDescrNum
- ) {
- var colDescr = colDescriptions[colDescrNum] || {};
-
- var firstSeparator = true;
- while (colDescr.type === "separator") {
- // If there is more than one separator in a row, add a space
- // between them.
- if (!firstSeparator) {
- colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []);
- colSep.style.width = options.fontMetrics().doubleRuleSep + "em";
- cols.push(colSep);
- }
-
- if (colDescr.separator === "|") {
- var separator = (0, _buildCommon.makeSpan)(["vertical-separator"], []);
- separator.style.height = totalHeight + "em";
- separator.style.verticalAlign = -(totalHeight - offset) + "em";
-
- cols.push(separator);
- } else {
- throw new _ParseError2.default("Invalid separator type: " + colDescr.separator);
- }
-
- colDescrNum++;
- colDescr = colDescriptions[colDescrNum] || {};
- firstSeparator = false;
- }
-
- if (c >= nc) {
- continue;
- }
-
- var sepwidth = void 0;
- if (c > 0 || group.value.hskipBeforeAndAfter) {
- sepwidth = _utils2.default.deflt(colDescr.pregap, arraycolsep);
- if (sepwidth !== 0) {
- colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []);
- colSep.style.width = sepwidth + "em";
- cols.push(colSep);
- }
- }
-
- var col = [];
- for (r = 0; r < nr; ++r) {
- var row = body[r];
- var elem = row[c];
- if (!elem) {
- continue;
- }
- var shift = row.pos - offset;
- elem.depth = row.depth;
- elem.height = row.height;
- col.push({
- type: "elem",
- elem: elem,
- shift: shift,
- });
- }
-
- col = _buildCommon2.default.makeVList(col, "individualShift", null, options);
- col = (0, _buildCommon.makeSpan)(["col-align-" + (colDescr.align || "c")], [col]);
- cols.push(col);
-
- if (c < nc - 1 || group.value.hskipBeforeAndAfter) {
- sepwidth = _utils2.default.deflt(colDescr.postgap, arraycolsep);
- if (sepwidth !== 0) {
- colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []);
- colSep.style.width = sepwidth + "em";
- cols.push(colSep);
- }
- }
- }
- body = (0, _buildCommon.makeSpan)(["mtable"], cols);
- return (0, _buildCommon.makeSpan)(["mord"], [body], options);
- };
-
- groupTypes.spacing = function (group, options) {
- if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") {
- // Spaces are generated by adding an actual space. Each of these
- // things has an entry in the symbols table, so these will be turned
- // into appropriate outputs.
- if (group.mode === "text") {
- return _buildCommon2.default.makeOrd(group, options, "textord");
- } else {
- return (0, _buildCommon.makeSpan)(["mspace"], [_buildCommon2.default.mathsym(group.value, group.mode, options)], options);
- }
- } else {
- // Other kinds of spaces are of arbitrary width. We use CSS to
- // generate these.
- return (0, _buildCommon.makeSpan)(["mspace", _buildCommon2.default.spacingFunctions[group.value].className], [], options);
- }
- };
-
- groupTypes.llap = function (group, options) {
- var inner = (0, _buildCommon.makeSpan)(["inner"], [buildGroup(group.value.body, options)]);
- var fix = (0, _buildCommon.makeSpan)(["fix"], []);
- return (0, _buildCommon.makeSpan)(["mord", "llap"], [inner, fix], options);
- };
-
- groupTypes.rlap = function (group, options) {
- var inner = (0, _buildCommon.makeSpan)(["inner"], [buildGroup(group.value.body, options)]);
- var fix = (0, _buildCommon.makeSpan)(["fix"], []);
- return (0, _buildCommon.makeSpan)(["mord", "rlap"], [inner, fix], options);
- };
-
- groupTypes.op = function (group, options) {
- // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
- var supGroup = void 0;
- var subGroup = void 0;
- var hasLimits = false;
- if (group.type === "supsub") {
- // If we have limits, supsub will pass us its group to handle. Pull
- // out the superscript and subscript and set the group to the op in
- // its base.
- supGroup = group.value.sup;
- subGroup = group.value.sub;
- group = group.value.base;
- hasLimits = true;
- }
-
- var style = options.style;
-
- // Most operators have a large successor symbol, but these don't.
- var noSuccessor = ["\\smallint"];
-
- var large = false;
- if (style.size === _Style2.default.DISPLAY.size && group.value.symbol && !_utils2.default.contains(noSuccessor, group.value.body)) {
- // Most symbol operators get larger in displaystyle (rule 13)
- large = true;
- }
-
- var base = void 0;
- if (group.value.symbol) {
- // If this is a symbol, create the symbol.
- var fontName = large ? "Size2-Regular" : "Size1-Regular";
- base = _buildCommon2.default.makeSymbol(group.value.body, fontName, "math", options, [
- "mop",
- "op-symbol",
- large ? "large-op" : "small-op",
- ]);
- } else if (group.value.value) {
- // If this is a list, compose that list.
- var inner = buildExpression(group.value.value, options, true);
- if (inner.length === 1 && inner[0] instanceof _domTree2.default.symbolNode) {
- base = inner[0];
- base.classes[0] = "mop"; // replace old mclass
- } else {
- base = (0, _buildCommon.makeSpan)(["mop"], inner, options);
- }
- } else {
- // Otherwise, this is a text operator. Build the text from the
- // operator's name.
- // TODO(emily): Add a space in the middle of some of these
- // operators, like \limsup
- var output = [];
- for (var i = 1; i < group.value.body.length; i++) {
- output.push(_buildCommon2.default.mathsym(group.value.body[i], group.mode));
- }
- base = (0, _buildCommon.makeSpan)(["mop"], output, options);
- }
-
- // If content of op is a single symbol, shift it vertically.
- var baseShift = 0;
- var slant = 0;
- if (base instanceof _domTree2.default.symbolNode) {
- // Shift the symbol so its center lies on the axis (rule 13). It
- // appears that our fonts have the centers of the symbols already
- // almost on the axis, so these numbers are very small. Note we
- // don't actually apply this here, but instead it is used either in
- // the vlist creation or separately when there are no limits.
- baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight;
-
- // The slant of the symbol is just its italic correction.
- slant = base.italic;
- }
-
- if (hasLimits) {
- // IE 8 clips \int if it is in a display: inline-block. We wrap it
- // in a new span so it is an inline, and works.
- base = (0, _buildCommon.makeSpan)([], [base]);
-
- var supm = void 0;
- var supKern = void 0;
- var subm = void 0;
- var subKern = void 0;
- var newOptions = void 0;
- // We manually have to handle the superscripts and subscripts. This,
- // aside from the kern calculations, is copied from supsub.
- if (supGroup) {
- newOptions = options.havingStyle(style.sup());
- supm = buildGroup(supGroup, newOptions, options);
-
- supKern = Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - supm.depth);
- }
-
- if (subGroup) {
- newOptions = options.havingStyle(style.sub());
- subm = buildGroup(subGroup, newOptions, options);
-
- subKern = Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - subm.height);
- }
-
- // Build the final group as a vlist of the possible subscript, base,
- // and possible superscript.
- var finalGroup = void 0;
- var top = void 0;
- var bottom = void 0;
- if (!supGroup) {
- top = base.height - baseShift;
-
- // Shift the limits by the slant of the symbol. Note
- // that we are supposed to shift the limits by 1/2 of the slant,
- // but since we are centering the limits adding a full slant of
- // margin will shift by 1/2 that.
- finalGroup = _buildCommon2.default.makeVList(
- [
- {
- type: "kern",
- size: options.fontMetrics().bigOpSpacing5,
- },
- {
- type: "elem",
- elem: subm,
- marginLeft: -slant + "em",
- },
- {
- type: "kern",
- size: subKern,
- },
- {
- type: "elem",
- elem: base,
- },
- ],
- "top",
- top,
- options
- );
- } else if (!subGroup) {
- bottom = base.depth + baseShift;
-
- finalGroup = _buildCommon2.default.makeVList(
- [
- {
- type: "elem",
- elem: base,
- },
- {
- type: "kern",
- size: supKern,
- },
- {
- type: "elem",
- elem: supm,
- marginLeft: slant + "em",
- },
- {
- type: "kern",
- size: options.fontMetrics().bigOpSpacing5,
- },
- ],
- "bottom",
- bottom,
- options
- );
- } else if (!supGroup && !subGroup) {
- // This case probably shouldn't occur (this would mean the
- // supsub was sending us a group with no superscript or
- // subscript) but be safe.
- return base;
- } else {
- bottom = options.fontMetrics().bigOpSpacing5 + subm.height + subm.depth + subKern + base.depth + baseShift;
-
- finalGroup = _buildCommon2.default.makeVList(
- [
- {
- type: "kern",
- size: options.fontMetrics().bigOpSpacing5,
- },
- {
- type: "elem",
- elem: subm,
- marginLeft: -slant + "em",
- },
- {
- type: "kern",
- size: subKern,
- },
- {
- type: "elem",
- elem: base,
- },
- {
- type: "kern",
- size: supKern,
- },
- {
- type: "elem",
- elem: supm,
- marginLeft: slant + "em",
- },
- {
- type: "kern",
- size: options.fontMetrics().bigOpSpacing5,
- },
- ],
- "bottom",
- bottom,
- options
- );
- }
-
- return (0, _buildCommon.makeSpan)(["mop", "op-limits"], [finalGroup], options);
- } else {
- if (baseShift) {
- base.style.position = "relative";
- base.style.top = baseShift + "em";
- }
-
- return base;
- }
- };
-
- groupTypes.mod = function (group, options) {
- var inner = [];
-
- if (group.value.modType === "bmod") {
- // “\nonscript\mskip-\medmuskip\mkern5mu”
- if (!options.style.isTight()) {
- inner.push((0, _buildCommon.makeSpan)(["mspace", "negativemediumspace"], [], options));
- }
- inner.push((0, _buildCommon.makeSpan)(["mspace", "thickspace"], [], options));
- } else if (options.style.size === _Style2.default.DISPLAY.size) {
- inner.push((0, _buildCommon.makeSpan)(["mspace", "quad"], [], options));
- } else if (group.value.modType === "mod") {
- inner.push((0, _buildCommon.makeSpan)(["mspace", "twelvemuspace"], [], options));
- } else {
- inner.push((0, _buildCommon.makeSpan)(["mspace", "eightmuspace"], [], options));
- }
-
- if (group.value.modType === "pod" || group.value.modType === "pmod") {
- inner.push(_buildCommon2.default.mathsym("(", group.mode));
- }
-
- if (group.value.modType !== "pod") {
- var modInner = [
- _buildCommon2.default.mathsym("m", group.mode),
- _buildCommon2.default.mathsym("o", group.mode),
- _buildCommon2.default.mathsym("d", group.mode),
- ];
- if (group.value.modType === "bmod") {
- inner.push((0, _buildCommon.makeSpan)(["mbin"], modInner, options));
- // “\mkern5mu\nonscript\mskip-\medmuskip”
- inner.push((0, _buildCommon.makeSpan)(["mspace", "thickspace"], [], options));
- if (!options.style.isTight()) {
- inner.push((0, _buildCommon.makeSpan)(["mspace", "negativemediumspace"], [], options));
- }
- } else {
- Array.prototype.push.apply(inner, modInner);
- inner.push((0, _buildCommon.makeSpan)(["mspace", "sixmuspace"], [], options));
- }
- }
-
- if (group.value.value) {
- Array.prototype.push.apply(inner, buildExpression(group.value.value, options, false));
- }
-
- if (group.value.modType === "pod" || group.value.modType === "pmod") {
- inner.push(_buildCommon2.default.mathsym(")", group.mode));
- }
-
- return _buildCommon2.default.makeFragment(inner);
- };
-
- groupTypes.katex = function (group, options) {
- // The KaTeX logo. The offsets for the K and a were chosen to look
- // good, but the offsets for the T, E, and X were taken from the
- // definition of \TeX in TeX (see TeXbook pg. 356)
- var k = (0, _buildCommon.makeSpan)(["k"], [_buildCommon2.default.mathsym("K", group.mode)], options);
- var a = (0, _buildCommon.makeSpan)(["a"], [_buildCommon2.default.mathsym("A", group.mode)], options);
-
- a.height = (a.height + 0.2) * 0.75;
- a.depth = (a.height - 0.2) * 0.75;
-
- var t = (0, _buildCommon.makeSpan)(["t"], [_buildCommon2.default.mathsym("T", group.mode)], options);
- var e = (0, _buildCommon.makeSpan)(["e"], [_buildCommon2.default.mathsym("E", group.mode)], options);
-
- e.height = e.height - 0.2155;
- e.depth = e.depth + 0.2155;
-
- var x = (0, _buildCommon.makeSpan)(["x"], [_buildCommon2.default.mathsym("X", group.mode)], options);
-
- return (0, _buildCommon.makeSpan)(["mord", "katex-logo"], [k, a, t, e, x], options);
- };
-
- var makeLineSpan = function makeLineSpan(className, options, thickness) {
- var line = (0, _buildCommon.makeSpan)([className], [], options);
- line.height = thickness || options.fontMetrics().defaultRuleThickness;
- line.style.borderBottomWidth = line.height + "em";
- line.maxFontSize = 1.0;
- return line;
- };
-
- groupTypes.overline = function (group, options) {
- // Overlines are handled in the TeXbook pg 443, Rule 9.
-
- // Build the inner group in the cramped style.
- var innerGroup = buildGroup(group.value.body, options.havingCrampedStyle());
-
- // Create the line above the body
- var line = makeLineSpan("overline-line", options);
-
- // Generate the vlist, with the appropriate kerns
- var vlist = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: innerGroup },
- { type: "kern", size: 3 * line.height },
- { type: "elem", elem: line },
- { type: "kern", size: line.height },
- ],
- "firstBaseline",
- null,
- options
- );
-
- return (0, _buildCommon.makeSpan)(["mord", "overline"], [vlist], options);
- };
-
- groupTypes.underline = function (group, options) {
- // Underlines are handled in the TeXbook pg 443, Rule 10.
- // Build the inner group.
- var innerGroup = buildGroup(group.value.body, options);
-
- // Create the line above the body
- var line = makeLineSpan("underline-line", options);
-
- // Generate the vlist, with the appropriate kerns
- var vlist = _buildCommon2.default.makeVList(
- [
- { type: "kern", size: line.height },
- { type: "elem", elem: line },
- { type: "kern", size: 3 * line.height },
- { type: "elem", elem: innerGroup },
- ],
- "top",
- innerGroup.height,
- options
- );
-
- return (0, _buildCommon.makeSpan)(["mord", "underline"], [vlist], options);
- };
-
- groupTypes.sqrt = function (group, options) {
- // Square roots are handled in the TeXbook pg. 443, Rule 11.
-
- // First, we do the same steps as in overline to build the inner group
- // and line
- var inner = buildGroup(group.value.body, options.havingCrampedStyle());
-
- // Some groups can return document fragments. Handle those by wrapping
- // them in a span.
- if (inner instanceof _domTree2.default.documentFragment) {
- inner = (0, _buildCommon.makeSpan)([], [inner], options);
- }
-
- // Calculate the minimum size for the \surd delimiter
- var metrics = options.fontMetrics();
- var theta = metrics.defaultRuleThickness;
-
- var phi = theta;
- if (options.style.id < _Style2.default.TEXT.id) {
- phi = options.fontMetrics().xHeight;
- }
-
- // Calculate the clearance between the body and line
- var lineClearance = theta + phi / 4;
-
- var minDelimiterHeight = (inner.height + inner.depth + lineClearance + theta) * options.sizeMultiplier;
-
- // Create a sqrt SVG of the required minimum size
- var img = _delimiter2.default.customSizedDelim("\\surd", minDelimiterHeight, false, options, group.mode);
-
- // Calculate the actual line width.
- // This actually should depend on the chosen font -- e.g. \boldmath
- // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
- // have thicker rules.
- var ruleWidth = options.fontMetrics().sqrtRuleThickness * img.sizeMultiplier;
-
- var delimDepth = img.height - ruleWidth;
-
- // Adjust the clearance based on the delimiter size
- if (delimDepth > inner.height + inner.depth + lineClearance) {
- lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;
- }
-
- // Shift the sqrt image
- var imgShift = img.height - inner.height - lineClearance - ruleWidth;
-
- // We add a special case here, because even when `inner` is empty, we
- // still get a line. So, we use a simple heuristic to decide if we
- // should omit the body entirely. (note this doesn't work for something
- // like `\sqrt{\rlap{x}}`, but if someone is doing that they deserve for
- // it not to work.
- var body = void 0;
- if (inner.height === 0 && inner.depth === 0) {
- body = (0, _buildCommon.makeSpan)();
- } else {
- inner.style.paddingLeft = img.surdWidth + "em";
-
- // Overlay the image and the argument.
- body = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: inner },
- {
- type: "kern",
- size: -(inner.height + imgShift),
- },
- { type: "elem", elem: img },
- { type: "kern", size: ruleWidth },
- ],
- "firstBaseline",
- null,
- options
- );
- body.children[0].children[0].classes.push("svg-align");
- }
-
- if (!group.value.index) {
- return (0, _buildCommon.makeSpan)(["mord", "sqrt"], [body], options);
- } else {
- // Handle the optional root index
-
- // The index is always in scriptscript style
- var newOptions = options.havingStyle(_Style2.default.SCRIPTSCRIPT);
- var rootm = buildGroup(group.value.index, newOptions, options);
-
- // The amount the index is shifted by. This is taken from the TeX
- // source, in the definition of `\r@@t`.
- var toShift = 0.6 * (body.height - body.depth);
-
- // Build a VList with the superscript shifted up correctly
- var rootVList = _buildCommon2.default.makeVList([{ type: "elem", elem: rootm }], "shift", -toShift, options);
- // Add a class surrounding it so we can add on the appropriate
- // kerning
- var rootVListWrap = (0, _buildCommon.makeSpan)(["root"], [rootVList]);
-
- return (0, _buildCommon.makeSpan)(["mord", "sqrt"], [rootVListWrap, body], options);
- }
- };
-
- function sizingGroup(value, options, baseOptions) {
- var inner = buildExpression(value, options, false);
- var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
-
- // Add size-resetting classes to the inner list and set maxFontSize
- // manually. Handle nested size changes.
- for (var i = 0; i < inner.length; i++) {
- var pos = _utils2.default.indexOf(inner[i].classes, "sizing");
- if (pos < 0) {
- Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));
- } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {
- // This is a nested size change: e.g., inner[i] is the "b" in
- // `\Huge a \small b`. Override the old size (the `reset-` class)
- // but not the new size.
- inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;
- }
-
- inner[i].height *= multiplier;
- inner[i].depth *= multiplier;
- }
-
- return _buildCommon2.default.makeFragment(inner);
- }
-
- groupTypes.sizing = function (group, options) {
- // Handle sizing operators like \Huge. Real TeX doesn't actually allow
- // these functions inside of math expressions, so we do some special
- // handling.
- var newOptions = options.havingSize(group.value.size);
- return sizingGroup(group.value.value, newOptions, options);
- };
-
- groupTypes.styling = function (group, options) {
- // Style changes are handled in the TeXbook on pg. 442, Rule 3.
-
- // Figure out what style we're changing to.
- var styleMap = {
- display: _Style2.default.DISPLAY,
- text: _Style2.default.TEXT,
- script: _Style2.default.SCRIPT,
- scriptscript: _Style2.default.SCRIPTSCRIPT,
- };
-
- var newStyle = styleMap[group.value.style];
- var newOptions = options.havingStyle(newStyle);
- return sizingGroup(group.value.value, newOptions, options);
- };
-
- groupTypes.font = function (group, options) {
- var font = group.value.font;
- return buildGroup(group.value.body, options.withFont(font));
- };
-
- groupTypes.delimsizing = function (group, options) {
- var delim = group.value.value;
-
- if (delim === ".") {
- // Empty delimiters still count as elements, even though they don't
- // show anything.
- return (0, _buildCommon.makeSpan)([group.value.mclass]);
- }
-
- // Use delimiter.sizedDelim to generate the delimiter.
- return _delimiter2.default.sizedDelim(delim, group.value.size, options, group.mode, [group.value.mclass]);
- };
-
- groupTypes.leftright = function (group, options) {
- // Build the inner expression
- var inner = buildExpression(group.value.body, options, true);
-
- var innerHeight = 0;
- var innerDepth = 0;
- var hadMiddle = false;
-
- // Calculate its height and depth
- for (var i = 0; i < inner.length; i++) {
- if (inner[i].isMiddle) {
- hadMiddle = true;
- } else {
- innerHeight = Math.max(inner[i].height, innerHeight);
- innerDepth = Math.max(inner[i].depth, innerDepth);
- }
- }
-
- // The size of delimiters is the same, regardless of what style we are
- // in. Thus, to correctly calculate the size of delimiter we need around
- // a group, we scale down the inner size based on the size.
- innerHeight *= options.sizeMultiplier;
- innerDepth *= options.sizeMultiplier;
-
- var leftDelim = void 0;
- if (group.value.left === ".") {
- // Empty delimiters in \left and \right make null delimiter spaces.
- leftDelim = makeNullDelimiter(options, ["mopen"]);
- } else {
- // Otherwise, use leftRightDelim to generate the correct sized
- // delimiter.
- leftDelim = _delimiter2.default.leftRightDelim(group.value.left, innerHeight, innerDepth, options, group.mode, ["mopen"]);
- }
- // Add it to the beginning of the expression
- inner.unshift(leftDelim);
-
- // Handle middle delimiters
- if (hadMiddle) {
- for (var _i4 = 1; _i4 < inner.length; _i4++) {
- var middleDelim = inner[_i4];
- if (middleDelim.isMiddle) {
- // Apply the options that were active when \middle was called
- inner[_i4] = _delimiter2.default.leftRightDelim(
- middleDelim.isMiddle.value,
- innerHeight,
- innerDepth,
- middleDelim.isMiddle.options,
- group.mode,
- []
- );
- // Add back spaces shifted into the delimiter
- var spaces = spliceSpaces(middleDelim.children, 0);
- if (spaces) {
- _buildCommon2.default.prependChildren(inner[_i4], spaces);
- }
- }
- }
- }
-
- var rightDelim = void 0;
- // Same for the right delimiter
- if (group.value.right === ".") {
- rightDelim = makeNullDelimiter(options, ["mclose"]);
- } else {
- rightDelim = _delimiter2.default.leftRightDelim(group.value.right, innerHeight, innerDepth, options, group.mode, ["mclose"]);
- }
- // Add it to the end of the expression.
- inner.push(rightDelim);
-
- return (0, _buildCommon.makeSpan)(["minner"], inner, options);
- };
-
- groupTypes.middle = function (group, options) {
- var middleDelim = void 0;
- if (group.value.value === ".") {
- middleDelim = makeNullDelimiter(options, []);
- } else {
- middleDelim = _delimiter2.default.sizedDelim(group.value.value, 1, options, group.mode, []);
- middleDelim.isMiddle = {
- value: group.value.value,
- options: options,
- };
- }
- return middleDelim;
- };
-
- groupTypes.rule = function (group, options) {
- // Make an empty span for the rule
- var rule = (0, _buildCommon.makeSpan)(["mord", "rule"], [], options);
-
- // Calculate the shift, width, and height of the rule, and account for units
- var shift = 0;
- if (group.value.shift) {
- shift = _units2.default.calculateSize(group.value.shift, options);
- }
-
- var width = _units2.default.calculateSize(group.value.width, options);
- var height = _units2.default.calculateSize(group.value.height, options);
-
- // Style the rule to the right size
- rule.style.borderRightWidth = width + "em";
- rule.style.borderTopWidth = height + "em";
- rule.style.bottom = shift + "em";
-
- // Record the height and width
- rule.width = width;
- rule.height = height + shift;
- rule.depth = -shift;
- // Font size is the number large enough that the browser will
- // reserve at least `absHeight` space above the baseline.
- // The 1.125 factor was empirically determined
- rule.maxFontSize = height * 1.125 * options.sizeMultiplier;
-
- return rule;
- };
-
- groupTypes.kern = function (group, options) {
- // Make an empty span for the rule
- var rule = (0, _buildCommon.makeSpan)(["mord", "rule"], [], options);
-
- if (group.value.dimension) {
- var dimension = _units2.default.calculateSize(group.value.dimension, options);
- rule.style.marginLeft = dimension + "em";
- }
-
- return rule;
- };
-
- groupTypes.accent = function (group, options) {
- // Accents are handled in the TeXbook pg. 443, rule 12.
- var base = group.value.base;
-
- var supsubGroup = void 0;
- if (group.type === "supsub") {
- // If our base is a character box, and we have superscripts and
- // subscripts, the supsub will defer to us. In particular, we want
- // to attach the superscripts and subscripts to the inner body (so
- // that the position of the superscripts and subscripts won't be
- // affected by the height of the accent). We accomplish this by
- // sticking the base of the accent into the base of the supsub, and
- // rendering that, while keeping track of where the accent is.
-
- // The supsub group is the group that was passed in
- var supsub = group;
- // The real accent group is the base of the supsub group
- group = supsub.value.base;
- // The character box is the base of the accent group
- base = group.value.base;
- // Stick the character box into the base of the supsub group
- supsub.value.base = base;
-
- // Rerender the supsub group with its new base, and store that
- // result.
- supsubGroup = buildGroup(supsub, options);
- }
-
- // Build the base group
- var body = buildGroup(base, options.havingCrampedStyle());
-
- // Does the accent need to shift for the skew of a character?
- var mustShift = group.value.isShifty && isCharacterBox(base);
-
- // Calculate the skew of the accent. This is based on the line "If the
- // nucleus is not a single character, let s = 0; otherwise set s to the
- // kern amount for the nucleus followed by the \skewchar of its font."
- // Note that our skew metrics are just the kern between each character
- // and the skewchar.
- var skew = 0;
- if (mustShift) {
- // If the base is a character box, then we want the skew of the
- // innermost character. To do that, we find the innermost character:
- var baseChar = getBaseElem(base);
- // Then, we render its group to get the symbol inside it
- var baseGroup = buildGroup(baseChar, options.havingCrampedStyle());
- // Finally, we pull the skew off of the symbol.
- skew = baseGroup.skew;
- // Note that we now throw away baseGroup, because the layers we
- // removed with getBaseElem might contain things like \color which
- // we can't get rid of.
- // TODO(emily): Find a better way to get the skew
- }
-
- // calculate the amount of space between the body and the accent
- var clearance = Math.min(body.height, options.fontMetrics().xHeight);
-
- // Build the accent
- var accentBody = void 0;
- if (!group.value.isStretchy) {
- var accent = _buildCommon2.default.makeSymbol(group.value.label, "Main-Regular", group.mode, options);
- // Remove the italic correction of the accent, because it only serves to
- // shift the accent over to a place we don't want.
- accent.italic = 0;
-
- // The \vec character that the fonts use is a combining character, and
- // thus shows up much too far to the left. To account for this, we add a
- // specific class which shifts the accent over to where we want it.
- // TODO(emily): Fix this in a better way, like by changing the font
- // Similarly, text accent \H is a combining character and
- // requires a different adjustment.
- var accentClass = null;
- if (group.value.label === "\\vec") {
- accentClass = "accent-vec";
- } else if (group.value.label === "\\H") {
- accentClass = "accent-hungarian";
- }
-
- accentBody = (0, _buildCommon.makeSpan)([], [accent]);
- accentBody = (0, _buildCommon.makeSpan)(["accent-body", accentClass], [accentBody]);
-
- // Shift the accent over by the skew. Note we shift by twice the skew
- // because we are centering the accent, so by adding 2*skew to the left,
- // we shift it to the right by 1*skew.
- accentBody.style.marginLeft = 2 * skew + "em";
-
- accentBody = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: body },
- {
- type: "kern",
- size: -clearance,
- },
- {
- type: "elem",
- elem: accentBody,
- },
- ],
- "firstBaseline",
- null,
- options
- );
- } else {
- accentBody = _stretchy2.default.svgSpan(group, options);
-
- accentBody = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: body },
- {
- type: "elem",
- elem: accentBody,
- },
- ],
- "firstBaseline",
- null,
- options
- );
-
- var styleSpan = accentBody.children[0].children[0].children[1];
- styleSpan.classes.push("svg-align"); // text-align: left;
- if (skew > 0) {
- // Shorten the accent and nudge it to the right.
- styleSpan.style.width = "calc(100% - " + 2 * skew + "em)";
- styleSpan.style.marginLeft = 2 * skew + "em";
- }
- }
-
- var accentWrap = (0, _buildCommon.makeSpan)(["mord", "accent"], [accentBody], options);
-
- if (supsubGroup) {
- // Here, we replace the "base" child of the supsub with our newly
- // generated accent.
- supsubGroup.children[0] = accentWrap;
-
- // Since we don't rerun the height calculation after replacing the
- // accent, we manually recalculate height.
- supsubGroup.height = Math.max(accentWrap.height, supsubGroup.height);
-
- // Accents should always be ords, even when their innards are not.
- supsubGroup.classes[0] = "mord";
-
- return supsubGroup;
- } else {
- return accentWrap;
- }
- };
-
- groupTypes.horizBrace = function (group, options) {
- var style = options.style;
-
- var hasSupSub = group.type === "supsub";
- var supSubGroup = void 0;
- var newOptions = void 0;
- if (hasSupSub) {
- // Ref: LaTeX source2e: }}}}\limits}
- // i.e. LaTeX treats the brace similar to an op and passes it
- // with \limits, so we need to assign supsub style.
- if (group.value.sup) {
- newOptions = options.havingStyle(style.sup());
- supSubGroup = buildGroup(group.value.sup, newOptions, options);
- } else {
- newOptions = options.havingStyle(style.sub());
- supSubGroup = buildGroup(group.value.sub, newOptions, options);
- }
- group = group.value.base;
- }
-
- // Build the base group
- var body = buildGroup(group.value.base, options.havingBaseStyle(_Style2.default.DISPLAY));
-
- // Create the stretchy element
- var braceBody = _stretchy2.default.svgSpan(group, options);
-
- // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓
- // This first vlist contains the subject matter and the brace: equation
- var vlist = void 0;
- if (group.value.isOver) {
- vlist = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: body },
- { type: "kern", size: 0.1 },
- { type: "elem", elem: braceBody },
- ],
- "firstBaseline",
- null,
- options
- );
- vlist.children[0].children[0].children[1].classes.push("svg-align");
- } else {
- vlist = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: braceBody },
- { type: "kern", size: 0.1 },
- { type: "elem", elem: body },
- ],
- "bottom",
- body.depth + 0.1 + braceBody.height,
- options
- );
- vlist.children[0].children[0].children[0].classes.push("svg-align");
- }
-
- if (hasSupSub) {
- // In order to write the supsub, wrap the first vlist in another vlist:
- // They can't all go in the same vlist, because the note might be wider
- // than the equation. We want the equation to control the brace width.
-
- // note long note long note
- // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓
- // equation eqn eqn
-
- var vSpan = (0, _buildCommon.makeSpan)(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options);
-
- if (group.value.isOver) {
- vlist = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: vSpan },
- { type: "kern", size: 0.2 },
- {
- type: "elem",
- elem: supSubGroup,
- },
- ],
- "firstBaseline",
- null,
- options
- );
- } else {
- vlist = _buildCommon2.default.makeVList(
- [
- {
- type: "elem",
- elem: supSubGroup,
- },
- { type: "kern", size: 0.2 },
- { type: "elem", elem: vSpan },
- ],
- "bottom",
- vSpan.depth + 0.2 + supSubGroup.height,
- options
- );
- }
- }
-
- return (0, _buildCommon.makeSpan)(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options);
- };
-
- groupTypes.accentUnder = function (group, options) {
- // Treat under accents much like underlines.
- var innerGroup = buildGroup(group.value.body, options);
-
- var accentBody = _stretchy2.default.svgSpan(group, options);
- var kern = /tilde/.test(group.value.label) ? 0.12 : 0;
-
- // Generate the vlist, with the appropriate kerns
- var vlist = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: accentBody },
- { type: "kern", size: kern },
- { type: "elem", elem: innerGroup },
- ],
- "bottom",
- accentBody.height + kern,
- options
- );
-
- vlist.children[0].children[0].children[0].classes.push("svg-align");
-
- return (0, _buildCommon.makeSpan)(["mord", "accentunder"], [vlist], options);
- };
-
- groupTypes.enclose = function (group, options) {
- // \cancel, \bcancel, \xcancel, \sout, \fbox
- var inner = buildGroup(group.value.body, options);
-
- var label = group.value.label.substr(1);
- var scale = options.sizeMultiplier;
- var img = void 0;
- var pad = 0;
- var imgShift = 0;
-
- if (label === "sout") {
- img = (0, _buildCommon.makeSpan)(["stretchy", "sout"]);
- img.height = options.fontMetrics().defaultRuleThickness / scale;
- imgShift = -0.5 * options.fontMetrics().xHeight;
- } else {
- // Add horizontal padding
- inner.classes.push(label === "fbox" ? "boxpad" : "cancel-pad");
-
- // Add vertical padding
- var isCharBox = isCharacterBox(group.value.body);
- // ref: LaTeX source2e: \fboxsep = 3pt; \fboxrule = .4pt
- // ref: cancel package: \advance\totalheight2\p@ % "+2"
- pad = label === "fbox" ? 0.34 : isCharBox ? 0.2 : 0;
- imgShift = inner.depth + pad;
-
- img = _stretchy2.default.encloseSpan(inner, label, pad, options);
- }
-
- var vlist = _buildCommon2.default.makeVList(
- [
- { type: "elem", elem: inner, shift: 0 },
- {
- type: "elem",
- elem: img,
- shift: imgShift,
- },
- ],
- "individualShift",
- null,
- options
- );
-
- if (label !== "fbox") {
- vlist.children[0].children[0].children[1].classes.push("svg-align");
- }
-
- if (/cancel/.test(label)) {
- // cancel does not create horiz space for its line extension.
- // That is, not when adjacent to a mord.
- return (0, _buildCommon.makeSpan)(["mord", "cancel-lap"], [vlist], options);
- } else {
- return (0, _buildCommon.makeSpan)(["mord"], [vlist], options);
- }
- };
-
- groupTypes.xArrow = function (group, options) {
- var style = options.style;
-
- // Build the argument groups in the appropriate style.
- // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}%
-
- var newOptions = options.havingStyle(style.sup());
- var upperGroup = buildGroup(group.value.body, newOptions, options);
- upperGroup.classes.push("x-arrow-pad");
-
- var lowerGroup = void 0;
- if (group.value.below) {
- // Build the lower group
- newOptions = options.havingStyle(style.sub());
- lowerGroup = buildGroup(group.value.below, newOptions, options);
- lowerGroup.classes.push("x-arrow-pad");
- }
-
- var arrowBody = _stretchy2.default.svgSpan(group, options);
-
- var arrowShift = -options.fontMetrics().axisHeight + arrowBody.depth;
- var upperShift = -options.fontMetrics().axisHeight - arrowBody.height - 0.111; // 2 mu. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi
-
- // Generate the vlist
- var vlist = void 0;
- if (group.value.below) {
- var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + arrowBody.height + 0.111;
- vlist = _buildCommon2.default.makeVList(
- [
- {
- type: "elem",
- elem: upperGroup,
- shift: upperShift,
- },
- {
- type: "elem",
- elem: arrowBody,
- shift: arrowShift,
- },
- {
- type: "elem",
- elem: lowerGroup,
- shift: lowerShift,
- },
- ],
- "individualShift",
- null,
- options
- );
- } else {
- vlist = _buildCommon2.default.makeVList(
- [
- {
- type: "elem",
- elem: upperGroup,
- shift: upperShift,
- },
- {
- type: "elem",
- elem: arrowBody,
- shift: arrowShift,
- },
- ],
- "individualShift",
- null,
- options
- );
- }
-
- vlist.children[0].children[0].children[1].classes.push("svg-align");
-
- return (0, _buildCommon.makeSpan)(["mrel", "x-arrow"], [vlist], options);
- };
-
- groupTypes.phantom = function (group, options) {
- var elements = buildExpression(group.value.value, options.withPhantom(), false);
-
- // \phantom isn't supposed to affect the elements it contains.
- // See "color" for more details.
- return new _buildCommon2.default.makeFragment(elements);
- };
-
- groupTypes.mclass = function (group, options) {
- var elements = buildExpression(group.value.value, options, true);
-
- return (0, _buildCommon.makeSpan)([group.value.mclass], elements, options);
- };
-
- /**
- * buildGroup is the function that takes a group and calls the correct groupType
- * function for it. It also handles the interaction of size and style changes
- * between parents and children.
- */
- var buildGroup = function buildGroup(group, options, baseOptions) {
- if (!group) {
- return (0, _buildCommon.makeSpan)();
- }
-
- if (groupTypes[group.type]) {
- // Call the groupTypes function
- var groupNode = groupTypes[group.type](group, options);
-
- // If the size changed between the parent and the current group, account
- // for that size difference.
- if (baseOptions && options.size !== baseOptions.size) {
- groupNode = (0, _buildCommon.makeSpan)(options.sizingClasses(baseOptions), [groupNode], options);
-
- var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
-
- groupNode.height *= multiplier;
- groupNode.depth *= multiplier;
- }
-
- return groupNode;
- } else {
- throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'");
- }
- };
-
- /**
- * Take an entire parse tree, and build it into an appropriate set of HTML
- * nodes.
- */
- var buildHTML = function buildHTML(tree, options) {
- // buildExpression is destructive, so we need to make a clone
- // of the incoming tree so that it isn't accidentally changed
- tree = JSON.parse((0, _stringify2.default)(tree));
-
- // Build the expression contained in the tree
- var expression = buildExpression(tree, options, true);
- var body = (0, _buildCommon.makeSpan)(["base"], expression, options);
-
- // Add struts, which ensure that the top of the HTML element falls at the
- // height of the expression, and the bottom of the HTML element falls at the
- // depth of the expression.
- var topStrut = (0, _buildCommon.makeSpan)(["strut"]);
- var bottomStrut = (0, _buildCommon.makeSpan)(["strut", "bottom"]);
-
- topStrut.style.height = body.height + "em";
- bottomStrut.style.height = body.height + body.depth + "em";
- // We'd like to use `vertical-align: top` but in IE 9 this lowers the
- // baseline of the box to the bottom of this strut (instead staying in the
- // normal place) so we use an absolute value for vertical-align instead
- bottomStrut.style.verticalAlign = -body.depth + "em";
-
- // Wrap the struts and body together
- var htmlNode = (0, _buildCommon.makeSpan)(["katex-html"], [topStrut, bottomStrut, body]);
-
- htmlNode.setAttribute("aria-hidden", "true");
-
- return htmlNode;
- };
-
- module.exports = buildHTML;
- },
- {
- "./ParseError": 29,
- "./Style": 33,
- "./buildCommon": 34,
- "./delimiter": 38,
- "./domTree": 39,
- "./stretchy": 47,
- "./units": 50,
- "./utils": 51,
- "babel-runtime/core-js/json/stringify": 2,
- },
- ],
- 36: [
- function (require, module, exports) {
- var _buildCommon = require("./buildCommon");
-
- var _buildCommon2 = _interopRequireDefault(_buildCommon);
-
- var _fontMetrics = require("./fontMetrics");
-
- var _fontMetrics2 = _interopRequireDefault(_fontMetrics);
-
- var _mathMLTree = require("./mathMLTree");
-
- var _mathMLTree2 = _interopRequireDefault(_mathMLTree);
-
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- var _Style = require("./Style");
-
- var _Style2 = _interopRequireDefault(_Style);
-
- var _symbols = require("./symbols");
-
- var _symbols2 = _interopRequireDefault(_symbols);
-
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- var _stretchy = require("./stretchy");
-
- var _stretchy2 = _interopRequireDefault(_stretchy);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * Takes a symbol and converts it into a MathML text node after performing
- * optional replacement from symbols.js.
- */
- /**
- * This file converts a parse tree into a cooresponding MathML tree. The main
- * entry point is the `buildMathML` function, which takes a parse tree from the
- * parser.
- */
-
- var makeText = function makeText(text, mode) {
- if (_symbols2.default[mode][text] && _symbols2.default[mode][text].replace) {
- text = _symbols2.default[mode][text].replace;
- }
-
- return new _mathMLTree2.default.TextNode(text);
- };
-
- /**
- * Returns the math variant as a string or null if none is required.
- */
- var getVariant = function getVariant(group, options) {
- var font = options.font;
- if (!font) {
- return null;
- }
-
- var mode = group.mode;
- if (font === "mathit") {
- return "italic";
- }
-
- var value = group.value;
- if (_utils2.default.contains(["\\imath", "\\jmath"], value)) {
- return null;
- }
-
- if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) {
- value = _symbols2.default[mode][value].replace;
- }
-
- var fontName = _buildCommon.fontMap[font].fontName;
- if (_fontMetrics2.default.getCharacterMetrics(value, fontName)) {
- return _buildCommon.fontMap[options.font].variant;
- }
-
- return null;
- };
-
- /**
- * Functions for handling the different types of groups found in the parse
- * tree. Each function should take a parse group and return a MathML node.
- */
- var groupTypes = {};
-
- var defaultVariant = {
- mi: "italic",
- mn: "normal",
- mtext: "normal",
- };
-
- groupTypes.mathord = function (group, options) {
- var node = new _mathMLTree2.default.MathNode("mi", [makeText(group.value, group.mode)]);
-
- var variant = getVariant(group, options) || "italic";
- if (variant !== defaultVariant[node.type]) {
- node.setAttribute("mathvariant", variant);
- }
- return node;
- };
-
- groupTypes.textord = function (group, options) {
- var text = makeText(group.value, group.mode);
-
- var variant = getVariant(group, options) || "normal";
-
- var node = void 0;
- if (group.mode === "text") {
- node = new _mathMLTree2.default.MathNode("mtext", [text]);
- } else if (/[0-9]/.test(group.value)) {
- // TODO(kevinb) merge adjacent nodes
- // do it as a post processing step
- node = new _mathMLTree2.default.MathNode("mn", [text]);
- } else if (group.value === "\\prime") {
- node = new _mathMLTree2.default.MathNode("mo", [text]);
- } else {
- node = new _mathMLTree2.default.MathNode("mi", [text]);
- }
- if (variant !== defaultVariant[node.type]) {
- node.setAttribute("mathvariant", variant);
- }
-
- return node;
- };
-
- groupTypes.bin = function (group) {
- var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
-
- return node;
- };
-
- groupTypes.rel = function (group) {
- var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
-
- return node;
- };
-
- groupTypes.open = function (group) {
- var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
-
- return node;
- };
-
- groupTypes.close = function (group) {
- var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
-
- return node;
- };
-
- groupTypes.inner = function (group) {
- var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
-
- return node;
- };
-
- groupTypes.punct = function (group) {
- var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
-
- node.setAttribute("separator", "true");
-
- return node;
- };
-
- groupTypes.ordgroup = function (group, options) {
- var inner = buildExpression(group.value, options);
-
- var node = new _mathMLTree2.default.MathNode("mrow", inner);
-
- return node;
- };
-
- groupTypes.text = function (group, options) {
- var body = group.value.body;
-
- // Convert each element of the body into MathML, and combine consecutive
- // outputs into a single tag. In this way, we don't
- // nest non-text items (e.g., $nested-math$) within an .
- var inner = [];
- var currentText = null;
- for (var i = 0; i < body.length; i++) {
- var _group = buildGroup(body[i], options);
- if (_group.type === "mtext" && currentText != null) {
- Array.prototype.push.apply(currentText.children, _group.children);
- } else {
- inner.push(_group);
- if (_group.type === "mtext") {
- currentText = _group;
- }
- }
- }
-
- // If there is a single tag in the end (presumably ),
- // just return it. Otherwise, wrap them in an .
- if (inner.length === 1) {
- return inner[0];
- } else {
- return new _mathMLTree2.default.MathNode("mrow", inner);
- }
- };
-
- groupTypes.color = function (group, options) {
- var inner = buildExpression(group.value.value, options);
-
- var node = new _mathMLTree2.default.MathNode("mstyle", inner);
-
- node.setAttribute("mathcolor", group.value.color);
-
- return node;
- };
-
- groupTypes.supsub = function (group, options) {
- // Is the inner group a relevant horizonal brace?
- var isBrace = false;
- var isOver = void 0;
- var isSup = void 0;
- if (group.value.base) {
- if (group.value.base.value.type === "horizBrace") {
- isSup = group.value.sup ? true : false;
- if (isSup === group.value.base.value.isOver) {
- isBrace = true;
- isOver = group.value.base.value.isOver;
- }
- }
- }
-
- var removeUnnecessaryRow = true;
- var children = [buildGroup(group.value.base, options, removeUnnecessaryRow)];
-
- if (group.value.sub) {
- children.push(buildGroup(group.value.sub, options, removeUnnecessaryRow));
- }
-
- if (group.value.sup) {
- children.push(buildGroup(group.value.sup, options, removeUnnecessaryRow));
- }
-
- var nodeType = void 0;
- if (isBrace) {
- nodeType = isOver ? "mover" : "munder";
- } else if (!group.value.sub) {
- nodeType = "msup";
- } else if (!group.value.sup) {
- nodeType = "msub";
- } else {
- var base = group.value.base;
- if (base && base.value.limits && options.style === _Style2.default.DISPLAY) {
- nodeType = "munderover";
- } else {
- nodeType = "msubsup";
- }
- }
-
- var node = new _mathMLTree2.default.MathNode(nodeType, children);
-
- return node;
- };
-
- groupTypes.genfrac = function (group, options) {
- var node = new _mathMLTree2.default.MathNode("mfrac", [
- buildGroup(group.value.numer, options),
- buildGroup(group.value.denom, options),
- ]);
-
- if (!group.value.hasBarLine) {
- node.setAttribute("linethickness", "0px");
- }
-
- if (group.value.leftDelim != null || group.value.rightDelim != null) {
- var withDelims = [];
-
- if (group.value.leftDelim != null) {
- var leftOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.leftDelim)]);
-
- leftOp.setAttribute("fence", "true");
-
- withDelims.push(leftOp);
- }
-
- withDelims.push(node);
-
- if (group.value.rightDelim != null) {
- var rightOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.rightDelim)]);
-
- rightOp.setAttribute("fence", "true");
-
- withDelims.push(rightOp);
- }
-
- var outerNode = new _mathMLTree2.default.MathNode("mrow", withDelims);
-
- return outerNode;
- }
-
- return node;
- };
-
- groupTypes.array = function (group, options) {
- return new _mathMLTree2.default.MathNode(
- "mtable",
- group.value.body.map(function (row) {
- return new _mathMLTree2.default.MathNode(
- "mtr",
- row.map(function (cell) {
- return new _mathMLTree2.default.MathNode("mtd", [buildGroup(cell, options)]);
- })
- );
- })
- );
- };
-
- groupTypes.sqrt = function (group, options) {
- var node = void 0;
- if (group.value.index) {
- node = new _mathMLTree2.default.MathNode("mroot", [buildGroup(group.value.body, options), buildGroup(group.value.index, options)]);
- } else {
- node = new _mathMLTree2.default.MathNode("msqrt", [buildGroup(group.value.body, options)]);
- }
-
- return node;
- };
-
- groupTypes.leftright = function (group, options) {
- var inner = buildExpression(group.value.body, options);
-
- if (group.value.left !== ".") {
- var leftNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.left, group.mode)]);
-
- leftNode.setAttribute("fence", "true");
-
- inner.unshift(leftNode);
- }
-
- if (group.value.right !== ".") {
- var rightNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.right, group.mode)]);
-
- rightNode.setAttribute("fence", "true");
-
- inner.push(rightNode);
- }
-
- var outerNode = new _mathMLTree2.default.MathNode("mrow", inner);
-
- return outerNode;
- };
-
- groupTypes.middle = function (group, options) {
- var middleNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.middle, group.mode)]);
- middleNode.setAttribute("fence", "true");
- return middleNode;
- };
-
- groupTypes.accent = function (group, options) {
- var accentNode = void 0;
- if (group.value.isStretchy) {
- accentNode = _stretchy2.default.mathMLnode(group.value.label);
- } else {
- accentNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.label, group.mode)]);
- }
-
- var node = new _mathMLTree2.default.MathNode("mover", [buildGroup(group.value.base, options), accentNode]);
-
- node.setAttribute("accent", "true");
-
- return node;
- };
-
- groupTypes.spacing = function (group) {
- var node = void 0;
-
- if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") {
- node = new _mathMLTree2.default.MathNode("mtext", [new _mathMLTree2.default.TextNode("\xA0")]);
- } else {
- node = new _mathMLTree2.default.MathNode("mspace");
-
- node.setAttribute("width", _buildCommon2.default.spacingFunctions[group.value].size);
- }
-
- return node;
- };
-
- groupTypes.op = function (group, options) {
- var node = void 0;
-
- // TODO(emily): handle big operators using the `largeop` attribute
-
- if (group.value.symbol) {
- // This is a symbol. Just add the symbol.
- node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.body, group.mode)]);
- } else if (group.value.value) {
- // This is an operator with children. Add them.
- node = new _mathMLTree2.default.MathNode("mo", buildExpression(group.value.value, options));
- } else {
- // This is a text operator. Add all of the characters from the
- // operator's name.
- // TODO(emily): Add a space in the middle of some of these
- // operators, like \limsup.
- node = new _mathMLTree2.default.MathNode("mi", [new _mathMLTree2.default.TextNode(group.value.body.slice(1))]);
- }
-
- return node;
- };
-
- groupTypes.mod = function (group, options) {
- var inner = [];
-
- if (group.value.modType === "pod" || group.value.modType === "pmod") {
- inner.push(new _mathMLTree2.default.MathNode("mo", [makeText("(", group.mode)]));
- }
- if (group.value.modType !== "pod") {
- inner.push(new _mathMLTree2.default.MathNode("mo", [makeText("mod", group.mode)]));
- }
- if (group.value.value) {
- var space = new _mathMLTree2.default.MathNode("mspace");
- space.setAttribute("width", "0.333333em");
- inner.push(space);
- inner = inner.concat(buildExpression(group.value.value, options));
- }
- if (group.value.modType === "pod" || group.value.modType === "pmod") {
- inner.push(new _mathMLTree2.default.MathNode("mo", [makeText(")", group.mode)]));
- }
-
- return new _mathMLTree2.default.MathNode("mo", inner);
- };
-
- groupTypes.katex = function (group) {
- var node = new _mathMLTree2.default.MathNode("mtext", [new _mathMLTree2.default.TextNode("KaTeX")]);
-
- return node;
- };
-
- groupTypes.font = function (group, options) {
- var font = group.value.font;
- return buildGroup(group.value.body, options.withFont(font));
- };
-
- groupTypes.delimsizing = function (group) {
- var children = [];
-
- if (group.value.value !== ".") {
- children.push(makeText(group.value.value, group.mode));
- }
-
- var node = new _mathMLTree2.default.MathNode("mo", children);
-
- if (group.value.mclass === "mopen" || group.value.mclass === "mclose") {
- // Only some of the delimsizing functions act as fences, and they
- // return "mopen" or "mclose" mclass.
- node.setAttribute("fence", "true");
- } else {
- // Explicitly disable fencing if it's not a fence, to override the
- // defaults.
- node.setAttribute("fence", "false");
- }
-
- return node;
- };
-
- groupTypes.styling = function (group, options) {
- // Figure out what style we're changing to.
- // TODO(kevinb): dedupe this with buildHTML.js
- // This will be easier of handling of styling nodes is in the same file.
- var styleMap = {
- display: _Style2.default.DISPLAY,
- text: _Style2.default.TEXT,
- script: _Style2.default.SCRIPT,
- scriptscript: _Style2.default.SCRIPTSCRIPT,
- };
-
- var newStyle = styleMap[group.value.style];
- var newOptions = options.havingStyle(newStyle);
-
- var inner = buildExpression(group.value.value, newOptions);
-
- var node = new _mathMLTree2.default.MathNode("mstyle", inner);
-
- var styleAttributes = {
- display: ["0", "true"],
- text: ["0", "false"],
- script: ["1", "false"],
- scriptscript: ["2", "false"],
- };
-
- var attr = styleAttributes[group.value.style];
-
- node.setAttribute("scriptlevel", attr[0]);
- node.setAttribute("displaystyle", attr[1]);
-
- return node;
- };
-
- groupTypes.sizing = function (group, options) {
- var newOptions = options.havingSize(group.value.size);
- var inner = buildExpression(group.value.value, newOptions);
-
- var node = new _mathMLTree2.default.MathNode("mstyle", inner);
-
- // TODO(emily): This doesn't produce the correct size for nested size
- // changes, because we don't keep state of what style we're currently
- // in, so we can't reset the size to normal before changing it. Now
- // that we're passing an options parameter we should be able to fix
- // this.
- node.setAttribute("mathsize", newOptions.sizeMultiplier + "em");
-
- return node;
- };
-
- groupTypes.overline = function (group, options) {
- var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]);
- operator.setAttribute("stretchy", "true");
-
- var node = new _mathMLTree2.default.MathNode("mover", [buildGroup(group.value.body, options), operator]);
- node.setAttribute("accent", "true");
-
- return node;
- };
-
- groupTypes.underline = function (group, options) {
- var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]);
- operator.setAttribute("stretchy", "true");
-
- var node = new _mathMLTree2.default.MathNode("munder", [buildGroup(group.value.body, options), operator]);
- node.setAttribute("accentunder", "true");
-
- return node;
- };
-
- groupTypes.accentUnder = function (group, options) {
- var accentNode = _stretchy2.default.mathMLnode(group.value.label);
- var node = new _mathMLTree2.default.MathNode("munder", [buildGroup(group.value.body, options), accentNode]);
- node.setAttribute("accentunder", "true");
- return node;
- };
-
- groupTypes.enclose = function (group, options) {
- var node = new _mathMLTree2.default.MathNode("menclose", [buildGroup(group.value.body, options)]);
- var notation = "";
- switch (group.value.label) {
- case "\\bcancel":
- notation = "downdiagonalstrike";
- break;
- case "\\sout":
- notation = "horizontalstrike";
- break;
- case "\\fbox":
- notation = "box";
- break;
- default:
- notation = "updiagonalstrike";
- }
- node.setAttribute("notation", notation);
- return node;
- };
-
- groupTypes.horizBrace = function (group, options) {
- var accentNode = _stretchy2.default.mathMLnode(group.value.label);
- return new _mathMLTree2.default.MathNode(group.value.isOver ? "mover" : "munder", [
- buildGroup(group.value.base, options),
- accentNode,
- ]);
- };
-
- groupTypes.xArrow = function (group, options) {
- var arrowNode = _stretchy2.default.mathMLnode(group.value.label);
- var node = void 0;
- var lowerNode = void 0;
-
- if (group.value.body) {
- var upperNode = buildGroup(group.value.body, options);
- if (group.value.below) {
- lowerNode = buildGroup(group.value.below, options);
- node = new _mathMLTree2.default.MathNode("munderover", [arrowNode, lowerNode, upperNode]);
- } else {
- node = new _mathMLTree2.default.MathNode("mover", [arrowNode, upperNode]);
- }
- } else if (group.value.below) {
- lowerNode = buildGroup(group.value.below, options);
- node = new _mathMLTree2.default.MathNode("munder", [arrowNode, lowerNode]);
- } else {
- node = new _mathMLTree2.default.MathNode("mover", [arrowNode]);
- }
- return node;
- };
-
- groupTypes.rule = function (group) {
- // TODO(emily): Figure out if there's an actual way to draw black boxes
- // in MathML.
- var node = new _mathMLTree2.default.MathNode("mrow");
-
- return node;
- };
-
- groupTypes.kern = function (group) {
- // TODO(kevin): Figure out if there's a way to add space in MathML
- var node = new _mathMLTree2.default.MathNode("mrow");
-
- return node;
- };
-
- groupTypes.llap = function (group, options) {
- var node = new _mathMLTree2.default.MathNode("mpadded", [buildGroup(group.value.body, options)]);
-
- node.setAttribute("lspace", "-1width");
- node.setAttribute("width", "0px");
-
- return node;
- };
-
- groupTypes.rlap = function (group, options) {
- var node = new _mathMLTree2.default.MathNode("mpadded", [buildGroup(group.value.body, options)]);
-
- node.setAttribute("width", "0px");
-
- return node;
- };
-
- groupTypes.phantom = function (group, options) {
- var inner = buildExpression(group.value.value, options);
- return new _mathMLTree2.default.MathNode("mphantom", inner);
- };
-
- groupTypes.mclass = function (group, options) {
- var inner = buildExpression(group.value.value, options);
- return new _mathMLTree2.default.MathNode("mstyle", inner);
- };
-
- /**
- * Takes a list of nodes, builds them, and returns a list of the generated
- * MathML nodes. A little simpler than the HTML version because we don't do any
- * previous-node handling.
- */
- var buildExpression = function buildExpression(expression, options) {
- var groups = [];
- for (var i = 0; i < expression.length; i++) {
- var group = expression[i];
- groups.push(buildGroup(group, options));
- }
-
- // TODO(kevinb): combine \\not with mrels and mords
-
- return groups;
- };
-
- /**
- * Takes a group from the parser and calls the appropriate groupTypes function
- * on it to produce a MathML node.
- */
- // TODO(kevinb): determine if removeUnnecessaryRow should always be true
- var buildGroup = function buildGroup(group, options) {
- var removeUnnecessaryRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
-
- if (!group) {
- return new _mathMLTree2.default.MathNode("mrow");
- }
-
- if (groupTypes[group.type]) {
- // Call the groupTypes function
- var result = groupTypes[group.type](group, options);
- if (removeUnnecessaryRow) {
- if (result.type === "mrow" && result.children.length === 1) {
- return result.children[0];
- }
- }
- return result;
- } else {
- throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'");
- }
- };
-
- /**
- * Takes a full parse tree and settings and builds a MathML representation of
- * it. In particular, we put the elements from building the parse tree into a
- * tag so we can also include that TeX source as an annotation.
- *
- * Note that we actually return a domTree element with a `` inside it so
- * we can do appropriate styling.
- */
- var buildMathML = function buildMathML(tree, texExpression, options) {
- var expression = buildExpression(tree, options);
-
- // Wrap up the expression in an mrow so it is presented in the semantics
- // tag correctly.
- var wrapper = new _mathMLTree2.default.MathNode("mrow", expression);
-
- // Build a TeX annotation of the source
- var annotation = new _mathMLTree2.default.MathNode("annotation", [new _mathMLTree2.default.TextNode(texExpression)]);
-
- annotation.setAttribute("encoding", "application/x-tex");
-
- var semantics = new _mathMLTree2.default.MathNode("semantics", [wrapper, annotation]);
-
- var math = new _mathMLTree2.default.MathNode("math", [semantics]);
-
- // You can't style nodes, so we wrap the node in a span.
- return (0, _buildCommon.makeSpan)(["katex-mathml"], [math]);
- };
-
- module.exports = buildMathML;
- },
- {
- "./ParseError": 29,
- "./Style": 33,
- "./buildCommon": 34,
- "./fontMetrics": 41,
- "./mathMLTree": 45,
- "./stretchy": 47,
- "./symbols": 48,
- "./utils": 51,
- },
- ],
- 37: [
- function (require, module, exports) {
- var _buildHTML = require("./buildHTML");
-
- var _buildHTML2 = _interopRequireDefault(_buildHTML);
-
- var _buildMathML = require("./buildMathML");
-
- var _buildMathML2 = _interopRequireDefault(_buildMathML);
-
- var _buildCommon = require("./buildCommon");
-
- var _Options = require("./Options");
-
- var _Options2 = _interopRequireDefault(_Options);
-
- var _Settings = require("./Settings");
-
- var _Settings2 = _interopRequireDefault(_Settings);
-
- var _Style = require("./Style");
-
- var _Style2 = _interopRequireDefault(_Style);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- var buildTree = function buildTree(tree, expression, settings) {
- settings = settings || new _Settings2.default({});
-
- var startStyle = _Style2.default.TEXT;
- if (settings.displayMode) {
- startStyle = _Style2.default.DISPLAY;
- }
-
- // Setup the default options
- var options = new _Options2.default({
- style: startStyle,
- });
-
- // `buildHTML` sometimes messes with the parse tree (like turning bins ->
- // ords), so we build the MathML version first.
- var mathMLNode = (0, _buildMathML2.default)(tree, expression, options);
- var htmlNode = (0, _buildHTML2.default)(tree, options);
-
- var katexNode = (0, _buildCommon.makeSpan)(["katex"], [mathMLNode, htmlNode]);
-
- if (settings.displayMode) {
- return (0, _buildCommon.makeSpan)(["katex-display"], [katexNode]);
- } else {
- return katexNode;
- }
- };
-
- module.exports = buildTree;
- },
- {
- "./Options": 28,
- "./Settings": 32,
- "./Style": 33,
- "./buildCommon": 34,
- "./buildHTML": 35,
- "./buildMathML": 36,
- },
- ],
- 38: [
- function (require, module, exports) {
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- var _Style = require("./Style");
-
- var _Style2 = _interopRequireDefault(_Style);
-
- var _buildCommon = require("./buildCommon");
-
- var _buildCommon2 = _interopRequireDefault(_buildCommon);
-
- var _fontMetrics = require("./fontMetrics");
-
- var _fontMetrics2 = _interopRequireDefault(_fontMetrics);
-
- var _symbols = require("./symbols");
-
- var _symbols2 = _interopRequireDefault(_symbols);
-
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * Get the metrics for a given symbol and font, after transformation (i.e.
- * after following replacement from symbols.js)
- */
- /**
- * This file deals with creating delimiters of various sizes. The TeXbook
- * discusses these routines on page 441-442, in the "Another subroutine sets box
- * x to a specified variable delimiter" paragraph.
- *
- * There are three main routines here. `makeSmallDelim` makes a delimiter in the
- * normal font, but in either text, script, or scriptscript style.
- * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,
- * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of
- * smaller pieces that are stacked on top of one another.
- *
- * The functions take a parameter `center`, which determines if the delimiter
- * should be centered around the axis.
- *
- * Then, there are three exposed functions. `sizedDelim` makes a delimiter in
- * one of the given sizes. This is used for things like `\bigl`.
- * `customSizedDelim` makes a delimiter with a given total height+depth. It is
- * called in places like `\sqrt`. `leftRightDelim` makes an appropriate
- * delimiter which surrounds an expression of a given height an depth. It is
- * used in `\left` and `\right`.
- */
-
- var getMetrics = function getMetrics(symbol, font) {
- if (_symbols2.default.math[symbol] && _symbols2.default.math[symbol].replace) {
- return _fontMetrics2.default.getCharacterMetrics(_symbols2.default.math[symbol].replace, font);
- } else {
- return _fontMetrics2.default.getCharacterMetrics(symbol, font);
- }
- };
-
- /**
- * Puts a delimiter span in a given style, and adds appropriate height, depth,
- * and maxFontSizes.
- */
- var styleWrap = function styleWrap(delim, toStyle, options, classes) {
- var newOptions = options.havingBaseStyle(toStyle);
-
- var span = (0, _buildCommon.makeSpan)((classes || []).concat(newOptions.sizingClasses(options)), [delim], options);
-
- span.delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;
- span.height *= span.delimSizeMultiplier;
- span.depth *= span.delimSizeMultiplier;
- span.maxFontSize = newOptions.sizeMultiplier;
-
- return span;
- };
-
- var centerSpan = function centerSpan(span, options, style) {
- var newOptions = options.havingBaseStyle(style);
- var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;
-
- span.classes.push("delimcenter");
- span.style.top = shift + "em";
- span.height -= shift;
- span.depth += shift;
- };
-
- /**
- * Makes a small delimiter. This is a delimiter that comes in the Main-Regular
- * font, but is restyled to either be in textstyle, scriptstyle, or
- * scriptscriptstyle.
- */
- var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {
- var text = _buildCommon2.default.makeSymbol(delim, "Main-Regular", mode, options);
- var span = styleWrap(text, style, options, classes);
- if (center) {
- centerSpan(span, options, style);
- }
- return span;
- };
-
- /**
- * Builds a symbol in the given font size (note size is an integer)
- */
- var mathrmSize = function mathrmSize(value, size, mode, options) {
- return _buildCommon2.default.makeSymbol(value, "Size" + size + "-Regular", mode, options);
- };
-
- /**
- * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
- * Size3, or Size4 fonts. It is always rendered in textstyle.
- */
- var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {
- var inner = mathrmSize(delim, size, mode, options);
- var span = styleWrap(
- (0, _buildCommon.makeSpan)(["delimsizing", "size" + size], [inner], options),
- _Style2.default.TEXT,
- options,
- classes
- );
- if (center) {
- centerSpan(span, options, _Style2.default.TEXT);
- }
- return span;
- };
-
- /**
- * Make an inner span with the given offset and in the given font. This is used
- * in `makeStackedDelim` to make the stacking pieces for the delimiter.
- */
- var makeInner = function makeInner(symbol, font, mode) {
- var sizeClass = void 0;
- // Apply the correct CSS class to choose the right font.
- if (font === "Size1-Regular") {
- sizeClass = "delim-size1";
- } else if (font === "Size4-Regular") {
- sizeClass = "delim-size4";
- }
-
- var inner = (0, _buildCommon.makeSpan)(
- ["delimsizinginner", sizeClass],
- [(0, _buildCommon.makeSpan)([], [_buildCommon2.default.makeSymbol(symbol, font, mode)])]
- );
-
- // Since this will be passed into `makeVList` in the end, wrap the element
- // in the appropriate tag that VList uses.
- return { type: "elem", elem: inner };
- };
-
- /**
- * Make a stacked delimiter out of a given delimiter, with the total height at
- * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
- */
- var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {
- // There are four parts, the top, an optional middle, a repeated part, and a
- // bottom.
- var top = void 0;
- var middle = void 0;
- var repeat = void 0;
- var bottom = void 0;
- top = repeat = bottom = delim;
- middle = null;
- // Also keep track of what font the delimiters are in
- var font = "Size1-Regular";
-
- // We set the parts and font based on the symbol. Note that we use
- // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the
- // repeats of the arrows
- if (delim === "\\uparrow") {
- repeat = bottom = "\u23D0";
- } else if (delim === "\\Uparrow") {
- repeat = bottom = "\u2016";
- } else if (delim === "\\downarrow") {
- top = repeat = "\u23D0";
- } else if (delim === "\\Downarrow") {
- top = repeat = "\u2016";
- } else if (delim === "\\updownarrow") {
- top = "\\uparrow";
- repeat = "\u23D0";
- bottom = "\\downarrow";
- } else if (delim === "\\Updownarrow") {
- top = "\\Uparrow";
- repeat = "\u2016";
- bottom = "\\Downarrow";
- } else if (delim === "[" || delim === "\\lbrack") {
- top = "\u23A1";
- repeat = "\u23A2";
- bottom = "\u23A3";
- font = "Size4-Regular";
- } else if (delim === "]" || delim === "\\rbrack") {
- top = "\u23A4";
- repeat = "\u23A5";
- bottom = "\u23A6";
- font = "Size4-Regular";
- } else if (delim === "\\lfloor") {
- repeat = top = "\u23A2";
- bottom = "\u23A3";
- font = "Size4-Regular";
- } else if (delim === "\\lceil") {
- top = "\u23A1";
- repeat = bottom = "\u23A2";
- font = "Size4-Regular";
- } else if (delim === "\\rfloor") {
- repeat = top = "\u23A5";
- bottom = "\u23A6";
- font = "Size4-Regular";
- } else if (delim === "\\rceil") {
- top = "\u23A4";
- repeat = bottom = "\u23A5";
- font = "Size4-Regular";
- } else if (delim === "(") {
- top = "\u239B";
- repeat = "\u239C";
- bottom = "\u239D";
- font = "Size4-Regular";
- } else if (delim === ")") {
- top = "\u239E";
- repeat = "\u239F";
- bottom = "\u23A0";
- font = "Size4-Regular";
- } else if (delim === "\\{" || delim === "\\lbrace") {
- top = "\u23A7";
- middle = "\u23A8";
- bottom = "\u23A9";
- repeat = "\u23AA";
- font = "Size4-Regular";
- } else if (delim === "\\}" || delim === "\\rbrace") {
- top = "\u23AB";
- middle = "\u23AC";
- bottom = "\u23AD";
- repeat = "\u23AA";
- font = "Size4-Regular";
- } else if (delim === "\\lgroup") {
- top = "\u23A7";
- bottom = "\u23A9";
- repeat = "\u23AA";
- font = "Size4-Regular";
- } else if (delim === "\\rgroup") {
- top = "\u23AB";
- bottom = "\u23AD";
- repeat = "\u23AA";
- font = "Size4-Regular";
- } else if (delim === "\\lmoustache") {
- top = "\u23A7";
- bottom = "\u23AD";
- repeat = "\u23AA";
- font = "Size4-Regular";
- } else if (delim === "\\rmoustache") {
- top = "\u23AB";
- bottom = "\u23A9";
- repeat = "\u23AA";
- font = "Size4-Regular";
- }
-
- // Get the metrics of the four sections
- var topMetrics = getMetrics(top, font);
- var topHeightTotal = topMetrics.height + topMetrics.depth;
- var repeatMetrics = getMetrics(repeat, font);
- var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;
- var bottomMetrics = getMetrics(bottom, font);
- var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;
- var middleHeightTotal = 0;
- var middleFactor = 1;
- if (middle !== null) {
- var middleMetrics = getMetrics(middle, font);
- middleHeightTotal = middleMetrics.height + middleMetrics.depth;
- middleFactor = 2; // repeat symmetrically above and below middle
- }
-
- // Calcuate the minimal height that the delimiter can have.
- // It is at least the size of the top, bottom, and optional middle combined.
- var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal;
-
- // Compute the number of copies of the repeat symbol we will need
- var repeatCount = Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal));
-
- // Compute the total height of the delimiter including all the symbols
- var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal;
-
- // The center of the delimiter is placed at the center of the axis. Note
- // that in this context, "center" means that the delimiter should be
- // centered around the axis in the current style, while normally it is
- // centered around the axis in textstyle.
- var axisHeight = options.fontMetrics().axisHeight;
- if (center) {
- axisHeight *= options.sizeMultiplier;
- }
- // Calculate the depth
- var depth = realHeightTotal / 2 - axisHeight;
-
- // Now, we start building the pieces that will go into the vlist
-
- // Keep a list of the inner pieces
- var inners = [];
-
- // Add the bottom symbol
- inners.push(makeInner(bottom, font, mode));
-
- if (middle === null) {
- // Add that many symbols
- for (var i = 0; i < repeatCount; i++) {
- inners.push(makeInner(repeat, font, mode));
- }
- } else {
- // When there is a middle bit, we need the middle part and two repeated
- // sections
- for (var _i = 0; _i < repeatCount; _i++) {
- inners.push(makeInner(repeat, font, mode));
- }
- inners.push(makeInner(middle, font, mode));
- for (var _i2 = 0; _i2 < repeatCount; _i2++) {
- inners.push(makeInner(repeat, font, mode));
- }
- }
-
- // Add the top symbol
- inners.push(makeInner(top, font, mode));
-
- // Finally, build the vlist
- var newOptions = options.havingBaseStyle(_Style2.default.TEXT);
- var inner = _buildCommon2.default.makeVList(inners, "bottom", depth, newOptions);
-
- return styleWrap((0, _buildCommon.makeSpan)(["delimsizing", "mult"], [inner], newOptions), _Style2.default.TEXT, options, classes);
- };
-
- var sqrtInnerSVG = {
- // The main path geometry is from glyph U221A in the font KaTeX Main
- main: " ",
-
- // size1 is from glyph U221A in the font KaTeX_Size1-Regular
- 1: " ",
-
- // size2 is from glyph U221A in the font KaTeX_Size2-Regular
- 2: " ",
-
- // size3 is from glyph U221A in the font KaTeX_Size3-Regular
- 3: " ",
-
- // size4 is from glyph U221A in the font KaTeX_Size4-Regular
- 4: " ",
-
- // tall is from glyph U23B7 in the font KaTeX_Size4-Regular
- tall: "l-4 4-4 4c-.667.667-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h\n-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170c-4-3.333-8.333\n-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 219 661 l218 661z\nM702 0H400000v40H742z'/>",
- };
-
- var sqrtSpan = function sqrtSpan(height, delim, options) {
- // Create a span containing an SVG image of a sqrt symbol.
- var span = _buildCommon2.default.makeSpan([], [], options);
- var sizeMultiplier = options.sizeMultiplier; // default
-
- if (delim.type === "small") {
- // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.
- var newOptions = options.havingBaseStyle(delim.style);
- sizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;
-
- span.height = 1 * sizeMultiplier;
- span.style.height = span.height + "em";
- span.surdWidth = 0.833 * sizeMultiplier; // from the font.
- //In the font, the glyph is 1000 units tall. The font scale is 1:1000.
-
- span.innerHTML = "\n " + sqrtInnerSVG["main"] + " ";
- } else if (delim.type === "large") {
- // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.
- // Get sqrt height from font data
- span.height = sizeToMaxHeight[delim.size] / sizeMultiplier;
- span.style.height = span.height + "em";
- span.surdWidth = 1.0 / sizeMultiplier; // from the font
-
- span.innerHTML = '\n ' + sqrtInnerSVG[delim.size] + " ";
- } else {
- // Tall sqrt. In TeX, this would be stacked using multiple glyphs.
- // We'll use a single SVG to accomplish the same thing.
- span.height = height / sizeMultiplier;
- span.style.height = span.height + "em";
- span.surdWidth = 1.056 / sizeMultiplier;
- var viewBoxHeight = Math.floor(span.height * 1000); // scale = 1:1000
- var vertSegment = viewBoxHeight - 54;
-
- // This \sqrt is customized in both height and width. We set the
- // height now. Then CSS will stretch the image to the correct width.
- // This SVG path comes from glyph U+23B7, font KaTeX_Size4-Regular.
- span.innerHTML =
- "\n \n turn into \langle and \rangle in delimiters
- if (delim === "<" || delim === "\\lt") {
- delim = "\\langle";
- } else if (delim === ">" || delim === "\\gt") {
- delim = "\\rangle";
- }
-
- // Sized delimiters are never centered.
- if (_utils2.default.contains(stackLargeDelimiters, delim) || _utils2.default.contains(stackNeverDelimiters, delim)) {
- return makeLargeDelim(delim, size, false, options, mode, classes);
- } else if (_utils2.default.contains(stackAlwaysDelimiters, delim)) {
- return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);
- } else {
- throw new _ParseError2.default("Illegal delimiter: '" + delim + "'");
- }
- };
-
- /**
- * There are three different sequences of delimiter sizes that the delimiters
- * follow depending on the kind of delimiter. This is used when creating custom
- * sized delimiters to decide whether to create a small, large, or stacked
- * delimiter.
- *
- * In real TeX, these sequences aren't explicitly defined, but are instead
- * defined inside the font metrics. Since there are only three sequences that
- * are possible for the delimiters that TeX defines, it is easier to just encode
- * them explicitly here.
- */
-
- // Delimiters that never stack try small delimiters and large delimiters only
- var stackNeverDelimiterSequence = [
- {
- type: "small",
- style: _Style2.default.SCRIPTSCRIPT,
- },
- {
- type: "small",
- style: _Style2.default.SCRIPT,
- },
- { type: "small", style: _Style2.default.TEXT },
- { type: "large", size: 1 },
- { type: "large", size: 2 },
- { type: "large", size: 3 },
- { type: "large", size: 4 },
- ];
-
- // Delimiters that always stack try the small delimiters first, then stack
- var stackAlwaysDelimiterSequence = [
- {
- type: "small",
- style: _Style2.default.SCRIPTSCRIPT,
- },
- {
- type: "small",
- style: _Style2.default.SCRIPT,
- },
- { type: "small", style: _Style2.default.TEXT },
- { type: "stack" },
- ];
-
- // Delimiters that stack when large try the small and then large delimiters, and
- // stack afterwards
- var stackLargeDelimiterSequence = [
- {
- type: "small",
- style: _Style2.default.SCRIPTSCRIPT,
- },
- {
- type: "small",
- style: _Style2.default.SCRIPT,
- },
- { type: "small", style: _Style2.default.TEXT },
- { type: "large", size: 1 },
- { type: "large", size: 2 },
- { type: "large", size: 3 },
- { type: "large", size: 4 },
- { type: "stack" },
- ];
-
- /**
- * Get the font used in a delimiter based on what kind of delimiter it is.
- */
- var delimTypeToFont = function delimTypeToFont(type) {
- if (type.type === "small") {
- return "Main-Regular";
- } else if (type.type === "large") {
- return "Size" + type.size + "-Regular";
- } else if (type.type === "stack") {
- return "Size4-Regular";
- }
- };
-
- /**
- * Traverse a sequence of types of delimiters to decide what kind of delimiter
- * should be used to create a delimiter of the given height+depth.
- */
- var traverseSequence = function traverseSequence(delim, height, sequence, options) {
- // Here, we choose the index we should start at in the sequences. In smaller
- // sizes (which correspond to larger numbers in style.size) we start earlier
- // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts
- // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2
- var start = Math.min(2, 3 - options.style.size);
- for (var i = start; i < sequence.length; i++) {
- if (sequence[i].type === "stack") {
- // This is always the last delimiter, so we just break the loop now.
- break;
- }
-
- var metrics = getMetrics(delim, delimTypeToFont(sequence[i]));
- var heightDepth = metrics.height + metrics.depth;
-
- // Small delimiters are scaled down versions of the same font, so we
- // account for the style change size.
-
- if (sequence[i].type === "small") {
- var newOptions = options.havingBaseStyle(sequence[i].style);
- heightDepth *= newOptions.sizeMultiplier;
- }
-
- // Check if the delimiter at this size works for the given height.
- if (heightDepth > height) {
- return sequence[i];
- }
- }
-
- // If we reached the end of the sequence, return the last sequence element.
- return sequence[sequence.length - 1];
- };
-
- /**
- * Make a delimiter of a given height+depth, with optional centering. Here, we
- * traverse the sequences, and create a delimiter that the sequence tells us to.
- */
- var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {
- if (delim === "<" || delim === "\\lt") {
- delim = "\\langle";
- } else if (delim === ">" || delim === "\\gt") {
- delim = "\\rangle";
- }
-
- // Decide what sequence to use
- var sequence = void 0;
- if (_utils2.default.contains(stackNeverDelimiters, delim)) {
- sequence = stackNeverDelimiterSequence;
- } else if (_utils2.default.contains(stackLargeDelimiters, delim)) {
- sequence = stackLargeDelimiterSequence;
- } else {
- sequence = stackAlwaysDelimiterSequence;
- }
-
- // Look through the sequence
- var delimType = traverseSequence(delim, height, sequence, options);
-
- if (delim === "\\surd") {
- // Get an SVG image for
- return sqrtSpan(height, delimType, options);
- } else {
- // Get the delimiter from font glyphs.
- // Depending on the sequence element we decided on, call the
- // appropriate function.
- if (delimType.type === "small") {
- return makeSmallDelim(delim, delimType.style, center, options, mode, classes);
- } else if (delimType.type === "large") {
- return makeLargeDelim(delim, delimType.size, center, options, mode, classes);
- } else if (delimType.type === "stack") {
- return makeStackedDelim(delim, height, center, options, mode, classes);
- }
- }
- };
-
- /**
- * Make a delimiter for use with `\left` and `\right`, given a height and depth
- * of an expression that the delimiters surround.
- */
- var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {
- // We always center \left/\right delimiters, so the axis is always shifted
- var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier;
-
- // Taken from TeX source, tex.web, function make_left_right
- var delimiterFactor = 901;
- var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;
-
- var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);
-
- var totalHeight = Math.max(
- // In real TeX, calculations are done using integral values which are
- // 65536 per pt, or 655360 per em. So, the division here truncates in
- // TeX but doesn't here, producing different results. If we wanted to
- // exactly match TeX's calculation, we could do
- // Math.floor(655360 * maxDistFromAxis / 500) *
- // delimiterFactor / 655360
- // (To see the difference, compare
- // x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
- // in TeX and KaTeX)
- (maxDistFromAxis / 500) * delimiterFactor,
- 2 * maxDistFromAxis - delimiterExtend
- );
-
- // Finally, we defer to `makeCustomSizedDelim` with our calculated total
- // height
- return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);
- };
-
- module.exports = {
- sizedDelim: makeSizedDelim,
- customSizedDelim: makeCustomSizedDelim,
- leftRightDelim: makeLeftRightDelim,
- };
- },
- {
- "./ParseError": 29,
- "./Style": 33,
- "./buildCommon": 34,
- "./fontMetrics": 41,
- "./symbols": 48,
- "./utils": 51,
- },
- ],
- 39: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- var _createClass2 = require("babel-runtime/helpers/createClass");
-
- var _createClass3 = _interopRequireDefault(_createClass2);
-
- var _unicodeRegexes = require("./unicodeRegexes");
-
- var _unicodeRegexes2 = _interopRequireDefault(_unicodeRegexes);
-
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * Create an HTML className based on a list of classes. In addition to joining
- * with spaces, we also remove null or empty classes.
- */
- /**
- * These objects store the data about the DOM nodes we create, as well as some
- * extra data. They can then be transformed into real DOM nodes with the
- * `toNode` function or HTML markup using `toMarkup`. They are useful for both
- * storing extra properties on the nodes, as well as providing a way to easily
- * work with the DOM.
- *
- * Similar functions for working with MathML nodes exist in mathMLTree.js.
- */
- var createClass = function createClass(classes) {
- classes = classes.slice();
- for (var i = classes.length - 1; i >= 0; i--) {
- if (!classes[i]) {
- classes.splice(i, 1);
- }
- }
-
- return classes.join(" ");
- };
-
- /**
- * This node represents a span node, with a className, a list of children, and
- * an inline style. It also contains information about its height, depth, and
- * maxFontSize.
- */
-
- var span = (function () {
- function span(classes, children, options) {
- (0, _classCallCheck3.default)(this, span);
-
- this.classes = classes || [];
- this.children = children || [];
- this.height = 0;
- this.depth = 0;
- this.maxFontSize = 0;
- this.style = {};
- this.attributes = {};
- this.innerHTML; // used for inline SVG code.
- if (options) {
- if (options.style.isTight()) {
- this.classes.push("mtight");
- }
- if (options.getColor()) {
- this.style.color = options.getColor();
- }
- }
- }
-
- /**
- * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all
- * browsers support attributes the same, and having too many custom attributes
- * is probably bad.
- */
-
- (0, _createClass3.default)(span, [
- {
- key: "setAttribute",
- value: function setAttribute(attribute, value) {
- this.attributes[attribute] = value;
- },
- },
- {
- key: "tryCombine",
- value: function tryCombine(sibling) {
- return false;
- },
-
- /**
- * Convert the span into an HTML node
- */
- },
- {
- key: "toNode",
- value: function toNode() {
- var span = document.createElement("span");
-
- // Apply the class
- span.className = createClass(this.classes);
-
- // Apply inline styles
- for (var style in this.style) {
- if (Object.prototype.hasOwnProperty.call(this.style, style)) {
- span.style[style] = this.style[style];
- }
- }
-
- // Apply attributes
- for (var attr in this.attributes) {
- if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
- span.setAttribute(attr, this.attributes[attr]);
- }
- }
-
- if (this.innerHTML) {
- span.innerHTML = this.innerHTML;
- }
-
- // Append the children, also as HTML nodes
- for (var i = 0; i < this.children.length; i++) {
- span.appendChild(this.children[i].toNode());
- }
-
- return span;
- },
-
- /**
- * Convert the span into an HTML markup string
- */
- },
- {
- key: "toMarkup",
- value: function toMarkup() {
- var markup = "";
-
- if (this.innerHTML) {
- markup += this.innerHTML;
- }
-
- // Add the markup of the children, also as markup
- for (var i = 0; i < this.children.length; i++) {
- markup += this.children[i].toMarkup();
- }
-
- markup += " ";
-
- return markup;
- },
- },
- ]);
- return span;
- })();
-
- /**
- * This node represents a document fragment, which contains elements, but when
- * placed into the DOM doesn't have any representation itself. Thus, it only
- * contains children and doesn't have any HTML properties. It also keeps track
- * of a height, depth, and maxFontSize.
- */
-
- var documentFragment = (function () {
- function documentFragment(children) {
- (0, _classCallCheck3.default)(this, documentFragment);
-
- this.children = children || [];
- this.height = 0;
- this.depth = 0;
- this.maxFontSize = 0;
- }
-
- /**
- * Convert the fragment into a node
- */
-
- (0, _createClass3.default)(documentFragment, [
- {
- key: "toNode",
- value: function toNode() {
- // Create a fragment
- var frag = document.createDocumentFragment();
-
- // Append the children
- for (var i = 0; i < this.children.length; i++) {
- frag.appendChild(this.children[i].toNode());
- }
-
- return frag;
- },
-
- /**
- * Convert the fragment into HTML markup
- */
- },
- {
- key: "toMarkup",
- value: function toMarkup() {
- var markup = "";
-
- // Simply concatenate the markup for the children together
- for (var i = 0; i < this.children.length; i++) {
- markup += this.children[i].toMarkup();
- }
-
- return markup;
- },
- },
- ]);
- return documentFragment;
- })();
-
- var iCombinations = {
- î: "\u0131\u0302",
- ï: "\u0131\u0308",
- í: "\u0131\u0301",
- // 'ī': '\u0131\u0304', // enable when we add Extended Latin
- ì: "\u0131\u0300",
- };
-
- /**
- * A symbol node contains information about a single symbol. It either renders
- * to a single text node, or a span with a single text node in it, depending on
- * whether it has CSS classes, styles, or needs italic correction.
- */
-
- var symbolNode = (function () {
- function symbolNode(value, height, depth, italic, skew, classes, style) {
- (0, _classCallCheck3.default)(this, symbolNode);
-
- this.value = value || "";
- this.height = height || 0;
- this.depth = depth || 0;
- this.italic = italic || 0;
- this.skew = skew || 0;
- this.classes = classes || [];
- this.style = style || {};
- this.maxFontSize = 0;
-
- // Mark CJK characters with specific classes so that we can specify which
- // fonts to use. This allows us to render these characters with a serif
- // font in situations where the browser would either default to a sans serif
- // or render a placeholder character.
- if (_unicodeRegexes2.default.cjkRegex.test(value)) {
- // I couldn't find any fonts that contained Hangul as well as all of
- // the other characters we wanted to test there for it gets its own
- // CSS class.
- if (_unicodeRegexes2.default.hangulRegex.test(value)) {
- this.classes.push("hangul_fallback");
- } else {
- this.classes.push("cjk_fallback");
- }
- }
-
- if (/[îïíì]/.test(this.value)) {
- // add ī when we add Extended Latin
- this.value = iCombinations[this.value];
- }
- }
-
- (0, _createClass3.default)(symbolNode, [
- {
- key: "tryCombine",
- value: function tryCombine(sibling) {
- if (
- !sibling ||
- !(sibling instanceof symbolNode) ||
- this.italic > 0 ||
- createClass(this.classes) !== createClass(sibling.classes) ||
- this.skew !== sibling.skew ||
- this.maxFontSize !== sibling.maxFontSize
- ) {
- return false;
- }
- for (var style in this.style) {
- if (this.style.hasOwnProperty(style) && this.style[style] !== sibling.style[style]) {
- return false;
- }
- }
- for (var _style in sibling.style) {
- if (sibling.style.hasOwnProperty(_style) && this.style[_style] !== sibling.style[_style]) {
- return false;
- }
- }
- this.value += sibling.value;
- this.height = Math.max(this.height, sibling.height);
- this.depth = Math.max(this.depth, sibling.depth);
- this.italic = sibling.italic;
- return true;
- },
-
- /**
- * Creates a text node or span from a symbol node. Note that a span is only
- * created if it is needed.
- */
- },
- {
- key: "toNode",
- value: function toNode() {
- var node = document.createTextNode(this.value);
- var span = null;
-
- if (this.italic > 0) {
- span = document.createElement("span");
- span.style.marginRight = this.italic + "em";
- }
-
- if (this.classes.length > 0) {
- span = span || document.createElement("span");
- span.className = createClass(this.classes);
- }
-
- for (var style in this.style) {
- if (this.style.hasOwnProperty(style)) {
- span = span || document.createElement("span");
- span.style[style] = this.style[style];
- }
- }
-
- if (span) {
- span.appendChild(node);
- return span;
- } else {
- return node;
- }
- },
-
- /**
- * Creates markup for a symbol node.
- */
- },
- {
- key: "toMarkup",
- value: function toMarkup() {
- // TODO(alpert): More duplication than I'd like from
- // span.prototype.toMarkup and symbolNode.prototype.toNode...
- var needsSpan = false;
-
- var markup = " 0) {
- styles += "margin-right:" + this.italic + "em;";
- }
- for (var style in this.style) {
- if (this.style.hasOwnProperty(style)) {
- styles += _utils2.default.hyphenate(style) + ":" + this.style[style] + ";";
- }
- }
-
- if (styles) {
- needsSpan = true;
- markup += ' style="' + _utils2.default.escape(styles) + '"';
- }
-
- var escaped = _utils2.default.escape(this.value);
- if (needsSpan) {
- markup += ">";
- markup += escaped;
- markup += " ";
- return markup;
- } else {
- return escaped;
- }
- },
- },
- ]);
- return symbolNode;
- })();
-
- module.exports = {
- span: span,
- documentFragment: documentFragment,
- symbolNode: symbolNode,
- };
- },
- {
- "./unicodeRegexes": 49,
- "./utils": 51,
- "babel-runtime/helpers/classCallCheck": 4,
- "babel-runtime/helpers/createClass": 5,
- },
- ],
- 40: [
- function (require, module, exports) {
- var _ParseNode = require("./ParseNode");
-
- var _ParseNode2 = _interopRequireDefault(_ParseNode);
-
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * Parse the body of the environment, with rows delimited by \\ and
- * columns delimited by &, and create a nested list in row-major order
- * with one group per cell. If given an optional argument style
- * ("text", "display", etc.), then each cell is cast into that style.
- */
- /* eslint no-constant-condition:0 */
- function parseArray(parser, result, style) {
- var row = [];
- var body = [row];
- var rowGaps = [];
- while (true) {
- var cell = parser.parseExpression(false, null);
- cell = new _ParseNode2.default("ordgroup", cell, parser.mode);
- if (style) {
- cell = new _ParseNode2.default(
- "styling",
- {
- style: style,
- value: [cell],
- },
- parser.mode
- );
- }
- row.push(cell);
- var next = parser.nextToken.text;
- if (next === "&") {
- parser.consume();
- } else if (next === "\\end") {
- break;
- } else if (next === "\\\\" || next === "\\cr") {
- var cr = parser.parseFunction();
- rowGaps.push(cr.value.size);
- row = [];
- body.push(row);
- } else {
- throw new _ParseError2.default("Expected & or \\\\ or \\end", parser.nextToken);
- }
- }
- result.body = body;
- result.rowGaps = rowGaps;
- return new _ParseNode2.default(result.type, result, parser.mode);
- }
-
- /*
- * An environment definition is very similar to a function definition:
- * it is declared with a name or a list of names, a set of properties
- * and a handler containing the actual implementation.
- *
- * The properties include:
- * - numArgs: The number of arguments after the \begin{name} function.
- * - argTypes: (optional) Just like for a function
- * - allowedInText: (optional) Whether or not the environment is allowed inside
- * text mode (default false) (not enforced yet)
- * - numOptionalArgs: (optional) Just like for a function
- * A bare number instead of that object indicates the numArgs value.
- *
- * The handler function will receive two arguments
- * - context: information and references provided by the parser
- * - args: an array of arguments passed to \begin{name}
- * The context contains the following properties:
- * - envName: the name of the environment, one of the listed names.
- * - parser: the parser object
- * - lexer: the lexer object
- * - positions: the positions associated with these arguments from args.
- * The handler must return a ParseResult.
- */
- function defineEnvironment(names, props, handler) {
- if (typeof names === "string") {
- names = [names];
- }
- if (typeof props === "number") {
- props = { numArgs: props };
- }
- // Set default values of environments
- var data = {
- numArgs: props.numArgs || 0,
- argTypes: props.argTypes,
- greediness: 1,
- allowedInText: !!props.allowedInText,
- numOptionalArgs: props.numOptionalArgs || 0,
- handler: handler,
- };
- for (var i = 0; i < names.length; ++i) {
- module.exports[names[i]] = data;
- }
- }
-
- // Decides on a style for cells in an array according to whether the given
- // environment name starts with the letter 'd'.
- function dCellStyle(envName) {
- if (envName.substr(0, 1) === "d") {
- return "display";
- } else {
- return "text";
- }
- }
-
- // Arrays are part of LaTeX, defined in lttab.dtx so its documentation
- // is part of the source2e.pdf file of LaTeX2e source documentation.
- // {darray} is an {array} environment where cells are set in \displaystyle,
- // as defined in nccmath.sty.
- defineEnvironment(
- ["array", "darray"],
- {
- numArgs: 1,
- },
- function (context, args) {
- var colalign = args[0];
- colalign = colalign.value.map ? colalign.value : [colalign];
- var cols = colalign.map(function (node) {
- var ca = node.value;
- if ("lcr".indexOf(ca) !== -1) {
- return {
- type: "align",
- align: ca,
- };
- } else if (ca === "|") {
- return {
- type: "separator",
- separator: "|",
- };
- }
- throw new _ParseError2.default("Unknown column alignment: " + node.value, node);
- });
- var res = {
- type: "array",
- cols: cols,
- hskipBeforeAndAfter: true,
- };
- res = parseArray(context.parser, res, dCellStyle(context.envName));
- return res;
- }
- );
-
- // The matrix environments of amsmath builds on the array environment
- // of LaTeX, which is discussed above.
- defineEnvironment(["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"], {}, function (context) {
- var delimiters = {
- matrix: null,
- pmatrix: ["(", ")"],
- bmatrix: ["[", "]"],
- Bmatrix: ["\\{", "\\}"],
- vmatrix: ["|", "|"],
- Vmatrix: ["\\Vert", "\\Vert"],
- }[context.envName];
- var res = {
- type: "array",
- hskipBeforeAndAfter: false,
- };
- res = parseArray(context.parser, res, dCellStyle(context.envName));
- if (delimiters) {
- res = new _ParseNode2.default(
- "leftright",
- {
- body: [res],
- left: delimiters[0],
- right: delimiters[1],
- },
- context.mode
- );
- }
- return res;
- });
-
- // A cases environment (in amsmath.sty) is almost equivalent to
- // \def\arraystretch{1.2}%
- // \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right.
- // {dcases} is a {cases} environment where cells are set in \displaystyle,
- // as defined in mathtools.sty.
- defineEnvironment(["cases", "dcases"], {}, function (context) {
- var res = {
- type: "array",
- arraystretch: 1.2,
- cols: [
- {
- type: "align",
- align: "l",
- pregap: 0,
- // TODO(kevinb) get the current style.
- // For now we use the metrics for TEXT style which is what we were
- // doing before. Before attempting to get the current style we
- // should look at TeX's behavior especially for \over and matrices.
- postgap: 1.0,
- },
- {
- type: "align",
- align: "l",
- pregap: 0,
- postgap: 0,
- },
- ],
- };
- res = parseArray(context.parser, res, dCellStyle(context.envName));
- res = new _ParseNode2.default(
- "leftright",
- {
- body: [res],
- left: "\\{",
- right: ".",
- },
- context.mode
- );
- return res;
- });
-
- // An aligned environment is like the align* environment
- // except it operates within math mode.
- // Note that we assume \nomallineskiplimit to be zero,
- // so that \strut@ is the same as \strut.
- defineEnvironment("aligned", {}, function (context) {
- var res = {
- type: "array",
- cols: [],
- addJot: true,
- };
- res = parseArray(context.parser, res, "display");
- // Count number of columns = maximum number of cells in each row.
- // At the same time, prepend empty group {} at beginning of every second
- // cell in each row (starting with second cell) so that operators become
- // binary. This behavior is implemented in amsmath's \start@aligned.
- var emptyGroup = new _ParseNode2.default("ordgroup", [], context.mode);
- var numCols = 0;
- res.value.body.forEach(function (row) {
- for (var i = 1; i < row.length; i += 2) {
- // Modify ordgroup node within styling node
- var ordgroup = row[i].value.value[0];
- ordgroup.value.unshift(emptyGroup);
- }
- if (numCols < row.length) {
- numCols = row.length;
- }
- });
- for (var i = 0; i < numCols; ++i) {
- var align = "r";
- var pregap = 0;
- if (i % 2 === 1) {
- align = "l";
- } else if (i > 0) {
- pregap = 2; // one \qquad between columns
- }
- res.value.cols[i] = {
- type: "align",
- align: align,
- pregap: pregap,
- postgap: 0,
- };
- }
- return res;
- });
-
- // A gathered environment is like an array environment with one centered
- // column, but where rows are considered lines so get \jot line spacing
- // and contents are set in \displaystyle.
- defineEnvironment("gathered", {}, function (context) {
- var res = {
- type: "array",
- cols: [
- {
- type: "align",
- align: "c",
- },
- ],
- addJot: true,
- };
- res = parseArray(context.parser, res, "display");
- return res;
- });
- },
- { "./ParseError": 29, "./ParseNode": 30 },
- ],
- 41: [
- function (require, module, exports) {
- var _unicodeRegexes = require("./unicodeRegexes");
-
- var _fontMetricsData = require("./fontMetricsData");
-
- var _fontMetricsData2 = _interopRequireDefault(_fontMetricsData);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * This file contains metrics regarding fonts and individual symbols. The sigma
- * and xi variables, as well as the metricMap map contain data extracted from
- * TeX, TeX font metrics, and the TTF files. These data are then exposed via the
- * `metrics` variable and the getCharacterMetrics function.
- */
-
- // In TeX, there are actually three sets of dimensions, one for each of
- // textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:
- // 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are
- // provided in the the arrays below, in that order.
- //
- // The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively.
- // This was determined by running the following script:
- //
- // latex -interaction=nonstopmode \
- // '\documentclass{article}\usepackage{amsmath}\begin{document}' \
- // '$a$ \expandafter\show\the\textfont2' \
- // '\expandafter\show\the\scriptfont2' \
- // '\expandafter\show\the\scriptscriptfont2' \
- // '\stop'
- //
- // The metrics themselves were retreived using the following commands:
- //
- // tftopl cmsy10
- // tftopl cmsy7
- // tftopl cmsy5
- //
- // The output of each of these commands is quite lengthy. The only part we
- // care about is the FONTDIMEN section. Each value is measured in EMs.
- var sigmasAndXis = {
- slant: [0.25, 0.25, 0.25], // sigma1
- space: [0.0, 0.0, 0.0], // sigma2
- stretch: [0.0, 0.0, 0.0], // sigma3
- shrink: [0.0, 0.0, 0.0], // sigma4
- xHeight: [0.431, 0.431, 0.431], // sigma5
- quad: [1.0, 1.171, 1.472], // sigma6
- extraSpace: [0.0, 0.0, 0.0], // sigma7
- num1: [0.677, 0.732, 0.925], // sigma8
- num2: [0.394, 0.384, 0.387], // sigma9
- num3: [0.444, 0.471, 0.504], // sigma10
- denom1: [0.686, 0.752, 1.025], // sigma11
- denom2: [0.345, 0.344, 0.532], // sigma12
- sup1: [0.413, 0.503, 0.504], // sigma13
- sup2: [0.363, 0.431, 0.404], // sigma14
- sup3: [0.289, 0.286, 0.294], // sigma15
- sub1: [0.15, 0.143, 0.2], // sigma16
- sub2: [0.247, 0.286, 0.4], // sigma17
- supDrop: [0.386, 0.353, 0.494], // sigma18
- subDrop: [0.05, 0.071, 0.1], // sigma19
- delim1: [2.39, 1.7, 1.98], // sigma20
- delim2: [1.01, 1.157, 1.42], // sigma21
- axisHeight: [0.25, 0.25, 0.25], // sigma22
-
- // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
- // they correspond to the font parameters of the extension fonts (family 3).
- // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
- // match cmex7, we'd use cmex7.tfm values for script and scriptscript
- // values.
- defaultRuleThickness: [0.04, 0.049, 0.049], // xi8; cmex7: 0.049
- bigOpSpacing1: [0.111, 0.111, 0.111], // xi9
- bigOpSpacing2: [0.166, 0.166, 0.166], // xi10
- bigOpSpacing3: [0.2, 0.2, 0.2], // xi11
- bigOpSpacing4: [0.6, 0.611, 0.611], // xi12; cmex7: 0.611
- bigOpSpacing5: [0.1, 0.143, 0.143], // xi13; cmex7: 0.143
-
- // The \sqrt rule width is taken from the height of the surd character.
- // Since we use the same font at all sizes, this thickness doesn't scale.
- sqrtRuleThickness: [0.04, 0.04, 0.04],
-
- // This value determines how large a pt is, for metrics which are defined
- // in terms of pts.
- // This value is also used in katex.less; if you change it make sure the
- // values match.
- ptPerEm: [10.0, 10.0, 10.0],
-
- // The space between adjacent `|` columns in an array definition. From
- // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
- doubleRuleSep: [0.2, 0.2, 0.2],
- };
-
- // This map contains a mapping from font name and character code to character
- // metrics, including height, depth, italic correction, and skew (kern from the
- // character to the corresponding \skewchar)
- // This map is generated via `make metrics`. It should not be changed manually.
-
- // These are very rough approximations. We default to Times New Roman which
- // should have Latin-1 and Cyrillic characters, but may not depending on the
- // operating system. The metrics do not account for extra height from the
- // accents. In the case of Cyrillic characters which have both ascenders and
- // descenders we prefer approximations with ascenders, primarily to prevent
- // the fraction bar or root line from intersecting the glyph.
- // TODO(kevinb) allow union of multiple glyph metrics for better accuracy.
- var extraCharacterMap = {
- // Latin-1
- À: "A",
- Á: "A",
- Â: "A",
- Ã: "A",
- Ä: "A",
- Å: "A",
- Æ: "A",
- Ç: "C",
- È: "E",
- É: "E",
- Ê: "E",
- Ë: "E",
- Ì: "I",
- Í: "I",
- Î: "I",
- Ï: "I",
- Ð: "D",
- Ñ: "N",
- Ò: "O",
- Ó: "O",
- Ô: "O",
- Õ: "O",
- Ö: "O",
- Ø: "O",
- Ù: "U",
- Ú: "U",
- Û: "U",
- Ü: "U",
- Ý: "Y",
- Þ: "o",
- ß: "B",
- à: "a",
- á: "a",
- â: "a",
- ã: "a",
- ä: "a",
- å: "a",
- æ: "a",
- ç: "c",
- è: "e",
- é: "e",
- ê: "e",
- ë: "e",
- ì: "i",
- í: "i",
- î: "i",
- ï: "i",
- ð: "d",
- ñ: "n",
- ò: "o",
- ó: "o",
- ô: "o",
- õ: "o",
- ö: "o",
- ø: "o",
- ù: "u",
- ú: "u",
- û: "u",
- ü: "u",
- ý: "y",
- þ: "o",
- ÿ: "y",
-
- // Cyrillic
- А: "A",
- Б: "B",
- В: "B",
- Г: "F",
- Д: "A",
- Е: "E",
- Ж: "K",
- З: "3",
- И: "N",
- Й: "N",
- К: "K",
- Л: "N",
- М: "M",
- Н: "H",
- О: "O",
- П: "N",
- Р: "P",
- С: "C",
- Т: "T",
- У: "y",
- Ф: "O",
- Х: "X",
- Ц: "U",
- Ч: "h",
- Ш: "W",
- Щ: "W",
- Ъ: "B",
- Ы: "X",
- Ь: "B",
- Э: "3",
- Ю: "X",
- Я: "R",
- а: "a",
- б: "b",
- в: "a",
- г: "r",
- д: "y",
- е: "e",
- ж: "m",
- з: "e",
- и: "n",
- й: "n",
- к: "n",
- л: "n",
- м: "m",
- н: "n",
- о: "o",
- п: "n",
- р: "p",
- с: "c",
- т: "o",
- у: "y",
- ф: "b",
- х: "x",
- ц: "n",
- ч: "n",
- ш: "w",
- щ: "w",
- ъ: "a",
- ы: "m",
- ь: "a",
- э: "e",
- ю: "m",
- я: "r",
- };
-
- /**
- * This function is a convenience function for looking up information in the
- * metricMap table. It takes a character as a string, and a style.
- *
- * Note: the `width` property may be undefined if fontMetricsData.js wasn't
- * built using `Make extended_metrics`.
- */
- var getCharacterMetrics = function getCharacterMetrics(character, style) {
- var ch = character.charCodeAt(0);
- if (character[0] in extraCharacterMap) {
- ch = extraCharacterMap[character[0]].charCodeAt(0);
- } else if (_unicodeRegexes.cjkRegex.test(character[0])) {
- ch = "M".charCodeAt(0);
- }
- var metrics = _fontMetricsData2.default[style][ch];
- if (metrics) {
- return {
- depth: metrics[0],
- height: metrics[1],
- italic: metrics[2],
- skew: metrics[3],
- width: metrics[4],
- };
- }
- };
-
- var fontMetricsBySizeIndex = {};
-
- /**
- * Get the font metrics for a given size.
- */
- var getFontMetrics = function getFontMetrics(size) {
- var sizeIndex = void 0;
- if (size >= 5) {
- sizeIndex = 0;
- } else if (size >= 3) {
- sizeIndex = 1;
- } else {
- sizeIndex = 2;
- }
- if (!fontMetricsBySizeIndex[sizeIndex]) {
- var metrics = (fontMetricsBySizeIndex[sizeIndex] = {});
- for (var key in sigmasAndXis) {
- if (sigmasAndXis.hasOwnProperty(key)) {
- metrics[key] = sigmasAndXis[key][sizeIndex];
- }
- }
- metrics.cssEmPerMu = metrics.quad / 18;
- }
- return fontMetricsBySizeIndex[sizeIndex];
- };
-
- module.exports = {
- getFontMetrics: getFontMetrics,
- getCharacterMetrics: getCharacterMetrics,
- };
- },
- { "./fontMetricsData": 42, "./unicodeRegexes": 49 },
- ],
- 42: [
- function (require, module, exports) {
- module.exports = {
- "AMS-Regular": {
- 65: [0, 0.68889, 0, 0],
- 66: [0, 0.68889, 0, 0],
- 67: [0, 0.68889, 0, 0],
- 68: [0, 0.68889, 0, 0],
- 69: [0, 0.68889, 0, 0],
- 70: [0, 0.68889, 0, 0],
- 71: [0, 0.68889, 0, 0],
- 72: [0, 0.68889, 0, 0],
- 73: [0, 0.68889, 0, 0],
- 74: [0.16667, 0.68889, 0, 0],
- 75: [0, 0.68889, 0, 0],
- 76: [0, 0.68889, 0, 0],
- 77: [0, 0.68889, 0, 0],
- 78: [0, 0.68889, 0, 0],
- 79: [0.16667, 0.68889, 0, 0],
- 80: [0, 0.68889, 0, 0],
- 81: [0.16667, 0.68889, 0, 0],
- 82: [0, 0.68889, 0, 0],
- 83: [0, 0.68889, 0, 0],
- 84: [0, 0.68889, 0, 0],
- 85: [0, 0.68889, 0, 0],
- 86: [0, 0.68889, 0, 0],
- 87: [0, 0.68889, 0, 0],
- 88: [0, 0.68889, 0, 0],
- 89: [0, 0.68889, 0, 0],
- 90: [0, 0.68889, 0, 0],
- 107: [0, 0.68889, 0, 0],
- 165: [0, 0.675, 0.025, 0],
- 174: [0.15559, 0.69224, 0, 0],
- 240: [0, 0.68889, 0, 0],
- 295: [0, 0.68889, 0, 0],
- 710: [0, 0.825, 0, 0],
- 732: [0, 0.9, 0, 0],
- 770: [0, 0.825, 0, 0],
- 771: [0, 0.9, 0, 0],
- 989: [0.08167, 0.58167, 0, 0],
- 1008: [0, 0.43056, 0.04028, 0],
- 8245: [0, 0.54986, 0, 0],
- 8463: [0, 0.68889, 0, 0],
- 8487: [0, 0.68889, 0, 0],
- 8498: [0, 0.68889, 0, 0],
- 8502: [0, 0.68889, 0, 0],
- 8503: [0, 0.68889, 0, 0],
- 8504: [0, 0.68889, 0, 0],
- 8513: [0, 0.68889, 0, 0],
- 8592: [-0.03598, 0.46402, 0, 0],
- 8594: [-0.03598, 0.46402, 0, 0],
- 8602: [-0.13313, 0.36687, 0, 0],
- 8603: [-0.13313, 0.36687, 0, 0],
- 8606: [0.01354, 0.52239, 0, 0],
- 8608: [0.01354, 0.52239, 0, 0],
- 8610: [0.01354, 0.52239, 0, 0],
- 8611: [0.01354, 0.52239, 0, 0],
- 8619: [0, 0.54986, 0, 0],
- 8620: [0, 0.54986, 0, 0],
- 8621: [-0.13313, 0.37788, 0, 0],
- 8622: [-0.13313, 0.36687, 0, 0],
- 8624: [0, 0.69224, 0, 0],
- 8625: [0, 0.69224, 0, 0],
- 8630: [0, 0.43056, 0, 0],
- 8631: [0, 0.43056, 0, 0],
- 8634: [0.08198, 0.58198, 0, 0],
- 8635: [0.08198, 0.58198, 0, 0],
- 8638: [0.19444, 0.69224, 0, 0],
- 8639: [0.19444, 0.69224, 0, 0],
- 8642: [0.19444, 0.69224, 0, 0],
- 8643: [0.19444, 0.69224, 0, 0],
- 8644: [0.1808, 0.675, 0, 0],
- 8646: [0.1808, 0.675, 0, 0],
- 8647: [0.1808, 0.675, 0, 0],
- 8648: [0.19444, 0.69224, 0, 0],
- 8649: [0.1808, 0.675, 0, 0],
- 8650: [0.19444, 0.69224, 0, 0],
- 8651: [0.01354, 0.52239, 0, 0],
- 8652: [0.01354, 0.52239, 0, 0],
- 8653: [-0.13313, 0.36687, 0, 0],
- 8654: [-0.13313, 0.36687, 0, 0],
- 8655: [-0.13313, 0.36687, 0, 0],
- 8666: [0.13667, 0.63667, 0, 0],
- 8667: [0.13667, 0.63667, 0, 0],
- 8669: [-0.13313, 0.37788, 0, 0],
- 8672: [-0.064, 0.437, 0, 0],
- 8674: [-0.064, 0.437, 0, 0],
- 8705: [0, 0.825, 0, 0],
- 8708: [0, 0.68889, 0, 0],
- 8709: [0.08167, 0.58167, 0, 0],
- 8717: [0, 0.43056, 0, 0],
- 8722: [-0.03598, 0.46402, 0, 0],
- 8724: [0.08198, 0.69224, 0, 0],
- 8726: [0.08167, 0.58167, 0, 0],
- 8733: [0, 0.69224, 0, 0],
- 8736: [0, 0.69224, 0, 0],
- 8737: [0, 0.69224, 0, 0],
- 8738: [0.03517, 0.52239, 0, 0],
- 8739: [0.08167, 0.58167, 0, 0],
- 8740: [0.25142, 0.74111, 0, 0],
- 8741: [0.08167, 0.58167, 0, 0],
- 8742: [0.25142, 0.74111, 0, 0],
- 8756: [0, 0.69224, 0, 0],
- 8757: [0, 0.69224, 0, 0],
- 8764: [-0.13313, 0.36687, 0, 0],
- 8765: [-0.13313, 0.37788, 0, 0],
- 8769: [-0.13313, 0.36687, 0, 0],
- 8770: [-0.03625, 0.46375, 0, 0],
- 8774: [0.30274, 0.79383, 0, 0],
- 8776: [-0.01688, 0.48312, 0, 0],
- 8778: [0.08167, 0.58167, 0, 0],
- 8782: [0.06062, 0.54986, 0, 0],
- 8783: [0.06062, 0.54986, 0, 0],
- 8785: [0.08198, 0.58198, 0, 0],
- 8786: [0.08198, 0.58198, 0, 0],
- 8787: [0.08198, 0.58198, 0, 0],
- 8790: [0, 0.69224, 0, 0],
- 8791: [0.22958, 0.72958, 0, 0],
- 8796: [0.08198, 0.91667, 0, 0],
- 8806: [0.25583, 0.75583, 0, 0],
- 8807: [0.25583, 0.75583, 0, 0],
- 8808: [0.25142, 0.75726, 0, 0],
- 8809: [0.25142, 0.75726, 0, 0],
- 8812: [0.25583, 0.75583, 0, 0],
- 8814: [0.20576, 0.70576, 0, 0],
- 8815: [0.20576, 0.70576, 0, 0],
- 8816: [0.30274, 0.79383, 0, 0],
- 8817: [0.30274, 0.79383, 0, 0],
- 8818: [0.22958, 0.72958, 0, 0],
- 8819: [0.22958, 0.72958, 0, 0],
- 8822: [0.1808, 0.675, 0, 0],
- 8823: [0.1808, 0.675, 0, 0],
- 8828: [0.13667, 0.63667, 0, 0],
- 8829: [0.13667, 0.63667, 0, 0],
- 8830: [0.22958, 0.72958, 0, 0],
- 8831: [0.22958, 0.72958, 0, 0],
- 8832: [0.20576, 0.70576, 0, 0],
- 8833: [0.20576, 0.70576, 0, 0],
- 8840: [0.30274, 0.79383, 0, 0],
- 8841: [0.30274, 0.79383, 0, 0],
- 8842: [0.13597, 0.63597, 0, 0],
- 8843: [0.13597, 0.63597, 0, 0],
- 8847: [0.03517, 0.54986, 0, 0],
- 8848: [0.03517, 0.54986, 0, 0],
- 8858: [0.08198, 0.58198, 0, 0],
- 8859: [0.08198, 0.58198, 0, 0],
- 8861: [0.08198, 0.58198, 0, 0],
- 8862: [0, 0.675, 0, 0],
- 8863: [0, 0.675, 0, 0],
- 8864: [0, 0.675, 0, 0],
- 8865: [0, 0.675, 0, 0],
- 8872: [0, 0.69224, 0, 0],
- 8873: [0, 0.69224, 0, 0],
- 8874: [0, 0.69224, 0, 0],
- 8876: [0, 0.68889, 0, 0],
- 8877: [0, 0.68889, 0, 0],
- 8878: [0, 0.68889, 0, 0],
- 8879: [0, 0.68889, 0, 0],
- 8882: [0.03517, 0.54986, 0, 0],
- 8883: [0.03517, 0.54986, 0, 0],
- 8884: [0.13667, 0.63667, 0, 0],
- 8885: [0.13667, 0.63667, 0, 0],
- 8888: [0, 0.54986, 0, 0],
- 8890: [0.19444, 0.43056, 0, 0],
- 8891: [0.19444, 0.69224, 0, 0],
- 8892: [0.19444, 0.69224, 0, 0],
- 8901: [0, 0.54986, 0, 0],
- 8903: [0.08167, 0.58167, 0, 0],
- 8905: [0.08167, 0.58167, 0, 0],
- 8906: [0.08167, 0.58167, 0, 0],
- 8907: [0, 0.69224, 0, 0],
- 8908: [0, 0.69224, 0, 0],
- 8909: [-0.03598, 0.46402, 0, 0],
- 8910: [0, 0.54986, 0, 0],
- 8911: [0, 0.54986, 0, 0],
- 8912: [0.03517, 0.54986, 0, 0],
- 8913: [0.03517, 0.54986, 0, 0],
- 8914: [0, 0.54986, 0, 0],
- 8915: [0, 0.54986, 0, 0],
- 8916: [0, 0.69224, 0, 0],
- 8918: [0.0391, 0.5391, 0, 0],
- 8919: [0.0391, 0.5391, 0, 0],
- 8920: [0.03517, 0.54986, 0, 0],
- 8921: [0.03517, 0.54986, 0, 0],
- 8922: [0.38569, 0.88569, 0, 0],
- 8923: [0.38569, 0.88569, 0, 0],
- 8926: [0.13667, 0.63667, 0, 0],
- 8927: [0.13667, 0.63667, 0, 0],
- 8928: [0.30274, 0.79383, 0, 0],
- 8929: [0.30274, 0.79383, 0, 0],
- 8934: [0.23222, 0.74111, 0, 0],
- 8935: [0.23222, 0.74111, 0, 0],
- 8936: [0.23222, 0.74111, 0, 0],
- 8937: [0.23222, 0.74111, 0, 0],
- 8938: [0.20576, 0.70576, 0, 0],
- 8939: [0.20576, 0.70576, 0, 0],
- 8940: [0.30274, 0.79383, 0, 0],
- 8941: [0.30274, 0.79383, 0, 0],
- 8994: [0.19444, 0.69224, 0, 0],
- 8995: [0.19444, 0.69224, 0, 0],
- 9416: [0.15559, 0.69224, 0, 0],
- 9484: [0, 0.69224, 0, 0],
- 9488: [0, 0.69224, 0, 0],
- 9492: [0, 0.37788, 0, 0],
- 9496: [0, 0.37788, 0, 0],
- 9585: [0.19444, 0.68889, 0, 0],
- 9586: [0.19444, 0.74111, 0, 0],
- 9632: [0, 0.675, 0, 0],
- 9633: [0, 0.675, 0, 0],
- 9650: [0, 0.54986, 0, 0],
- 9651: [0, 0.54986, 0, 0],
- 9654: [0.03517, 0.54986, 0, 0],
- 9660: [0, 0.54986, 0, 0],
- 9661: [0, 0.54986, 0, 0],
- 9664: [0.03517, 0.54986, 0, 0],
- 9674: [0.11111, 0.69224, 0, 0],
- 9733: [0.19444, 0.69224, 0, 0],
- 10003: [0, 0.69224, 0, 0],
- 10016: [0, 0.69224, 0, 0],
- 10731: [0.11111, 0.69224, 0, 0],
- 10846: [0.19444, 0.75583, 0, 0],
- 10877: [0.13667, 0.63667, 0, 0],
- 10878: [0.13667, 0.63667, 0, 0],
- 10885: [0.25583, 0.75583, 0, 0],
- 10886: [0.25583, 0.75583, 0, 0],
- 10887: [0.13597, 0.63597, 0, 0],
- 10888: [0.13597, 0.63597, 0, 0],
- 10889: [0.26167, 0.75726, 0, 0],
- 10890: [0.26167, 0.75726, 0, 0],
- 10891: [0.48256, 0.98256, 0, 0],
- 10892: [0.48256, 0.98256, 0, 0],
- 10901: [0.13667, 0.63667, 0, 0],
- 10902: [0.13667, 0.63667, 0, 0],
- 10933: [0.25142, 0.75726, 0, 0],
- 10934: [0.25142, 0.75726, 0, 0],
- 10935: [0.26167, 0.75726, 0, 0],
- 10936: [0.26167, 0.75726, 0, 0],
- 10937: [0.26167, 0.75726, 0, 0],
- 10938: [0.26167, 0.75726, 0, 0],
- 10949: [0.25583, 0.75583, 0, 0],
- 10950: [0.25583, 0.75583, 0, 0],
- 10955: [0.28481, 0.79383, 0, 0],
- 10956: [0.28481, 0.79383, 0, 0],
- 57350: [0.08167, 0.58167, 0, 0],
- 57351: [0.08167, 0.58167, 0, 0],
- 57352: [0.08167, 0.58167, 0, 0],
- 57353: [0, 0.43056, 0.04028, 0],
- 57356: [0.25142, 0.75726, 0, 0],
- 57357: [0.25142, 0.75726, 0, 0],
- 57358: [0.41951, 0.91951, 0, 0],
- 57359: [0.30274, 0.79383, 0, 0],
- 57360: [0.30274, 0.79383, 0, 0],
- 57361: [0.41951, 0.91951, 0, 0],
- 57366: [0.25142, 0.75726, 0, 0],
- 57367: [0.25142, 0.75726, 0, 0],
- 57368: [0.25142, 0.75726, 0, 0],
- 57369: [0.25142, 0.75726, 0, 0],
- 57370: [0.13597, 0.63597, 0, 0],
- 57371: [0.13597, 0.63597, 0, 0],
- },
- "Caligraphic-Regular": {
- 48: [0, 0.43056, 0, 0],
- 49: [0, 0.43056, 0, 0],
- 50: [0, 0.43056, 0, 0],
- 51: [0.19444, 0.43056, 0, 0],
- 52: [0.19444, 0.43056, 0, 0],
- 53: [0.19444, 0.43056, 0, 0],
- 54: [0, 0.64444, 0, 0],
- 55: [0.19444, 0.43056, 0, 0],
- 56: [0, 0.64444, 0, 0],
- 57: [0.19444, 0.43056, 0, 0],
- 65: [0, 0.68333, 0, 0.19445],
- 66: [0, 0.68333, 0.03041, 0.13889],
- 67: [0, 0.68333, 0.05834, 0.13889],
- 68: [0, 0.68333, 0.02778, 0.08334],
- 69: [0, 0.68333, 0.08944, 0.11111],
- 70: [0, 0.68333, 0.09931, 0.11111],
- 71: [0.09722, 0.68333, 0.0593, 0.11111],
- 72: [0, 0.68333, 0.00965, 0.11111],
- 73: [0, 0.68333, 0.07382, 0],
- 74: [0.09722, 0.68333, 0.18472, 0.16667],
- 75: [0, 0.68333, 0.01445, 0.05556],
- 76: [0, 0.68333, 0, 0.13889],
- 77: [0, 0.68333, 0, 0.13889],
- 78: [0, 0.68333, 0.14736, 0.08334],
- 79: [0, 0.68333, 0.02778, 0.11111],
- 80: [0, 0.68333, 0.08222, 0.08334],
- 81: [0.09722, 0.68333, 0, 0.11111],
- 82: [0, 0.68333, 0, 0.08334],
- 83: [0, 0.68333, 0.075, 0.13889],
- 84: [0, 0.68333, 0.25417, 0],
- 85: [0, 0.68333, 0.09931, 0.08334],
- 86: [0, 0.68333, 0.08222, 0],
- 87: [0, 0.68333, 0.08222, 0.08334],
- 88: [0, 0.68333, 0.14643, 0.13889],
- 89: [0.09722, 0.68333, 0.08222, 0.08334],
- 90: [0, 0.68333, 0.07944, 0.13889],
- },
- "Fraktur-Regular": {
- 33: [0, 0.69141, 0, 0],
- 34: [0, 0.69141, 0, 0],
- 38: [0, 0.69141, 0, 0],
- 39: [0, 0.69141, 0, 0],
- 40: [0.24982, 0.74947, 0, 0],
- 41: [0.24982, 0.74947, 0, 0],
- 42: [0, 0.62119, 0, 0],
- 43: [0.08319, 0.58283, 0, 0],
- 44: [0, 0.10803, 0, 0],
- 45: [0.08319, 0.58283, 0, 0],
- 46: [0, 0.10803, 0, 0],
- 47: [0.24982, 0.74947, 0, 0],
- 48: [0, 0.47534, 0, 0],
- 49: [0, 0.47534, 0, 0],
- 50: [0, 0.47534, 0, 0],
- 51: [0.18906, 0.47534, 0, 0],
- 52: [0.18906, 0.47534, 0, 0],
- 53: [0.18906, 0.47534, 0, 0],
- 54: [0, 0.69141, 0, 0],
- 55: [0.18906, 0.47534, 0, 0],
- 56: [0, 0.69141, 0, 0],
- 57: [0.18906, 0.47534, 0, 0],
- 58: [0, 0.47534, 0, 0],
- 59: [0.12604, 0.47534, 0, 0],
- 61: [-0.13099, 0.36866, 0, 0],
- 63: [0, 0.69141, 0, 0],
- 65: [0, 0.69141, 0, 0],
- 66: [0, 0.69141, 0, 0],
- 67: [0, 0.69141, 0, 0],
- 68: [0, 0.69141, 0, 0],
- 69: [0, 0.69141, 0, 0],
- 70: [0.12604, 0.69141, 0, 0],
- 71: [0, 0.69141, 0, 0],
- 72: [0.06302, 0.69141, 0, 0],
- 73: [0, 0.69141, 0, 0],
- 74: [0.12604, 0.69141, 0, 0],
- 75: [0, 0.69141, 0, 0],
- 76: [0, 0.69141, 0, 0],
- 77: [0, 0.69141, 0, 0],
- 78: [0, 0.69141, 0, 0],
- 79: [0, 0.69141, 0, 0],
- 80: [0.18906, 0.69141, 0, 0],
- 81: [0.03781, 0.69141, 0, 0],
- 82: [0, 0.69141, 0, 0],
- 83: [0, 0.69141, 0, 0],
- 84: [0, 0.69141, 0, 0],
- 85: [0, 0.69141, 0, 0],
- 86: [0, 0.69141, 0, 0],
- 87: [0, 0.69141, 0, 0],
- 88: [0, 0.69141, 0, 0],
- 89: [0.18906, 0.69141, 0, 0],
- 90: [0.12604, 0.69141, 0, 0],
- 91: [0.24982, 0.74947, 0, 0],
- 93: [0.24982, 0.74947, 0, 0],
- 94: [0, 0.69141, 0, 0],
- 97: [0, 0.47534, 0, 0],
- 98: [0, 0.69141, 0, 0],
- 99: [0, 0.47534, 0, 0],
- 100: [0, 0.62119, 0, 0],
- 101: [0, 0.47534, 0, 0],
- 102: [0.18906, 0.69141, 0, 0],
- 103: [0.18906, 0.47534, 0, 0],
- 104: [0.18906, 0.69141, 0, 0],
- 105: [0, 0.69141, 0, 0],
- 106: [0, 0.69141, 0, 0],
- 107: [0, 0.69141, 0, 0],
- 108: [0, 0.69141, 0, 0],
- 109: [0, 0.47534, 0, 0],
- 110: [0, 0.47534, 0, 0],
- 111: [0, 0.47534, 0, 0],
- 112: [0.18906, 0.52396, 0, 0],
- 113: [0.18906, 0.47534, 0, 0],
- 114: [0, 0.47534, 0, 0],
- 115: [0, 0.47534, 0, 0],
- 116: [0, 0.62119, 0, 0],
- 117: [0, 0.47534, 0, 0],
- 118: [0, 0.52396, 0, 0],
- 119: [0, 0.52396, 0, 0],
- 120: [0.18906, 0.47534, 0, 0],
- 121: [0.18906, 0.47534, 0, 0],
- 122: [0.18906, 0.47534, 0, 0],
- 8216: [0, 0.69141, 0, 0],
- 8217: [0, 0.69141, 0, 0],
- 58112: [0, 0.62119, 0, 0],
- 58113: [0, 0.62119, 0, 0],
- 58114: [0.18906, 0.69141, 0, 0],
- 58115: [0.18906, 0.69141, 0, 0],
- 58116: [0.18906, 0.47534, 0, 0],
- 58117: [0, 0.69141, 0, 0],
- 58118: [0, 0.62119, 0, 0],
- 58119: [0, 0.47534, 0, 0],
- },
- "Main-Bold": {
- 33: [0, 0.69444, 0, 0],
- 34: [0, 0.69444, 0, 0],
- 35: [0.19444, 0.69444, 0, 0],
- 36: [0.05556, 0.75, 0, 0],
- 37: [0.05556, 0.75, 0, 0],
- 38: [0, 0.69444, 0, 0],
- 39: [0, 0.69444, 0, 0],
- 40: [0.25, 0.75, 0, 0],
- 41: [0.25, 0.75, 0, 0],
- 42: [0, 0.75, 0, 0],
- 43: [0.13333, 0.63333, 0, 0],
- 44: [0.19444, 0.15556, 0, 0],
- 45: [0, 0.44444, 0, 0],
- 46: [0, 0.15556, 0, 0],
- 47: [0.25, 0.75, 0, 0],
- 48: [0, 0.64444, 0, 0],
- 49: [0, 0.64444, 0, 0],
- 50: [0, 0.64444, 0, 0],
- 51: [0, 0.64444, 0, 0],
- 52: [0, 0.64444, 0, 0],
- 53: [0, 0.64444, 0, 0],
- 54: [0, 0.64444, 0, 0],
- 55: [0, 0.64444, 0, 0],
- 56: [0, 0.64444, 0, 0],
- 57: [0, 0.64444, 0, 0],
- 58: [0, 0.44444, 0, 0],
- 59: [0.19444, 0.44444, 0, 0],
- 60: [0.08556, 0.58556, 0, 0],
- 61: [-0.10889, 0.39111, 0, 0],
- 62: [0.08556, 0.58556, 0, 0],
- 63: [0, 0.69444, 0, 0],
- 64: [0, 0.69444, 0, 0],
- 65: [0, 0.68611, 0, 0],
- 66: [0, 0.68611, 0, 0],
- 67: [0, 0.68611, 0, 0],
- 68: [0, 0.68611, 0, 0],
- 69: [0, 0.68611, 0, 0],
- 70: [0, 0.68611, 0, 0],
- 71: [0, 0.68611, 0, 0],
- 72: [0, 0.68611, 0, 0],
- 73: [0, 0.68611, 0, 0],
- 74: [0, 0.68611, 0, 0],
- 75: [0, 0.68611, 0, 0],
- 76: [0, 0.68611, 0, 0],
- 77: [0, 0.68611, 0, 0],
- 78: [0, 0.68611, 0, 0],
- 79: [0, 0.68611, 0, 0],
- 80: [0, 0.68611, 0, 0],
- 81: [0.19444, 0.68611, 0, 0],
- 82: [0, 0.68611, 0, 0],
- 83: [0, 0.68611, 0, 0],
- 84: [0, 0.68611, 0, 0],
- 85: [0, 0.68611, 0, 0],
- 86: [0, 0.68611, 0.01597, 0],
- 87: [0, 0.68611, 0.01597, 0],
- 88: [0, 0.68611, 0, 0],
- 89: [0, 0.68611, 0.02875, 0],
- 90: [0, 0.68611, 0, 0],
- 91: [0.25, 0.75, 0, 0],
- 92: [0.25, 0.75, 0, 0],
- 93: [0.25, 0.75, 0, 0],
- 94: [0, 0.69444, 0, 0],
- 95: [0.31, 0.13444, 0.03194, 0],
- 96: [0, 0.69444, 0, 0],
- 97: [0, 0.44444, 0, 0],
- 98: [0, 0.69444, 0, 0],
- 99: [0, 0.44444, 0, 0],
- 100: [0, 0.69444, 0, 0],
- 101: [0, 0.44444, 0, 0],
- 102: [0, 0.69444, 0.10903, 0],
- 103: [0.19444, 0.44444, 0.01597, 0],
- 104: [0, 0.69444, 0, 0],
- 105: [0, 0.69444, 0, 0],
- 106: [0.19444, 0.69444, 0, 0],
- 107: [0, 0.69444, 0, 0],
- 108: [0, 0.69444, 0, 0],
- 109: [0, 0.44444, 0, 0],
- 110: [0, 0.44444, 0, 0],
- 111: [0, 0.44444, 0, 0],
- 112: [0.19444, 0.44444, 0, 0],
- 113: [0.19444, 0.44444, 0, 0],
- 114: [0, 0.44444, 0, 0],
- 115: [0, 0.44444, 0, 0],
- 116: [0, 0.63492, 0, 0],
- 117: [0, 0.44444, 0, 0],
- 118: [0, 0.44444, 0.01597, 0],
- 119: [0, 0.44444, 0.01597, 0],
- 120: [0, 0.44444, 0, 0],
- 121: [0.19444, 0.44444, 0.01597, 0],
- 122: [0, 0.44444, 0, 0],
- 123: [0.25, 0.75, 0, 0],
- 124: [0.25, 0.75, 0, 0],
- 125: [0.25, 0.75, 0, 0],
- 126: [0.35, 0.34444, 0, 0],
- 168: [0, 0.69444, 0, 0],
- 172: [0, 0.44444, 0, 0],
- 175: [0, 0.59611, 0, 0],
- 176: [0, 0.69444, 0, 0],
- 177: [0.13333, 0.63333, 0, 0],
- 180: [0, 0.69444, 0, 0],
- 215: [0.13333, 0.63333, 0, 0],
- 247: [0.13333, 0.63333, 0, 0],
- 305: [0, 0.44444, 0, 0],
- 567: [0.19444, 0.44444, 0, 0],
- 710: [0, 0.69444, 0, 0],
- 711: [0, 0.63194, 0, 0],
- 713: [0, 0.59611, 0, 0],
- 714: [0, 0.69444, 0, 0],
- 715: [0, 0.69444, 0, 0],
- 728: [0, 0.69444, 0, 0],
- 729: [0, 0.69444, 0, 0],
- 730: [0, 0.69444, 0, 0],
- 732: [0, 0.69444, 0, 0],
- 768: [0, 0.69444, 0, 0],
- 769: [0, 0.69444, 0, 0],
- 770: [0, 0.69444, 0, 0],
- 771: [0, 0.69444, 0, 0],
- 772: [0, 0.59611, 0, 0],
- 774: [0, 0.69444, 0, 0],
- 775: [0, 0.69444, 0, 0],
- 776: [0, 0.69444, 0, 0],
- 778: [0, 0.69444, 0, 0],
- 779: [0, 0.69444, 0, 0],
- 780: [0, 0.63194, 0, 0],
- 824: [0.19444, 0.69444, 0, 0],
- 915: [0, 0.68611, 0, 0],
- 916: [0, 0.68611, 0, 0],
- 920: [0, 0.68611, 0, 0],
- 923: [0, 0.68611, 0, 0],
- 926: [0, 0.68611, 0, 0],
- 928: [0, 0.68611, 0, 0],
- 931: [0, 0.68611, 0, 0],
- 933: [0, 0.68611, 0, 0],
- 934: [0, 0.68611, 0, 0],
- 936: [0, 0.68611, 0, 0],
- 937: [0, 0.68611, 0, 0],
- 8211: [0, 0.44444, 0.03194, 0],
- 8212: [0, 0.44444, 0.03194, 0],
- 8216: [0, 0.69444, 0, 0],
- 8217: [0, 0.69444, 0, 0],
- 8220: [0, 0.69444, 0, 0],
- 8221: [0, 0.69444, 0, 0],
- 8224: [0.19444, 0.69444, 0, 0],
- 8225: [0.19444, 0.69444, 0, 0],
- 8242: [0, 0.55556, 0, 0],
- 8407: [0, 0.72444, 0.15486, 0],
- 8463: [0, 0.69444, 0, 0],
- 8465: [0, 0.69444, 0, 0],
- 8467: [0, 0.69444, 0, 0],
- 8472: [0.19444, 0.44444, 0, 0],
- 8476: [0, 0.69444, 0, 0],
- 8501: [0, 0.69444, 0, 0],
- 8592: [-0.10889, 0.39111, 0, 0],
- 8593: [0.19444, 0.69444, 0, 0],
- 8594: [-0.10889, 0.39111, 0, 0],
- 8595: [0.19444, 0.69444, 0, 0],
- 8596: [-0.10889, 0.39111, 0, 0],
- 8597: [0.25, 0.75, 0, 0],
- 8598: [0.19444, 0.69444, 0, 0],
- 8599: [0.19444, 0.69444, 0, 0],
- 8600: [0.19444, 0.69444, 0, 0],
- 8601: [0.19444, 0.69444, 0, 0],
- 8636: [-0.10889, 0.39111, 0, 0],
- 8637: [-0.10889, 0.39111, 0, 0],
- 8640: [-0.10889, 0.39111, 0, 0],
- 8641: [-0.10889, 0.39111, 0, 0],
- 8656: [-0.10889, 0.39111, 0, 0],
- 8657: [0.19444, 0.69444, 0, 0],
- 8658: [-0.10889, 0.39111, 0, 0],
- 8659: [0.19444, 0.69444, 0, 0],
- 8660: [-0.10889, 0.39111, 0, 0],
- 8661: [0.25, 0.75, 0, 0],
- 8704: [0, 0.69444, 0, 0],
- 8706: [0, 0.69444, 0.06389, 0],
- 8707: [0, 0.69444, 0, 0],
- 8709: [0.05556, 0.75, 0, 0],
- 8711: [0, 0.68611, 0, 0],
- 8712: [0.08556, 0.58556, 0, 0],
- 8715: [0.08556, 0.58556, 0, 0],
- 8722: [0.13333, 0.63333, 0, 0],
- 8723: [0.13333, 0.63333, 0, 0],
- 8725: [0.25, 0.75, 0, 0],
- 8726: [0.25, 0.75, 0, 0],
- 8727: [-0.02778, 0.47222, 0, 0],
- 8728: [-0.02639, 0.47361, 0, 0],
- 8729: [-0.02639, 0.47361, 0, 0],
- 8730: [0.18, 0.82, 0, 0],
- 8733: [0, 0.44444, 0, 0],
- 8734: [0, 0.44444, 0, 0],
- 8736: [0, 0.69224, 0, 0],
- 8739: [0.25, 0.75, 0, 0],
- 8741: [0.25, 0.75, 0, 0],
- 8743: [0, 0.55556, 0, 0],
- 8744: [0, 0.55556, 0, 0],
- 8745: [0, 0.55556, 0, 0],
- 8746: [0, 0.55556, 0, 0],
- 8747: [0.19444, 0.69444, 0.12778, 0],
- 8764: [-0.10889, 0.39111, 0, 0],
- 8768: [0.19444, 0.69444, 0, 0],
- 8771: [0.00222, 0.50222, 0, 0],
- 8776: [0.02444, 0.52444, 0, 0],
- 8781: [0.00222, 0.50222, 0, 0],
- 8801: [0.00222, 0.50222, 0, 0],
- 8804: [0.19667, 0.69667, 0, 0],
- 8805: [0.19667, 0.69667, 0, 0],
- 8810: [0.08556, 0.58556, 0, 0],
- 8811: [0.08556, 0.58556, 0, 0],
- 8826: [0.08556, 0.58556, 0, 0],
- 8827: [0.08556, 0.58556, 0, 0],
- 8834: [0.08556, 0.58556, 0, 0],
- 8835: [0.08556, 0.58556, 0, 0],
- 8838: [0.19667, 0.69667, 0, 0],
- 8839: [0.19667, 0.69667, 0, 0],
- 8846: [0, 0.55556, 0, 0],
- 8849: [0.19667, 0.69667, 0, 0],
- 8850: [0.19667, 0.69667, 0, 0],
- 8851: [0, 0.55556, 0, 0],
- 8852: [0, 0.55556, 0, 0],
- 8853: [0.13333, 0.63333, 0, 0],
- 8854: [0.13333, 0.63333, 0, 0],
- 8855: [0.13333, 0.63333, 0, 0],
- 8856: [0.13333, 0.63333, 0, 0],
- 8857: [0.13333, 0.63333, 0, 0],
- 8866: [0, 0.69444, 0, 0],
- 8867: [0, 0.69444, 0, 0],
- 8868: [0, 0.69444, 0, 0],
- 8869: [0, 0.69444, 0, 0],
- 8900: [-0.02639, 0.47361, 0, 0],
- 8901: [-0.02639, 0.47361, 0, 0],
- 8902: [-0.02778, 0.47222, 0, 0],
- 8968: [0.25, 0.75, 0, 0],
- 8969: [0.25, 0.75, 0, 0],
- 8970: [0.25, 0.75, 0, 0],
- 8971: [0.25, 0.75, 0, 0],
- 8994: [-0.13889, 0.36111, 0, 0],
- 8995: [-0.13889, 0.36111, 0, 0],
- 9651: [0.19444, 0.69444, 0, 0],
- 9657: [-0.02778, 0.47222, 0, 0],
- 9661: [0.19444, 0.69444, 0, 0],
- 9667: [-0.02778, 0.47222, 0, 0],
- 9711: [0.19444, 0.69444, 0, 0],
- 9824: [0.12963, 0.69444, 0, 0],
- 9825: [0.12963, 0.69444, 0, 0],
- 9826: [0.12963, 0.69444, 0, 0],
- 9827: [0.12963, 0.69444, 0, 0],
- 9837: [0, 0.75, 0, 0],
- 9838: [0.19444, 0.69444, 0, 0],
- 9839: [0.19444, 0.69444, 0, 0],
- 10216: [0.25, 0.75, 0, 0],
- 10217: [0.25, 0.75, 0, 0],
- 10815: [0, 0.68611, 0, 0],
- 10927: [0.19667, 0.69667, 0, 0],
- 10928: [0.19667, 0.69667, 0, 0],
- },
- "Main-Italic": {
- 33: [0, 0.69444, 0.12417, 0],
- 34: [0, 0.69444, 0.06961, 0],
- 35: [0.19444, 0.69444, 0.06616, 0],
- 37: [0.05556, 0.75, 0.13639, 0],
- 38: [0, 0.69444, 0.09694, 0],
- 39: [0, 0.69444, 0.12417, 0],
- 40: [0.25, 0.75, 0.16194, 0],
- 41: [0.25, 0.75, 0.03694, 0],
- 42: [0, 0.75, 0.14917, 0],
- 43: [0.05667, 0.56167, 0.03694, 0],
- 44: [0.19444, 0.10556, 0, 0],
- 45: [0, 0.43056, 0.02826, 0],
- 46: [0, 0.10556, 0, 0],
- 47: [0.25, 0.75, 0.16194, 0],
- 48: [0, 0.64444, 0.13556, 0],
- 49: [0, 0.64444, 0.13556, 0],
- 50: [0, 0.64444, 0.13556, 0],
- 51: [0, 0.64444, 0.13556, 0],
- 52: [0.19444, 0.64444, 0.13556, 0],
- 53: [0, 0.64444, 0.13556, 0],
- 54: [0, 0.64444, 0.13556, 0],
- 55: [0.19444, 0.64444, 0.13556, 0],
- 56: [0, 0.64444, 0.13556, 0],
- 57: [0, 0.64444, 0.13556, 0],
- 58: [0, 0.43056, 0.0582, 0],
- 59: [0.19444, 0.43056, 0.0582, 0],
- 61: [-0.13313, 0.36687, 0.06616, 0],
- 63: [0, 0.69444, 0.1225, 0],
- 64: [0, 0.69444, 0.09597, 0],
- 65: [0, 0.68333, 0, 0],
- 66: [0, 0.68333, 0.10257, 0],
- 67: [0, 0.68333, 0.14528, 0],
- 68: [0, 0.68333, 0.09403, 0],
- 69: [0, 0.68333, 0.12028, 0],
- 70: [0, 0.68333, 0.13305, 0],
- 71: [0, 0.68333, 0.08722, 0],
- 72: [0, 0.68333, 0.16389, 0],
- 73: [0, 0.68333, 0.15806, 0],
- 74: [0, 0.68333, 0.14028, 0],
- 75: [0, 0.68333, 0.14528, 0],
- 76: [0, 0.68333, 0, 0],
- 77: [0, 0.68333, 0.16389, 0],
- 78: [0, 0.68333, 0.16389, 0],
- 79: [0, 0.68333, 0.09403, 0],
- 80: [0, 0.68333, 0.10257, 0],
- 81: [0.19444, 0.68333, 0.09403, 0],
- 82: [0, 0.68333, 0.03868, 0],
- 83: [0, 0.68333, 0.11972, 0],
- 84: [0, 0.68333, 0.13305, 0],
- 85: [0, 0.68333, 0.16389, 0],
- 86: [0, 0.68333, 0.18361, 0],
- 87: [0, 0.68333, 0.18361, 0],
- 88: [0, 0.68333, 0.15806, 0],
- 89: [0, 0.68333, 0.19383, 0],
- 90: [0, 0.68333, 0.14528, 0],
- 91: [0.25, 0.75, 0.1875, 0],
- 93: [0.25, 0.75, 0.10528, 0],
- 94: [0, 0.69444, 0.06646, 0],
- 95: [0.31, 0.12056, 0.09208, 0],
- 97: [0, 0.43056, 0.07671, 0],
- 98: [0, 0.69444, 0.06312, 0],
- 99: [0, 0.43056, 0.05653, 0],
- 100: [0, 0.69444, 0.10333, 0],
- 101: [0, 0.43056, 0.07514, 0],
- 102: [0.19444, 0.69444, 0.21194, 0],
- 103: [0.19444, 0.43056, 0.08847, 0],
- 104: [0, 0.69444, 0.07671, 0],
- 105: [0, 0.65536, 0.1019, 0],
- 106: [0.19444, 0.65536, 0.14467, 0],
- 107: [0, 0.69444, 0.10764, 0],
- 108: [0, 0.69444, 0.10333, 0],
- 109: [0, 0.43056, 0.07671, 0],
- 110: [0, 0.43056, 0.07671, 0],
- 111: [0, 0.43056, 0.06312, 0],
- 112: [0.19444, 0.43056, 0.06312, 0],
- 113: [0.19444, 0.43056, 0.08847, 0],
- 114: [0, 0.43056, 0.10764, 0],
- 115: [0, 0.43056, 0.08208, 0],
- 116: [0, 0.61508, 0.09486, 0],
- 117: [0, 0.43056, 0.07671, 0],
- 118: [0, 0.43056, 0.10764, 0],
- 119: [0, 0.43056, 0.10764, 0],
- 120: [0, 0.43056, 0.12042, 0],
- 121: [0.19444, 0.43056, 0.08847, 0],
- 122: [0, 0.43056, 0.12292, 0],
- 126: [0.35, 0.31786, 0.11585, 0],
- 163: [0, 0.69444, 0, 0],
- 305: [0, 0.43056, 0, 0.02778],
- 567: [0.19444, 0.43056, 0, 0.08334],
- 768: [0, 0.69444, 0, 0],
- 769: [0, 0.69444, 0.09694, 0],
- 770: [0, 0.69444, 0.06646, 0],
- 771: [0, 0.66786, 0.11585, 0],
- 772: [0, 0.56167, 0.10333, 0],
- 774: [0, 0.69444, 0.10806, 0],
- 775: [0, 0.66786, 0.11752, 0],
- 776: [0, 0.66786, 0.10474, 0],
- 778: [0, 0.69444, 0, 0],
- 779: [0, 0.69444, 0.1225, 0],
- 780: [0, 0.62847, 0.08295, 0],
- 915: [0, 0.68333, 0.13305, 0],
- 916: [0, 0.68333, 0, 0],
- 920: [0, 0.68333, 0.09403, 0],
- 923: [0, 0.68333, 0, 0],
- 926: [0, 0.68333, 0.15294, 0],
- 928: [0, 0.68333, 0.16389, 0],
- 931: [0, 0.68333, 0.12028, 0],
- 933: [0, 0.68333, 0.11111, 0],
- 934: [0, 0.68333, 0.05986, 0],
- 936: [0, 0.68333, 0.11111, 0],
- 937: [0, 0.68333, 0.10257, 0],
- 8211: [0, 0.43056, 0.09208, 0],
- 8212: [0, 0.43056, 0.09208, 0],
- 8216: [0, 0.69444, 0.12417, 0],
- 8217: [0, 0.69444, 0.12417, 0],
- 8220: [0, 0.69444, 0.1685, 0],
- 8221: [0, 0.69444, 0.06961, 0],
- 8463: [0, 0.68889, 0, 0],
- },
- "Main-Regular": {
- 32: [0, 0, 0, 0],
- 33: [0, 0.69444, 0, 0],
- 34: [0, 0.69444, 0, 0],
- 35: [0.19444, 0.69444, 0, 0],
- 36: [0.05556, 0.75, 0, 0],
- 37: [0.05556, 0.75, 0, 0],
- 38: [0, 0.69444, 0, 0],
- 39: [0, 0.69444, 0, 0],
- 40: [0.25, 0.75, 0, 0],
- 41: [0.25, 0.75, 0, 0],
- 42: [0, 0.75, 0, 0],
- 43: [0.08333, 0.58333, 0, 0],
- 44: [0.19444, 0.10556, 0, 0],
- 45: [0, 0.43056, 0, 0],
- 46: [0, 0.10556, 0, 0],
- 47: [0.25, 0.75, 0, 0],
- 48: [0, 0.64444, 0, 0],
- 49: [0, 0.64444, 0, 0],
- 50: [0, 0.64444, 0, 0],
- 51: [0, 0.64444, 0, 0],
- 52: [0, 0.64444, 0, 0],
- 53: [0, 0.64444, 0, 0],
- 54: [0, 0.64444, 0, 0],
- 55: [0, 0.64444, 0, 0],
- 56: [0, 0.64444, 0, 0],
- 57: [0, 0.64444, 0, 0],
- 58: [0, 0.43056, 0, 0],
- 59: [0.19444, 0.43056, 0, 0],
- 60: [0.0391, 0.5391, 0, 0],
- 61: [-0.13313, 0.36687, 0, 0],
- 62: [0.0391, 0.5391, 0, 0],
- 63: [0, 0.69444, 0, 0],
- 64: [0, 0.69444, 0, 0],
- 65: [0, 0.68333, 0, 0],
- 66: [0, 0.68333, 0, 0],
- 67: [0, 0.68333, 0, 0],
- 68: [0, 0.68333, 0, 0],
- 69: [0, 0.68333, 0, 0],
- 70: [0, 0.68333, 0, 0],
- 71: [0, 0.68333, 0, 0],
- 72: [0, 0.68333, 0, 0],
- 73: [0, 0.68333, 0, 0],
- 74: [0, 0.68333, 0, 0],
- 75: [0, 0.68333, 0, 0],
- 76: [0, 0.68333, 0, 0],
- 77: [0, 0.68333, 0, 0],
- 78: [0, 0.68333, 0, 0],
- 79: [0, 0.68333, 0, 0],
- 80: [0, 0.68333, 0, 0],
- 81: [0.19444, 0.68333, 0, 0],
- 82: [0, 0.68333, 0, 0],
- 83: [0, 0.68333, 0, 0],
- 84: [0, 0.68333, 0, 0],
- 85: [0, 0.68333, 0, 0],
- 86: [0, 0.68333, 0.01389, 0],
- 87: [0, 0.68333, 0.01389, 0],
- 88: [0, 0.68333, 0, 0],
- 89: [0, 0.68333, 0.025, 0],
- 90: [0, 0.68333, 0, 0],
- 91: [0.25, 0.75, 0, 0],
- 92: [0.25, 0.75, 0, 0],
- 93: [0.25, 0.75, 0, 0],
- 94: [0, 0.69444, 0, 0],
- 95: [0.31, 0.12056, 0.02778, 0],
- 96: [0, 0.69444, 0, 0],
- 97: [0, 0.43056, 0, 0],
- 98: [0, 0.69444, 0, 0],
- 99: [0, 0.43056, 0, 0],
- 100: [0, 0.69444, 0, 0],
- 101: [0, 0.43056, 0, 0],
- 102: [0, 0.69444, 0.07778, 0],
- 103: [0.19444, 0.43056, 0.01389, 0],
- 104: [0, 0.69444, 0, 0],
- 105: [0, 0.66786, 0, 0],
- 106: [0.19444, 0.66786, 0, 0],
- 107: [0, 0.69444, 0, 0],
- 108: [0, 0.69444, 0, 0],
- 109: [0, 0.43056, 0, 0],
- 110: [0, 0.43056, 0, 0],
- 111: [0, 0.43056, 0, 0],
- 112: [0.19444, 0.43056, 0, 0],
- 113: [0.19444, 0.43056, 0, 0],
- 114: [0, 0.43056, 0, 0],
- 115: [0, 0.43056, 0, 0],
- 116: [0, 0.61508, 0, 0],
- 117: [0, 0.43056, 0, 0],
- 118: [0, 0.43056, 0.01389, 0],
- 119: [0, 0.43056, 0.01389, 0],
- 120: [0, 0.43056, 0, 0],
- 121: [0.19444, 0.43056, 0.01389, 0],
- 122: [0, 0.43056, 0, 0],
- 123: [0.25, 0.75, 0, 0],
- 124: [0.25, 0.75, 0, 0],
- 125: [0.25, 0.75, 0, 0],
- 126: [0.35, 0.31786, 0, 0],
- 160: [0, 0, 0, 0],
- 168: [0, 0.66786, 0, 0],
- 172: [0, 0.43056, 0, 0],
- 175: [0, 0.56778, 0, 0],
- 176: [0, 0.69444, 0, 0],
- 177: [0.08333, 0.58333, 0, 0],
- 180: [0, 0.69444, 0, 0],
- 215: [0.08333, 0.58333, 0, 0],
- 247: [0.08333, 0.58333, 0, 0],
- 305: [0, 0.43056, 0, 0],
- 567: [0.19444, 0.43056, 0, 0],
- 710: [0, 0.69444, 0, 0],
- 711: [0, 0.62847, 0, 0],
- 713: [0, 0.56778, 0, 0],
- 714: [0, 0.69444, 0, 0],
- 715: [0, 0.69444, 0, 0],
- 728: [0, 0.69444, 0, 0],
- 729: [0, 0.66786, 0, 0],
- 730: [0, 0.69444, 0, 0],
- 732: [0, 0.66786, 0, 0],
- 768: [0, 0.69444, 0, 0],
- 769: [0, 0.69444, 0, 0],
- 770: [0, 0.69444, 0, 0],
- 771: [0, 0.66786, 0, 0],
- 772: [0, 0.56778, 0, 0],
- 774: [0, 0.69444, 0, 0],
- 775: [0, 0.66786, 0, 0],
- 776: [0, 0.66786, 0, 0],
- 778: [0, 0.69444, 0, 0],
- 779: [0, 0.69444, 0, 0],
- 780: [0, 0.62847, 0, 0],
- 824: [0.19444, 0.69444, 0, 0],
- 915: [0, 0.68333, 0, 0],
- 916: [0, 0.68333, 0, 0],
- 920: [0, 0.68333, 0, 0],
- 923: [0, 0.68333, 0, 0],
- 926: [0, 0.68333, 0, 0],
- 928: [0, 0.68333, 0, 0],
- 931: [0, 0.68333, 0, 0],
- 933: [0, 0.68333, 0, 0],
- 934: [0, 0.68333, 0, 0],
- 936: [0, 0.68333, 0, 0],
- 937: [0, 0.68333, 0, 0],
- 8211: [0, 0.43056, 0.02778, 0],
- 8212: [0, 0.43056, 0.02778, 0],
- 8216: [0, 0.69444, 0, 0],
- 8217: [0, 0.69444, 0, 0],
- 8220: [0, 0.69444, 0, 0],
- 8221: [0, 0.69444, 0, 0],
- 8224: [0.19444, 0.69444, 0, 0],
- 8225: [0.19444, 0.69444, 0, 0],
- 8230: [0, 0.12, 0, 0],
- 8242: [0, 0.55556, 0, 0],
- 8407: [0, 0.71444, 0.15382, 0],
- 8463: [0, 0.68889, 0, 0],
- 8465: [0, 0.69444, 0, 0],
- 8467: [0, 0.69444, 0, 0.11111],
- 8472: [0.19444, 0.43056, 0, 0.11111],
- 8476: [0, 0.69444, 0, 0],
- 8501: [0, 0.69444, 0, 0],
- 8592: [-0.13313, 0.36687, 0, 0],
- 8593: [0.19444, 0.69444, 0, 0],
- 8594: [-0.13313, 0.36687, 0, 0],
- 8595: [0.19444, 0.69444, 0, 0],
- 8596: [-0.13313, 0.36687, 0, 0],
- 8597: [0.25, 0.75, 0, 0],
- 8598: [0.19444, 0.69444, 0, 0],
- 8599: [0.19444, 0.69444, 0, 0],
- 8600: [0.19444, 0.69444, 0, 0],
- 8601: [0.19444, 0.69444, 0, 0],
- 8614: [0.011, 0.511, 0, 0],
- 8617: [0.011, 0.511, 0, 0],
- 8618: [0.011, 0.511, 0, 0],
- 8636: [-0.13313, 0.36687, 0, 0],
- 8637: [-0.13313, 0.36687, 0, 0],
- 8640: [-0.13313, 0.36687, 0, 0],
- 8641: [-0.13313, 0.36687, 0, 0],
- 8652: [0.011, 0.671, 0, 0],
- 8656: [-0.13313, 0.36687, 0, 0],
- 8657: [0.19444, 0.69444, 0, 0],
- 8658: [-0.13313, 0.36687, 0, 0],
- 8659: [0.19444, 0.69444, 0, 0],
- 8660: [-0.13313, 0.36687, 0, 0],
- 8661: [0.25, 0.75, 0, 0],
- 8704: [0, 0.69444, 0, 0],
- 8706: [0, 0.69444, 0.05556, 0.08334],
- 8707: [0, 0.69444, 0, 0],
- 8709: [0.05556, 0.75, 0, 0],
- 8711: [0, 0.68333, 0, 0],
- 8712: [0.0391, 0.5391, 0, 0],
- 8715: [0.0391, 0.5391, 0, 0],
- 8722: [0.08333, 0.58333, 0, 0],
- 8723: [0.08333, 0.58333, 0, 0],
- 8725: [0.25, 0.75, 0, 0],
- 8726: [0.25, 0.75, 0, 0],
- 8727: [-0.03472, 0.46528, 0, 0],
- 8728: [-0.05555, 0.44445, 0, 0],
- 8729: [-0.05555, 0.44445, 0, 0],
- 8730: [0.2, 0.8, 0, 0],
- 8733: [0, 0.43056, 0, 0],
- 8734: [0, 0.43056, 0, 0],
- 8736: [0, 0.69224, 0, 0],
- 8739: [0.25, 0.75, 0, 0],
- 8741: [0.25, 0.75, 0, 0],
- 8743: [0, 0.55556, 0, 0],
- 8744: [0, 0.55556, 0, 0],
- 8745: [0, 0.55556, 0, 0],
- 8746: [0, 0.55556, 0, 0],
- 8747: [0.19444, 0.69444, 0.11111, 0],
- 8764: [-0.13313, 0.36687, 0, 0],
- 8768: [0.19444, 0.69444, 0, 0],
- 8771: [-0.03625, 0.46375, 0, 0],
- 8773: [-0.022, 0.589, 0, 0],
- 8776: [-0.01688, 0.48312, 0, 0],
- 8781: [-0.03625, 0.46375, 0, 0],
- 8784: [-0.133, 0.67, 0, 0],
- 8800: [0.215, 0.716, 0, 0],
- 8801: [-0.03625, 0.46375, 0, 0],
- 8804: [0.13597, 0.63597, 0, 0],
- 8805: [0.13597, 0.63597, 0, 0],
- 8810: [0.0391, 0.5391, 0, 0],
- 8811: [0.0391, 0.5391, 0, 0],
- 8826: [0.0391, 0.5391, 0, 0],
- 8827: [0.0391, 0.5391, 0, 0],
- 8834: [0.0391, 0.5391, 0, 0],
- 8835: [0.0391, 0.5391, 0, 0],
- 8838: [0.13597, 0.63597, 0, 0],
- 8839: [0.13597, 0.63597, 0, 0],
- 8846: [0, 0.55556, 0, 0],
- 8849: [0.13597, 0.63597, 0, 0],
- 8850: [0.13597, 0.63597, 0, 0],
- 8851: [0, 0.55556, 0, 0],
- 8852: [0, 0.55556, 0, 0],
- 8853: [0.08333, 0.58333, 0, 0],
- 8854: [0.08333, 0.58333, 0, 0],
- 8855: [0.08333, 0.58333, 0, 0],
- 8856: [0.08333, 0.58333, 0, 0],
- 8857: [0.08333, 0.58333, 0, 0],
- 8866: [0, 0.69444, 0, 0],
- 8867: [0, 0.69444, 0, 0],
- 8868: [0, 0.69444, 0, 0],
- 8869: [0, 0.69444, 0, 0],
- 8872: [0.249, 0.75, 0, 0],
- 8900: [-0.05555, 0.44445, 0, 0],
- 8901: [-0.05555, 0.44445, 0, 0],
- 8902: [-0.03472, 0.46528, 0, 0],
- 8904: [0.005, 0.505, 0, 0],
- 8942: [0.03, 0.9, 0, 0],
- 8943: [-0.19, 0.31, 0, 0],
- 8945: [-0.1, 0.82, 0, 0],
- 8968: [0.25, 0.75, 0, 0],
- 8969: [0.25, 0.75, 0, 0],
- 8970: [0.25, 0.75, 0, 0],
- 8971: [0.25, 0.75, 0, 0],
- 8994: [-0.14236, 0.35764, 0, 0],
- 8995: [-0.14236, 0.35764, 0, 0],
- 9136: [0.244, 0.744, 0, 0],
- 9137: [0.244, 0.744, 0, 0],
- 9651: [0.19444, 0.69444, 0, 0],
- 9657: [-0.03472, 0.46528, 0, 0],
- 9661: [0.19444, 0.69444, 0, 0],
- 9667: [-0.03472, 0.46528, 0, 0],
- 9711: [0.19444, 0.69444, 0, 0],
- 9824: [0.12963, 0.69444, 0, 0],
- 9825: [0.12963, 0.69444, 0, 0],
- 9826: [0.12963, 0.69444, 0, 0],
- 9827: [0.12963, 0.69444, 0, 0],
- 9837: [0, 0.75, 0, 0],
- 9838: [0.19444, 0.69444, 0, 0],
- 9839: [0.19444, 0.69444, 0, 0],
- 10216: [0.25, 0.75, 0, 0],
- 10217: [0.25, 0.75, 0, 0],
- 10222: [0.244, 0.744, 0, 0],
- 10223: [0.244, 0.744, 0, 0],
- 10229: [0.011, 0.511, 0, 0],
- 10230: [0.011, 0.511, 0, 0],
- 10231: [0.011, 0.511, 0, 0],
- 10232: [0.024, 0.525, 0, 0],
- 10233: [0.024, 0.525, 0, 0],
- 10234: [0.024, 0.525, 0, 0],
- 10236: [0.011, 0.511, 0, 0],
- 10815: [0, 0.68333, 0, 0],
- 10927: [0.13597, 0.63597, 0, 0],
- 10928: [0.13597, 0.63597, 0, 0],
- },
- "Math-BoldItalic": {
- 47: [0.19444, 0.69444, 0, 0],
- 65: [0, 0.68611, 0, 0],
- 66: [0, 0.68611, 0.04835, 0],
- 67: [0, 0.68611, 0.06979, 0],
- 68: [0, 0.68611, 0.03194, 0],
- 69: [0, 0.68611, 0.05451, 0],
- 70: [0, 0.68611, 0.15972, 0],
- 71: [0, 0.68611, 0, 0],
- 72: [0, 0.68611, 0.08229, 0],
- 73: [0, 0.68611, 0.07778, 0],
- 74: [0, 0.68611, 0.10069, 0],
- 75: [0, 0.68611, 0.06979, 0],
- 76: [0, 0.68611, 0, 0],
- 77: [0, 0.68611, 0.11424, 0],
- 78: [0, 0.68611, 0.11424, 0],
- 79: [0, 0.68611, 0.03194, 0],
- 80: [0, 0.68611, 0.15972, 0],
- 81: [0.19444, 0.68611, 0, 0],
- 82: [0, 0.68611, 0.00421, 0],
- 83: [0, 0.68611, 0.05382, 0],
- 84: [0, 0.68611, 0.15972, 0],
- 85: [0, 0.68611, 0.11424, 0],
- 86: [0, 0.68611, 0.25555, 0],
- 87: [0, 0.68611, 0.15972, 0],
- 88: [0, 0.68611, 0.07778, 0],
- 89: [0, 0.68611, 0.25555, 0],
- 90: [0, 0.68611, 0.06979, 0],
- 97: [0, 0.44444, 0, 0],
- 98: [0, 0.69444, 0, 0],
- 99: [0, 0.44444, 0, 0],
- 100: [0, 0.69444, 0, 0],
- 101: [0, 0.44444, 0, 0],
- 102: [0.19444, 0.69444, 0.11042, 0],
- 103: [0.19444, 0.44444, 0.03704, 0],
- 104: [0, 0.69444, 0, 0],
- 105: [0, 0.69326, 0, 0],
- 106: [0.19444, 0.69326, 0.0622, 0],
- 107: [0, 0.69444, 0.01852, 0],
- 108: [0, 0.69444, 0.0088, 0],
- 109: [0, 0.44444, 0, 0],
- 110: [0, 0.44444, 0, 0],
- 111: [0, 0.44444, 0, 0],
- 112: [0.19444, 0.44444, 0, 0],
- 113: [0.19444, 0.44444, 0.03704, 0],
- 114: [0, 0.44444, 0.03194, 0],
- 115: [0, 0.44444, 0, 0],
- 116: [0, 0.63492, 0, 0],
- 117: [0, 0.44444, 0, 0],
- 118: [0, 0.44444, 0.03704, 0],
- 119: [0, 0.44444, 0.02778, 0],
- 120: [0, 0.44444, 0, 0],
- 121: [0.19444, 0.44444, 0.03704, 0],
- 122: [0, 0.44444, 0.04213, 0],
- 915: [0, 0.68611, 0.15972, 0],
- 916: [0, 0.68611, 0, 0],
- 920: [0, 0.68611, 0.03194, 0],
- 923: [0, 0.68611, 0, 0],
- 926: [0, 0.68611, 0.07458, 0],
- 928: [0, 0.68611, 0.08229, 0],
- 931: [0, 0.68611, 0.05451, 0],
- 933: [0, 0.68611, 0.15972, 0],
- 934: [0, 0.68611, 0, 0],
- 936: [0, 0.68611, 0.11653, 0],
- 937: [0, 0.68611, 0.04835, 0],
- 945: [0, 0.44444, 0, 0],
- 946: [0.19444, 0.69444, 0.03403, 0],
- 947: [0.19444, 0.44444, 0.06389, 0],
- 948: [0, 0.69444, 0.03819, 0],
- 949: [0, 0.44444, 0, 0],
- 950: [0.19444, 0.69444, 0.06215, 0],
- 951: [0.19444, 0.44444, 0.03704, 0],
- 952: [0, 0.69444, 0.03194, 0],
- 953: [0, 0.44444, 0, 0],
- 954: [0, 0.44444, 0, 0],
- 955: [0, 0.69444, 0, 0],
- 956: [0.19444, 0.44444, 0, 0],
- 957: [0, 0.44444, 0.06898, 0],
- 958: [0.19444, 0.69444, 0.03021, 0],
- 959: [0, 0.44444, 0, 0],
- 960: [0, 0.44444, 0.03704, 0],
- 961: [0.19444, 0.44444, 0, 0],
- 962: [0.09722, 0.44444, 0.07917, 0],
- 963: [0, 0.44444, 0.03704, 0],
- 964: [0, 0.44444, 0.13472, 0],
- 965: [0, 0.44444, 0.03704, 0],
- 966: [0.19444, 0.44444, 0, 0],
- 967: [0.19444, 0.44444, 0, 0],
- 968: [0.19444, 0.69444, 0.03704, 0],
- 969: [0, 0.44444, 0.03704, 0],
- 977: [0, 0.69444, 0, 0],
- 981: [0.19444, 0.69444, 0, 0],
- 982: [0, 0.44444, 0.03194, 0],
- 1009: [0.19444, 0.44444, 0, 0],
- 1013: [0, 0.44444, 0, 0],
- },
- "Math-Italic": {
- 47: [0.19444, 0.69444, 0, 0],
- 65: [0, 0.68333, 0, 0.13889],
- 66: [0, 0.68333, 0.05017, 0.08334],
- 67: [0, 0.68333, 0.07153, 0.08334],
- 68: [0, 0.68333, 0.02778, 0.05556],
- 69: [0, 0.68333, 0.05764, 0.08334],
- 70: [0, 0.68333, 0.13889, 0.08334],
- 71: [0, 0.68333, 0, 0.08334],
- 72: [0, 0.68333, 0.08125, 0.05556],
- 73: [0, 0.68333, 0.07847, 0.11111],
- 74: [0, 0.68333, 0.09618, 0.16667],
- 75: [0, 0.68333, 0.07153, 0.05556],
- 76: [0, 0.68333, 0, 0.02778],
- 77: [0, 0.68333, 0.10903, 0.08334],
- 78: [0, 0.68333, 0.10903, 0.08334],
- 79: [0, 0.68333, 0.02778, 0.08334],
- 80: [0, 0.68333, 0.13889, 0.08334],
- 81: [0.19444, 0.68333, 0, 0.08334],
- 82: [0, 0.68333, 0.00773, 0.08334],
- 83: [0, 0.68333, 0.05764, 0.08334],
- 84: [0, 0.68333, 0.13889, 0.08334],
- 85: [0, 0.68333, 0.10903, 0.02778],
- 86: [0, 0.68333, 0.22222, 0],
- 87: [0, 0.68333, 0.13889, 0],
- 88: [0, 0.68333, 0.07847, 0.08334],
- 89: [0, 0.68333, 0.22222, 0],
- 90: [0, 0.68333, 0.07153, 0.08334],
- 97: [0, 0.43056, 0, 0],
- 98: [0, 0.69444, 0, 0],
- 99: [0, 0.43056, 0, 0.05556],
- 100: [0, 0.69444, 0, 0.16667],
- 101: [0, 0.43056, 0, 0.05556],
- 102: [0.19444, 0.69444, 0.10764, 0.16667],
- 103: [0.19444, 0.43056, 0.03588, 0.02778],
- 104: [0, 0.69444, 0, 0],
- 105: [0, 0.65952, 0, 0],
- 106: [0.19444, 0.65952, 0.05724, 0],
- 107: [0, 0.69444, 0.03148, 0],
- 108: [0, 0.69444, 0.01968, 0.08334],
- 109: [0, 0.43056, 0, 0],
- 110: [0, 0.43056, 0, 0],
- 111: [0, 0.43056, 0, 0.05556],
- 112: [0.19444, 0.43056, 0, 0.08334],
- 113: [0.19444, 0.43056, 0.03588, 0.08334],
- 114: [0, 0.43056, 0.02778, 0.05556],
- 115: [0, 0.43056, 0, 0.05556],
- 116: [0, 0.61508, 0, 0.08334],
- 117: [0, 0.43056, 0, 0.02778],
- 118: [0, 0.43056, 0.03588, 0.02778],
- 119: [0, 0.43056, 0.02691, 0.08334],
- 120: [0, 0.43056, 0, 0.02778],
- 121: [0.19444, 0.43056, 0.03588, 0.05556],
- 122: [0, 0.43056, 0.04398, 0.05556],
- 915: [0, 0.68333, 0.13889, 0.08334],
- 916: [0, 0.68333, 0, 0.16667],
- 920: [0, 0.68333, 0.02778, 0.08334],
- 923: [0, 0.68333, 0, 0.16667],
- 926: [0, 0.68333, 0.07569, 0.08334],
- 928: [0, 0.68333, 0.08125, 0.05556],
- 931: [0, 0.68333, 0.05764, 0.08334],
- 933: [0, 0.68333, 0.13889, 0.05556],
- 934: [0, 0.68333, 0, 0.08334],
- 936: [0, 0.68333, 0.11, 0.05556],
- 937: [0, 0.68333, 0.05017, 0.08334],
- 945: [0, 0.43056, 0.0037, 0.02778],
- 946: [0.19444, 0.69444, 0.05278, 0.08334],
- 947: [0.19444, 0.43056, 0.05556, 0],
- 948: [0, 0.69444, 0.03785, 0.05556],
- 949: [0, 0.43056, 0, 0.08334],
- 950: [0.19444, 0.69444, 0.07378, 0.08334],
- 951: [0.19444, 0.43056, 0.03588, 0.05556],
- 952: [0, 0.69444, 0.02778, 0.08334],
- 953: [0, 0.43056, 0, 0.05556],
- 954: [0, 0.43056, 0, 0],
- 955: [0, 0.69444, 0, 0],
- 956: [0.19444, 0.43056, 0, 0.02778],
- 957: [0, 0.43056, 0.06366, 0.02778],
- 958: [0.19444, 0.69444, 0.04601, 0.11111],
- 959: [0, 0.43056, 0, 0.05556],
- 960: [0, 0.43056, 0.03588, 0],
- 961: [0.19444, 0.43056, 0, 0.08334],
- 962: [0.09722, 0.43056, 0.07986, 0.08334],
- 963: [0, 0.43056, 0.03588, 0],
- 964: [0, 0.43056, 0.1132, 0.02778],
- 965: [0, 0.43056, 0.03588, 0.02778],
- 966: [0.19444, 0.43056, 0, 0.08334],
- 967: [0.19444, 0.43056, 0, 0.05556],
- 968: [0.19444, 0.69444, 0.03588, 0.11111],
- 969: [0, 0.43056, 0.03588, 0],
- 977: [0, 0.69444, 0, 0.08334],
- 981: [0.19444, 0.69444, 0, 0.08334],
- 982: [0, 0.43056, 0.02778, 0],
- 1009: [0.19444, 0.43056, 0, 0.08334],
- 1013: [0, 0.43056, 0, 0.05556],
- },
- "Math-Regular": {
- 65: [0, 0.68333, 0, 0.13889],
- 66: [0, 0.68333, 0.05017, 0.08334],
- 67: [0, 0.68333, 0.07153, 0.08334],
- 68: [0, 0.68333, 0.02778, 0.05556],
- 69: [0, 0.68333, 0.05764, 0.08334],
- 70: [0, 0.68333, 0.13889, 0.08334],
- 71: [0, 0.68333, 0, 0.08334],
- 72: [0, 0.68333, 0.08125, 0.05556],
- 73: [0, 0.68333, 0.07847, 0.11111],
- 74: [0, 0.68333, 0.09618, 0.16667],
- 75: [0, 0.68333, 0.07153, 0.05556],
- 76: [0, 0.68333, 0, 0.02778],
- 77: [0, 0.68333, 0.10903, 0.08334],
- 78: [0, 0.68333, 0.10903, 0.08334],
- 79: [0, 0.68333, 0.02778, 0.08334],
- 80: [0, 0.68333, 0.13889, 0.08334],
- 81: [0.19444, 0.68333, 0, 0.08334],
- 82: [0, 0.68333, 0.00773, 0.08334],
- 83: [0, 0.68333, 0.05764, 0.08334],
- 84: [0, 0.68333, 0.13889, 0.08334],
- 85: [0, 0.68333, 0.10903, 0.02778],
- 86: [0, 0.68333, 0.22222, 0],
- 87: [0, 0.68333, 0.13889, 0],
- 88: [0, 0.68333, 0.07847, 0.08334],
- 89: [0, 0.68333, 0.22222, 0],
- 90: [0, 0.68333, 0.07153, 0.08334],
- 97: [0, 0.43056, 0, 0],
- 98: [0, 0.69444, 0, 0],
- 99: [0, 0.43056, 0, 0.05556],
- 100: [0, 0.69444, 0, 0.16667],
- 101: [0, 0.43056, 0, 0.05556],
- 102: [0.19444, 0.69444, 0.10764, 0.16667],
- 103: [0.19444, 0.43056, 0.03588, 0.02778],
- 104: [0, 0.69444, 0, 0],
- 105: [0, 0.65952, 0, 0],
- 106: [0.19444, 0.65952, 0.05724, 0],
- 107: [0, 0.69444, 0.03148, 0],
- 108: [0, 0.69444, 0.01968, 0.08334],
- 109: [0, 0.43056, 0, 0],
- 110: [0, 0.43056, 0, 0],
- 111: [0, 0.43056, 0, 0.05556],
- 112: [0.19444, 0.43056, 0, 0.08334],
- 113: [0.19444, 0.43056, 0.03588, 0.08334],
- 114: [0, 0.43056, 0.02778, 0.05556],
- 115: [0, 0.43056, 0, 0.05556],
- 116: [0, 0.61508, 0, 0.08334],
- 117: [0, 0.43056, 0, 0.02778],
- 118: [0, 0.43056, 0.03588, 0.02778],
- 119: [0, 0.43056, 0.02691, 0.08334],
- 120: [0, 0.43056, 0, 0.02778],
- 121: [0.19444, 0.43056, 0.03588, 0.05556],
- 122: [0, 0.43056, 0.04398, 0.05556],
- 915: [0, 0.68333, 0.13889, 0.08334],
- 916: [0, 0.68333, 0, 0.16667],
- 920: [0, 0.68333, 0.02778, 0.08334],
- 923: [0, 0.68333, 0, 0.16667],
- 926: [0, 0.68333, 0.07569, 0.08334],
- 928: [0, 0.68333, 0.08125, 0.05556],
- 931: [0, 0.68333, 0.05764, 0.08334],
- 933: [0, 0.68333, 0.13889, 0.05556],
- 934: [0, 0.68333, 0, 0.08334],
- 936: [0, 0.68333, 0.11, 0.05556],
- 937: [0, 0.68333, 0.05017, 0.08334],
- 945: [0, 0.43056, 0.0037, 0.02778],
- 946: [0.19444, 0.69444, 0.05278, 0.08334],
- 947: [0.19444, 0.43056, 0.05556, 0],
- 948: [0, 0.69444, 0.03785, 0.05556],
- 949: [0, 0.43056, 0, 0.08334],
- 950: [0.19444, 0.69444, 0.07378, 0.08334],
- 951: [0.19444, 0.43056, 0.03588, 0.05556],
- 952: [0, 0.69444, 0.02778, 0.08334],
- 953: [0, 0.43056, 0, 0.05556],
- 954: [0, 0.43056, 0, 0],
- 955: [0, 0.69444, 0, 0],
- 956: [0.19444, 0.43056, 0, 0.02778],
- 957: [0, 0.43056, 0.06366, 0.02778],
- 958: [0.19444, 0.69444, 0.04601, 0.11111],
- 959: [0, 0.43056, 0, 0.05556],
- 960: [0, 0.43056, 0.03588, 0],
- 961: [0.19444, 0.43056, 0, 0.08334],
- 962: [0.09722, 0.43056, 0.07986, 0.08334],
- 963: [0, 0.43056, 0.03588, 0],
- 964: [0, 0.43056, 0.1132, 0.02778],
- 965: [0, 0.43056, 0.03588, 0.02778],
- 966: [0.19444, 0.43056, 0, 0.08334],
- 967: [0.19444, 0.43056, 0, 0.05556],
- 968: [0.19444, 0.69444, 0.03588, 0.11111],
- 969: [0, 0.43056, 0.03588, 0],
- 977: [0, 0.69444, 0, 0.08334],
- 981: [0.19444, 0.69444, 0, 0.08334],
- 982: [0, 0.43056, 0.02778, 0],
- 1009: [0.19444, 0.43056, 0, 0.08334],
- 1013: [0, 0.43056, 0, 0.05556],
- },
- "SansSerif-Regular": {
- 33: [0, 0.69444, 0, 0],
- 34: [0, 0.69444, 0, 0],
- 35: [0.19444, 0.69444, 0, 0],
- 36: [0.05556, 0.75, 0, 0],
- 37: [0.05556, 0.75, 0, 0],
- 38: [0, 0.69444, 0, 0],
- 39: [0, 0.69444, 0, 0],
- 40: [0.25, 0.75, 0, 0],
- 41: [0.25, 0.75, 0, 0],
- 42: [0, 0.75, 0, 0],
- 43: [0.08333, 0.58333, 0, 0],
- 44: [0.125, 0.08333, 0, 0],
- 45: [0, 0.44444, 0, 0],
- 46: [0, 0.08333, 0, 0],
- 47: [0.25, 0.75, 0, 0],
- 48: [0, 0.65556, 0, 0],
- 49: [0, 0.65556, 0, 0],
- 50: [0, 0.65556, 0, 0],
- 51: [0, 0.65556, 0, 0],
- 52: [0, 0.65556, 0, 0],
- 53: [0, 0.65556, 0, 0],
- 54: [0, 0.65556, 0, 0],
- 55: [0, 0.65556, 0, 0],
- 56: [0, 0.65556, 0, 0],
- 57: [0, 0.65556, 0, 0],
- 58: [0, 0.44444, 0, 0],
- 59: [0.125, 0.44444, 0, 0],
- 61: [-0.13, 0.37, 0, 0],
- 63: [0, 0.69444, 0, 0],
- 64: [0, 0.69444, 0, 0],
- 65: [0, 0.69444, 0, 0],
- 66: [0, 0.69444, 0, 0],
- 67: [0, 0.69444, 0, 0],
- 68: [0, 0.69444, 0, 0],
- 69: [0, 0.69444, 0, 0],
- 70: [0, 0.69444, 0, 0],
- 71: [0, 0.69444, 0, 0],
- 72: [0, 0.69444, 0, 0],
- 73: [0, 0.69444, 0, 0],
- 74: [0, 0.69444, 0, 0],
- 75: [0, 0.69444, 0, 0],
- 76: [0, 0.69444, 0, 0],
- 77: [0, 0.69444, 0, 0],
- 78: [0, 0.69444, 0, 0],
- 79: [0, 0.69444, 0, 0],
- 80: [0, 0.69444, 0, 0],
- 81: [0.125, 0.69444, 0, 0],
- 82: [0, 0.69444, 0, 0],
- 83: [0, 0.69444, 0, 0],
- 84: [0, 0.69444, 0, 0],
- 85: [0, 0.69444, 0, 0],
- 86: [0, 0.69444, 0.01389, 0],
- 87: [0, 0.69444, 0.01389, 0],
- 88: [0, 0.69444, 0, 0],
- 89: [0, 0.69444, 0.025, 0],
- 90: [0, 0.69444, 0, 0],
- 91: [0.25, 0.75, 0, 0],
- 93: [0.25, 0.75, 0, 0],
- 94: [0, 0.69444, 0, 0],
- 95: [0.35, 0.09444, 0.02778, 0],
- 97: [0, 0.44444, 0, 0],
- 98: [0, 0.69444, 0, 0],
- 99: [0, 0.44444, 0, 0],
- 100: [0, 0.69444, 0, 0],
- 101: [0, 0.44444, 0, 0],
- 102: [0, 0.69444, 0.06944, 0],
- 103: [0.19444, 0.44444, 0.01389, 0],
- 104: [0, 0.69444, 0, 0],
- 105: [0, 0.67937, 0, 0],
- 106: [0.19444, 0.67937, 0, 0],
- 107: [0, 0.69444, 0, 0],
- 108: [0, 0.69444, 0, 0],
- 109: [0, 0.44444, 0, 0],
- 110: [0, 0.44444, 0, 0],
- 111: [0, 0.44444, 0, 0],
- 112: [0.19444, 0.44444, 0, 0],
- 113: [0.19444, 0.44444, 0, 0],
- 114: [0, 0.44444, 0.01389, 0],
- 115: [0, 0.44444, 0, 0],
- 116: [0, 0.57143, 0, 0],
- 117: [0, 0.44444, 0, 0],
- 118: [0, 0.44444, 0.01389, 0],
- 119: [0, 0.44444, 0.01389, 0],
- 120: [0, 0.44444, 0, 0],
- 121: [0.19444, 0.44444, 0.01389, 0],
- 122: [0, 0.44444, 0, 0],
- 126: [0.35, 0.32659, 0, 0],
- 305: [0, 0.44444, 0, 0],
- 567: [0.19444, 0.44444, 0, 0],
- 768: [0, 0.69444, 0, 0],
- 769: [0, 0.69444, 0, 0],
- 770: [0, 0.69444, 0, 0],
- 771: [0, 0.67659, 0, 0],
- 772: [0, 0.60889, 0, 0],
- 774: [0, 0.69444, 0, 0],
- 775: [0, 0.67937, 0, 0],
- 776: [0, 0.67937, 0, 0],
- 778: [0, 0.69444, 0, 0],
- 779: [0, 0.69444, 0, 0],
- 780: [0, 0.63194, 0, 0],
- 915: [0, 0.69444, 0, 0],
- 916: [0, 0.69444, 0, 0],
- 920: [0, 0.69444, 0, 0],
- 923: [0, 0.69444, 0, 0],
- 926: [0, 0.69444, 0, 0],
- 928: [0, 0.69444, 0, 0],
- 931: [0, 0.69444, 0, 0],
- 933: [0, 0.69444, 0, 0],
- 934: [0, 0.69444, 0, 0],
- 936: [0, 0.69444, 0, 0],
- 937: [0, 0.69444, 0, 0],
- 8211: [0, 0.44444, 0.02778, 0],
- 8212: [0, 0.44444, 0.02778, 0],
- 8216: [0, 0.69444, 0, 0],
- 8217: [0, 0.69444, 0, 0],
- 8220: [0, 0.69444, 0, 0],
- 8221: [0, 0.69444, 0, 0],
- },
- "Script-Regular": {
- 65: [0, 0.7, 0.22925, 0],
- 66: [0, 0.7, 0.04087, 0],
- 67: [0, 0.7, 0.1689, 0],
- 68: [0, 0.7, 0.09371, 0],
- 69: [0, 0.7, 0.18583, 0],
- 70: [0, 0.7, 0.13634, 0],
- 71: [0, 0.7, 0.17322, 0],
- 72: [0, 0.7, 0.29694, 0],
- 73: [0, 0.7, 0.19189, 0],
- 74: [0.27778, 0.7, 0.19189, 0],
- 75: [0, 0.7, 0.31259, 0],
- 76: [0, 0.7, 0.19189, 0],
- 77: [0, 0.7, 0.15981, 0],
- 78: [0, 0.7, 0.3525, 0],
- 79: [0, 0.7, 0.08078, 0],
- 80: [0, 0.7, 0.08078, 0],
- 81: [0, 0.7, 0.03305, 0],
- 82: [0, 0.7, 0.06259, 0],
- 83: [0, 0.7, 0.19189, 0],
- 84: [0, 0.7, 0.29087, 0],
- 85: [0, 0.7, 0.25815, 0],
- 86: [0, 0.7, 0.27523, 0],
- 87: [0, 0.7, 0.27523, 0],
- 88: [0, 0.7, 0.26006, 0],
- 89: [0, 0.7, 0.2939, 0],
- 90: [0, 0.7, 0.24037, 0],
- },
- "Size1-Regular": {
- 40: [0.35001, 0.85, 0, 0],
- 41: [0.35001, 0.85, 0, 0],
- 47: [0.35001, 0.85, 0, 0],
- 91: [0.35001, 0.85, 0, 0],
- 92: [0.35001, 0.85, 0, 0],
- 93: [0.35001, 0.85, 0, 0],
- 123: [0.35001, 0.85, 0, 0],
- 125: [0.35001, 0.85, 0, 0],
- 710: [0, 0.72222, 0, 0],
- 732: [0, 0.72222, 0, 0],
- 770: [0, 0.72222, 0, 0],
- 771: [0, 0.72222, 0, 0],
- 8214: [-0.00099, 0.601, 0, 0],
- 8593: [1e-5, 0.6, 0, 0],
- 8595: [1e-5, 0.6, 0, 0],
- 8657: [1e-5, 0.6, 0, 0],
- 8659: [1e-5, 0.6, 0, 0],
- 8719: [0.25001, 0.75, 0, 0],
- 8720: [0.25001, 0.75, 0, 0],
- 8721: [0.25001, 0.75, 0, 0],
- 8730: [0.35001, 0.85, 0, 0],
- 8739: [-0.00599, 0.606, 0, 0],
- 8741: [-0.00599, 0.606, 0, 0],
- 8747: [0.30612, 0.805, 0.19445, 0],
- 8748: [0.306, 0.805, 0.19445, 0],
- 8749: [0.306, 0.805, 0.19445, 0],
- 8750: [0.30612, 0.805, 0.19445, 0],
- 8896: [0.25001, 0.75, 0, 0],
- 8897: [0.25001, 0.75, 0, 0],
- 8898: [0.25001, 0.75, 0, 0],
- 8899: [0.25001, 0.75, 0, 0],
- 8968: [0.35001, 0.85, 0, 0],
- 8969: [0.35001, 0.85, 0, 0],
- 8970: [0.35001, 0.85, 0, 0],
- 8971: [0.35001, 0.85, 0, 0],
- 9168: [-0.00099, 0.601, 0, 0],
- 10216: [0.35001, 0.85, 0, 0],
- 10217: [0.35001, 0.85, 0, 0],
- 10752: [0.25001, 0.75, 0, 0],
- 10753: [0.25001, 0.75, 0, 0],
- 10754: [0.25001, 0.75, 0, 0],
- 10756: [0.25001, 0.75, 0, 0],
- 10758: [0.25001, 0.75, 0, 0],
- },
- "Size2-Regular": {
- 40: [0.65002, 1.15, 0, 0],
- 41: [0.65002, 1.15, 0, 0],
- 47: [0.65002, 1.15, 0, 0],
- 91: [0.65002, 1.15, 0, 0],
- 92: [0.65002, 1.15, 0, 0],
- 93: [0.65002, 1.15, 0, 0],
- 123: [0.65002, 1.15, 0, 0],
- 125: [0.65002, 1.15, 0, 0],
- 710: [0, 0.75, 0, 0],
- 732: [0, 0.75, 0, 0],
- 770: [0, 0.75, 0, 0],
- 771: [0, 0.75, 0, 0],
- 8719: [0.55001, 1.05, 0, 0],
- 8720: [0.55001, 1.05, 0, 0],
- 8721: [0.55001, 1.05, 0, 0],
- 8730: [0.65002, 1.15, 0, 0],
- 8747: [0.86225, 1.36, 0.44445, 0],
- 8748: [0.862, 1.36, 0.44445, 0],
- 8749: [0.862, 1.36, 0.44445, 0],
- 8750: [0.86225, 1.36, 0.44445, 0],
- 8896: [0.55001, 1.05, 0, 0],
- 8897: [0.55001, 1.05, 0, 0],
- 8898: [0.55001, 1.05, 0, 0],
- 8899: [0.55001, 1.05, 0, 0],
- 8968: [0.65002, 1.15, 0, 0],
- 8969: [0.65002, 1.15, 0, 0],
- 8970: [0.65002, 1.15, 0, 0],
- 8971: [0.65002, 1.15, 0, 0],
- 10216: [0.65002, 1.15, 0, 0],
- 10217: [0.65002, 1.15, 0, 0],
- 10752: [0.55001, 1.05, 0, 0],
- 10753: [0.55001, 1.05, 0, 0],
- 10754: [0.55001, 1.05, 0, 0],
- 10756: [0.55001, 1.05, 0, 0],
- 10758: [0.55001, 1.05, 0, 0],
- },
- "Size3-Regular": {
- 40: [0.95003, 1.45, 0, 0],
- 41: [0.95003, 1.45, 0, 0],
- 47: [0.95003, 1.45, 0, 0],
- 91: [0.95003, 1.45, 0, 0],
- 92: [0.95003, 1.45, 0, 0],
- 93: [0.95003, 1.45, 0, 0],
- 123: [0.95003, 1.45, 0, 0],
- 125: [0.95003, 1.45, 0, 0],
- 710: [0, 0.75, 0, 0],
- 732: [0, 0.75, 0, 0],
- 770: [0, 0.75, 0, 0],
- 771: [0, 0.75, 0, 0],
- 8730: [0.95003, 1.45, 0, 0],
- 8968: [0.95003, 1.45, 0, 0],
- 8969: [0.95003, 1.45, 0, 0],
- 8970: [0.95003, 1.45, 0, 0],
- 8971: [0.95003, 1.45, 0, 0],
- 10216: [0.95003, 1.45, 0, 0],
- 10217: [0.95003, 1.45, 0, 0],
- },
- "Size4-Regular": {
- 40: [1.25003, 1.75, 0, 0],
- 41: [1.25003, 1.75, 0, 0],
- 47: [1.25003, 1.75, 0, 0],
- 91: [1.25003, 1.75, 0, 0],
- 92: [1.25003, 1.75, 0, 0],
- 93: [1.25003, 1.75, 0, 0],
- 123: [1.25003, 1.75, 0, 0],
- 125: [1.25003, 1.75, 0, 0],
- 710: [0, 0.825, 0, 0],
- 732: [0, 0.825, 0, 0],
- 770: [0, 0.825, 0, 0],
- 771: [0, 0.825, 0, 0],
- 8730: [1.25003, 1.75, 0, 0],
- 8968: [1.25003, 1.75, 0, 0],
- 8969: [1.25003, 1.75, 0, 0],
- 8970: [1.25003, 1.75, 0, 0],
- 8971: [1.25003, 1.75, 0, 0],
- 9115: [0.64502, 1.155, 0, 0],
- 9116: [1e-5, 0.6, 0, 0],
- 9117: [0.64502, 1.155, 0, 0],
- 9118: [0.64502, 1.155, 0, 0],
- 9119: [1e-5, 0.6, 0, 0],
- 9120: [0.64502, 1.155, 0, 0],
- 9121: [0.64502, 1.155, 0, 0],
- 9122: [-0.00099, 0.601, 0, 0],
- 9123: [0.64502, 1.155, 0, 0],
- 9124: [0.64502, 1.155, 0, 0],
- 9125: [-0.00099, 0.601, 0, 0],
- 9126: [0.64502, 1.155, 0, 0],
- 9127: [1e-5, 0.9, 0, 0],
- 9128: [0.65002, 1.15, 0, 0],
- 9129: [0.90001, 0, 0, 0],
- 9130: [0, 0.3, 0, 0],
- 9131: [1e-5, 0.9, 0, 0],
- 9132: [0.65002, 1.15, 0, 0],
- 9133: [0.90001, 0, 0, 0],
- 9143: [0.88502, 0.915, 0, 0],
- 10216: [1.25003, 1.75, 0, 0],
- 10217: [1.25003, 1.75, 0, 0],
- 57344: [-0.00499, 0.605, 0, 0],
- 57345: [-0.00499, 0.605, 0, 0],
- 57680: [0, 0.12, 0, 0],
- 57681: [0, 0.12, 0, 0],
- 57682: [0, 0.12, 0, 0],
- 57683: [0, 0.12, 0, 0],
- },
- "Typewriter-Regular": {
- 33: [0, 0.61111, 0, 0],
- 34: [0, 0.61111, 0, 0],
- 35: [0, 0.61111, 0, 0],
- 36: [0.08333, 0.69444, 0, 0],
- 37: [0.08333, 0.69444, 0, 0],
- 38: [0, 0.61111, 0, 0],
- 39: [0, 0.61111, 0, 0],
- 40: [0.08333, 0.69444, 0, 0],
- 41: [0.08333, 0.69444, 0, 0],
- 42: [0, 0.52083, 0, 0],
- 43: [-0.08056, 0.53055, 0, 0],
- 44: [0.13889, 0.125, 0, 0],
- 45: [-0.08056, 0.53055, 0, 0],
- 46: [0, 0.125, 0, 0],
- 47: [0.08333, 0.69444, 0, 0],
- 48: [0, 0.61111, 0, 0],
- 49: [0, 0.61111, 0, 0],
- 50: [0, 0.61111, 0, 0],
- 51: [0, 0.61111, 0, 0],
- 52: [0, 0.61111, 0, 0],
- 53: [0, 0.61111, 0, 0],
- 54: [0, 0.61111, 0, 0],
- 55: [0, 0.61111, 0, 0],
- 56: [0, 0.61111, 0, 0],
- 57: [0, 0.61111, 0, 0],
- 58: [0, 0.43056, 0, 0],
- 59: [0.13889, 0.43056, 0, 0],
- 60: [-0.05556, 0.55556, 0, 0],
- 61: [-0.19549, 0.41562, 0, 0],
- 62: [-0.05556, 0.55556, 0, 0],
- 63: [0, 0.61111, 0, 0],
- 64: [0, 0.61111, 0, 0],
- 65: [0, 0.61111, 0, 0],
- 66: [0, 0.61111, 0, 0],
- 67: [0, 0.61111, 0, 0],
- 68: [0, 0.61111, 0, 0],
- 69: [0, 0.61111, 0, 0],
- 70: [0, 0.61111, 0, 0],
- 71: [0, 0.61111, 0, 0],
- 72: [0, 0.61111, 0, 0],
- 73: [0, 0.61111, 0, 0],
- 74: [0, 0.61111, 0, 0],
- 75: [0, 0.61111, 0, 0],
- 76: [0, 0.61111, 0, 0],
- 77: [0, 0.61111, 0, 0],
- 78: [0, 0.61111, 0, 0],
- 79: [0, 0.61111, 0, 0],
- 80: [0, 0.61111, 0, 0],
- 81: [0.13889, 0.61111, 0, 0],
- 82: [0, 0.61111, 0, 0],
- 83: [0, 0.61111, 0, 0],
- 84: [0, 0.61111, 0, 0],
- 85: [0, 0.61111, 0, 0],
- 86: [0, 0.61111, 0, 0],
- 87: [0, 0.61111, 0, 0],
- 88: [0, 0.61111, 0, 0],
- 89: [0, 0.61111, 0, 0],
- 90: [0, 0.61111, 0, 0],
- 91: [0.08333, 0.69444, 0, 0],
- 92: [0.08333, 0.69444, 0, 0],
- 93: [0.08333, 0.69444, 0, 0],
- 94: [0, 0.61111, 0, 0],
- 95: [0.09514, 0, 0, 0],
- 96: [0, 0.61111, 0, 0],
- 97: [0, 0.43056, 0, 0],
- 98: [0, 0.61111, 0, 0],
- 99: [0, 0.43056, 0, 0],
- 100: [0, 0.61111, 0, 0],
- 101: [0, 0.43056, 0, 0],
- 102: [0, 0.61111, 0, 0],
- 103: [0.22222, 0.43056, 0, 0],
- 104: [0, 0.61111, 0, 0],
- 105: [0, 0.61111, 0, 0],
- 106: [0.22222, 0.61111, 0, 0],
- 107: [0, 0.61111, 0, 0],
- 108: [0, 0.61111, 0, 0],
- 109: [0, 0.43056, 0, 0],
- 110: [0, 0.43056, 0, 0],
- 111: [0, 0.43056, 0, 0],
- 112: [0.22222, 0.43056, 0, 0],
- 113: [0.22222, 0.43056, 0, 0],
- 114: [0, 0.43056, 0, 0],
- 115: [0, 0.43056, 0, 0],
- 116: [0, 0.55358, 0, 0],
- 117: [0, 0.43056, 0, 0],
- 118: [0, 0.43056, 0, 0],
- 119: [0, 0.43056, 0, 0],
- 120: [0, 0.43056, 0, 0],
- 121: [0.22222, 0.43056, 0, 0],
- 122: [0, 0.43056, 0, 0],
- 123: [0.08333, 0.69444, 0, 0],
- 124: [0.08333, 0.69444, 0, 0],
- 125: [0.08333, 0.69444, 0, 0],
- 126: [0, 0.61111, 0, 0],
- 127: [0, 0.61111, 0, 0],
- 305: [0, 0.43056, 0, 0],
- 567: [0.22222, 0.43056, 0, 0],
- 768: [0, 0.61111, 0, 0],
- 769: [0, 0.61111, 0, 0],
- 770: [0, 0.61111, 0, 0],
- 771: [0, 0.61111, 0, 0],
- 772: [0, 0.56555, 0, 0],
- 774: [0, 0.61111, 0, 0],
- 776: [0, 0.61111, 0, 0],
- 778: [0, 0.61111, 0, 0],
- 780: [0, 0.56597, 0, 0],
- 915: [0, 0.61111, 0, 0],
- 916: [0, 0.61111, 0, 0],
- 920: [0, 0.61111, 0, 0],
- 923: [0, 0.61111, 0, 0],
- 926: [0, 0.61111, 0, 0],
- 928: [0, 0.61111, 0, 0],
- 931: [0, 0.61111, 0, 0],
- 933: [0, 0.61111, 0, 0],
- 934: [0, 0.61111, 0, 0],
- 936: [0, 0.61111, 0, 0],
- 937: [0, 0.61111, 0, 0],
- 2018: [0, 0.61111, 0, 0],
- 2019: [0, 0.61111, 0, 0],
- 8242: [0, 0.61111, 0, 0],
- },
- };
- },
- {},
- ],
- 43: [
- function (require, module, exports) {
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- var _ParseNode = require("./ParseNode");
-
- var _ParseNode2 = _interopRequireDefault(_ParseNode);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /* This file contains a list of functions that we parse, identified by
- * the calls to defineFunction.
- *
- * The first argument to defineFunction is a single name or a list of names.
- * All functions named in such a list will share a single implementation.
- *
- * Each declared function can have associated properties, which
- * include the following:
- *
- * - numArgs: The number of arguments the function takes.
- * If this is the only property, it can be passed as a number
- * instead of an element of a properties object.
- * - argTypes: (optional) An array corresponding to each argument of the
- * function, giving the type of argument that should be parsed. Its
- * length should be equal to `numArgs + numOptionalArgs`. Valid
- * types:
- * - "size": A size-like thing, such as "1em" or "5ex"
- * - "color": An html color, like "#abc" or "blue"
- * - "original": The same type as the environment that the
- * function being parsed is in (e.g. used for the
- * bodies of functions like \textcolor where the
- * first argument is special and the second
- * argument is parsed normally)
- * Other possible types (probably shouldn't be used)
- * - "text": Text-like (e.g. \text)
- * - "math": Normal math
- * If undefined, this will be treated as an appropriate length
- * array of "original" strings
- * - greediness: (optional) The greediness of the function to use ungrouped
- * arguments.
- *
- * E.g. if you have an expression
- * \sqrt \frac 1 2
- * since \frac has greediness=2 vs \sqrt's greediness=1, \frac
- * will use the two arguments '1' and '2' as its two arguments,
- * then that whole function will be used as the argument to
- * \sqrt. On the other hand, the expressions
- * \frac \frac 1 2 3
- * and
- * \frac \sqrt 1 2
- * will fail because \frac and \frac have equal greediness
- * and \sqrt has a lower greediness than \frac respectively. To
- * make these parse, we would have to change them to:
- * \frac {\frac 1 2} 3
- * and
- * \frac {\sqrt 1} 2
- *
- * The default value is `1`
- * - allowedInText: (optional) Whether or not the function is allowed inside
- * text mode (default false)
- * - numOptionalArgs: (optional) The number of optional arguments the function
- * should parse. If the optional arguments aren't found,
- * `null` will be passed to the handler in their place.
- * (default 0)
- * - infix: (optional) Must be true if the function is an infix operator.
- *
- * The last argument is that implementation, the handler for the function(s).
- * It is called to handle these functions and their arguments.
- * It receives two arguments:
- * - context contains information and references provided by the parser
- * - args is an array of arguments obtained from TeX input
- * The context contains the following properties:
- * - funcName: the text (i.e. name) of the function, including \
- * - parser: the parser object
- * - lexer: the lexer object
- * - positions: the positions in the overall string of the function
- * and the arguments.
- * The latter three should only be used to produce error messages.
- *
- * The function should return an object with the following keys:
- * - type: The type of element that this is. This is then used in
- * buildHTML/buildMathML to determine which function
- * should be called to build this node into a DOM node
- * Any other data can be added to the object, which will be passed
- * in to the function in buildHTML/buildMathML as `group.value`.
- */
-
- function defineFunction(names, props, handler) {
- if (typeof names === "string") {
- names = [names];
- }
- if (typeof props === "number") {
- props = { numArgs: props };
- }
- // Set default values of functions
- var data = {
- numArgs: props.numArgs,
- argTypes: props.argTypes,
- greediness: props.greediness === undefined ? 1 : props.greediness,
- allowedInText: !!props.allowedInText,
- allowedInMath: props.allowedInMath,
- numOptionalArgs: props.numOptionalArgs || 0,
- infix: !!props.infix,
- handler: handler,
- };
- for (var i = 0; i < names.length; ++i) {
- module.exports[names[i]] = data;
- }
- }
-
- // Since the corresponding buildHTML/buildMathML function expects a
- // list of elements, we normalize for different kinds of arguments
- var ordargument = function ordargument(arg) {
- if (arg.type === "ordgroup") {
- return arg.value;
- } else {
- return [arg];
- }
- };
-
- // A normal square root
- defineFunction(
- "\\sqrt",
- {
- numArgs: 1,
- numOptionalArgs: 1,
- },
- function (context, args) {
- var index = args[0];
- var body = args[1];
- return {
- type: "sqrt",
- body: body,
- index: index,
- };
- }
- );
-
- // Non-mathy text, possibly in a font
- var textFunctionStyles = {
- "\\text": undefined,
- "\\textrm": "mathrm",
- "\\textsf": "mathsf",
- "\\texttt": "mathtt",
- "\\textnormal": "mathrm",
- "\\textbf": "mathbf",
- "\\textit": "textit",
- };
-
- defineFunction(
- ["\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", "\\textbf", "\\textit"],
- {
- numArgs: 1,
- argTypes: ["text"],
- greediness: 2,
- allowedInText: true,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "text",
- body: ordargument(body),
- style: textFunctionStyles[context.funcName],
- };
- }
- );
-
- // A two-argument custom color
- defineFunction(
- "\\textcolor",
- {
- numArgs: 2,
- allowedInText: true,
- greediness: 3,
- argTypes: ["color", "original"],
- },
- function (context, args) {
- var color = args[0];
- var body = args[1];
- return {
- type: "color",
- color: color.value,
- value: ordargument(body),
- };
- }
- );
-
- // \color is handled in Parser.js's parseImplicitGroup
- defineFunction(
- "\\color",
- {
- numArgs: 1,
- allowedInText: true,
- greediness: 3,
- argTypes: ["color"],
- },
- null
- );
-
- // An overline
- defineFunction(
- "\\overline",
- {
- numArgs: 1,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "overline",
- body: body,
- };
- }
- );
-
- // An underline
- defineFunction(
- "\\underline",
- {
- numArgs: 1,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "underline",
- body: body,
- };
- }
- );
-
- // A box of the width and height
- defineFunction(
- "\\rule",
- {
- numArgs: 2,
- numOptionalArgs: 1,
- argTypes: ["size", "size", "size"],
- },
- function (context, args) {
- var shift = args[0];
- var width = args[1];
- var height = args[2];
- return {
- type: "rule",
- shift: shift && shift.value,
- width: width.value,
- height: height.value,
- };
- }
- );
-
- // TODO: In TeX, \mkern only accepts mu-units, and \kern does not accept
- // mu-units. In current KaTeX we relax this; both commands accept any unit.
- defineFunction(
- ["\\kern", "\\mkern"],
- {
- numArgs: 1,
- argTypes: ["size"],
- },
- function (context, args) {
- return {
- type: "kern",
- dimension: args[0].value,
- };
- }
- );
-
- // A KaTeX logo
- defineFunction(
- "\\KaTeX",
- {
- numArgs: 0,
- },
- function (context) {
- return {
- type: "katex",
- };
- }
- );
-
- defineFunction(
- "\\phantom",
- {
- numArgs: 1,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "phantom",
- value: ordargument(body),
- };
- }
- );
-
- // Math class commands except \mathop
- defineFunction(
- ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"],
- {
- numArgs: 1,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "mclass",
- mclass: "m" + context.funcName.substr(5),
- value: ordargument(body),
- };
- }
- );
-
- // Build a relation by placing one symbol on top of another
- defineFunction(
- "\\stackrel",
- {
- numArgs: 2,
- },
- function (context, args) {
- var top = args[0];
- var bottom = args[1];
-
- var bottomop = new _ParseNode2.default(
- "op",
- {
- type: "op",
- limits: true,
- alwaysHandleSupSub: true,
- symbol: false,
- value: ordargument(bottom),
- },
- bottom.mode
- );
-
- var supsub = new _ParseNode2.default(
- "supsub",
- {
- base: bottomop,
- sup: top,
- sub: null,
- },
- top.mode
- );
-
- return {
- type: "mclass",
- mclass: "mrel",
- value: [supsub],
- };
- }
- );
-
- // \mod-type functions
- defineFunction(
- "\\bmod",
- {
- numArgs: 0,
- },
- function (context, args) {
- return {
- type: "mod",
- modType: "bmod",
- value: null,
- };
- }
- );
-
- defineFunction(
- ["\\pod", "\\pmod", "\\mod"],
- {
- numArgs: 1,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "mod",
- modType: context.funcName.substr(1),
- value: ordargument(body),
- };
- }
- );
-
- // Extra data needed for the delimiter handler down below
- var delimiterSizes = {
- "\\bigl": { mclass: "mopen", size: 1 },
- "\\Bigl": { mclass: "mopen", size: 2 },
- "\\biggl": { mclass: "mopen", size: 3 },
- "\\Biggl": { mclass: "mopen", size: 4 },
- "\\bigr": { mclass: "mclose", size: 1 },
- "\\Bigr": { mclass: "mclose", size: 2 },
- "\\biggr": { mclass: "mclose", size: 3 },
- "\\Biggr": { mclass: "mclose", size: 4 },
- "\\bigm": { mclass: "mrel", size: 1 },
- "\\Bigm": { mclass: "mrel", size: 2 },
- "\\biggm": { mclass: "mrel", size: 3 },
- "\\Biggm": { mclass: "mrel", size: 4 },
- "\\big": { mclass: "mord", size: 1 },
- "\\Big": { mclass: "mord", size: 2 },
- "\\bigg": { mclass: "mord", size: 3 },
- "\\Bigg": { mclass: "mord", size: 4 },
- };
-
- var delimiters = [
- "(",
- ")",
- "[",
- "\\lbrack",
- "]",
- "\\rbrack",
- "\\{",
- "\\lbrace",
- "\\}",
- "\\rbrace",
- "\\lfloor",
- "\\rfloor",
- "\\lceil",
- "\\rceil",
- "<",
- ">",
- "\\langle",
- "\\rangle",
- "\\lt",
- "\\gt",
- "\\lvert",
- "\\rvert",
- "\\lVert",
- "\\rVert",
- "\\lgroup",
- "\\rgroup",
- "\\lmoustache",
- "\\rmoustache",
- "/",
- "\\backslash",
- "|",
- "\\vert",
- "\\|",
- "\\Vert",
- "\\uparrow",
- "\\Uparrow",
- "\\downarrow",
- "\\Downarrow",
- "\\updownarrow",
- "\\Updownarrow",
- ".",
- ];
-
- var fontAliases = {
- "\\Bbb": "\\mathbb",
- "\\bold": "\\mathbf",
- "\\frak": "\\mathfrak",
- };
-
- // Single-argument color functions
- defineFunction(
- [
- "\\blue",
- "\\orange",
- "\\pink",
- "\\red",
- "\\green",
- "\\gray",
- "\\purple",
- "\\blueA",
- "\\blueB",
- "\\blueC",
- "\\blueD",
- "\\blueE",
- "\\tealA",
- "\\tealB",
- "\\tealC",
- "\\tealD",
- "\\tealE",
- "\\greenA",
- "\\greenB",
- "\\greenC",
- "\\greenD",
- "\\greenE",
- "\\goldA",
- "\\goldB",
- "\\goldC",
- "\\goldD",
- "\\goldE",
- "\\redA",
- "\\redB",
- "\\redC",
- "\\redD",
- "\\redE",
- "\\maroonA",
- "\\maroonB",
- "\\maroonC",
- "\\maroonD",
- "\\maroonE",
- "\\purpleA",
- "\\purpleB",
- "\\purpleC",
- "\\purpleD",
- "\\purpleE",
- "\\mintA",
- "\\mintB",
- "\\mintC",
- "\\grayA",
- "\\grayB",
- "\\grayC",
- "\\grayD",
- "\\grayE",
- "\\grayF",
- "\\grayG",
- "\\grayH",
- "\\grayI",
- "\\kaBlue",
- "\\kaGreen",
- ],
- {
- numArgs: 1,
- allowedInText: true,
- greediness: 3,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "color",
- color: "katex-" + context.funcName.slice(1),
- value: ordargument(body),
- };
- }
- );
-
- // There are 2 flags for operators; whether they produce limits in
- // displaystyle, and whether they are symbols and should grow in
- // displaystyle. These four groups cover the four possible choices.
-
- // No limits, not symbols
- defineFunction(
- [
- "\\arcsin",
- "\\arccos",
- "\\arctan",
- "\\arctg",
- "\\arcctg",
- "\\arg",
- "\\ch",
- "\\cos",
- "\\cosec",
- "\\cosh",
- "\\cot",
- "\\cotg",
- "\\coth",
- "\\csc",
- "\\ctg",
- "\\cth",
- "\\deg",
- "\\dim",
- "\\exp",
- "\\hom",
- "\\ker",
- "\\lg",
- "\\ln",
- "\\log",
- "\\sec",
- "\\sin",
- "\\sinh",
- "\\sh",
- "\\tan",
- "\\tanh",
- "\\tg",
- "\\th",
- ],
- {
- numArgs: 0,
- },
- function (context) {
- return {
- type: "op",
- limits: false,
- symbol: false,
- body: context.funcName,
- };
- }
- );
-
- // Limits, not symbols
- defineFunction(
- ["\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max", "\\min", "\\Pr", "\\sup"],
- {
- numArgs: 0,
- },
- function (context) {
- return {
- type: "op",
- limits: true,
- symbol: false,
- body: context.funcName,
- };
- }
- );
-
- // No limits, symbols
- defineFunction(
- ["\\int", "\\iint", "\\iiint", "\\oint"],
- {
- numArgs: 0,
- },
- function (context) {
- return {
- type: "op",
- limits: false,
- symbol: true,
- body: context.funcName,
- };
- }
- );
-
- // Limits, symbols
- defineFunction(
- [
- "\\coprod",
- "\\bigvee",
- "\\bigwedge",
- "\\biguplus",
- "\\bigcap",
- "\\bigcup",
- "\\intop",
- "\\prod",
- "\\sum",
- "\\bigotimes",
- "\\bigoplus",
- "\\bigodot",
- "\\bigsqcup",
- "\\smallint",
- ],
- {
- numArgs: 0,
- },
- function (context) {
- return {
- type: "op",
- limits: true,
- symbol: true,
- body: context.funcName,
- };
- }
- );
-
- // \mathop class command
- defineFunction(
- "\\mathop",
- {
- numArgs: 1,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "op",
- limits: false,
- symbol: false,
- value: ordargument(body),
- };
- }
- );
-
- // Fractions
- defineFunction(
- ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac"],
- {
- numArgs: 2,
- greediness: 2,
- },
- function (context, args) {
- var numer = args[0];
- var denom = args[1];
- var hasBarLine = void 0;
- var leftDelim = null;
- var rightDelim = null;
- var size = "auto";
-
- switch (context.funcName) {
- case "\\dfrac":
- case "\\frac":
- case "\\tfrac":
- hasBarLine = true;
- break;
- case "\\\\atopfrac":
- hasBarLine = false;
- break;
- case "\\dbinom":
- case "\\binom":
- case "\\tbinom":
- hasBarLine = false;
- leftDelim = "(";
- rightDelim = ")";
- break;
- default:
- throw new Error("Unrecognized genfrac command");
- }
-
- switch (context.funcName) {
- case "\\dfrac":
- case "\\dbinom":
- size = "display";
- break;
- case "\\tfrac":
- case "\\tbinom":
- size = "text";
- break;
- }
-
- return {
- type: "genfrac",
- numer: numer,
- denom: denom,
- hasBarLine: hasBarLine,
- leftDelim: leftDelim,
- rightDelim: rightDelim,
- size: size,
- };
- }
- );
-
- // Left and right overlap functions
- defineFunction(
- ["\\llap", "\\rlap"],
- {
- numArgs: 1,
- allowedInText: true,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: context.funcName.slice(1),
- body: body,
- };
- }
- );
-
- // Delimiter functions
- var checkDelimiter = function checkDelimiter(delim, context) {
- if (_utils2.default.contains(delimiters, delim.value)) {
- return delim;
- } else {
- throw new _ParseError2.default("Invalid delimiter: '" + delim.value + "' after '" + context.funcName + "'", delim);
- }
- };
-
- defineFunction(
- [
- "\\bigl",
- "\\Bigl",
- "\\biggl",
- "\\Biggl",
- "\\bigr",
- "\\Bigr",
- "\\biggr",
- "\\Biggr",
- "\\bigm",
- "\\Bigm",
- "\\biggm",
- "\\Biggm",
- "\\big",
- "\\Big",
- "\\bigg",
- "\\Bigg",
- ],
- {
- numArgs: 1,
- },
- function (context, args) {
- var delim = checkDelimiter(args[0], context);
-
- return {
- type: "delimsizing",
- size: delimiterSizes[context.funcName].size,
- mclass: delimiterSizes[context.funcName].mclass,
- value: delim.value,
- };
- }
- );
-
- defineFunction(
- ["\\left", "\\right"],
- {
- numArgs: 1,
- },
- function (context, args) {
- var delim = checkDelimiter(args[0], context);
-
- // \left and \right are caught somewhere in Parser.js, which is
- // why this data doesn't match what is in buildHTML.
- return {
- type: "leftright",
- value: delim.value,
- };
- }
- );
-
- defineFunction(
- "\\middle",
- {
- numArgs: 1,
- },
- function (context, args) {
- var delim = checkDelimiter(args[0], context);
- if (!context.parser.leftrightDepth) {
- throw new _ParseError2.default("\\middle without preceding \\left", delim);
- }
-
- return {
- type: "middle",
- value: delim.value,
- };
- }
- );
-
- // Sizing functions (handled in Parser.js explicitly, hence no handler)
- defineFunction(
- ["\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"],
- 0,
- null
- );
-
- // Style changing functions (handled in Parser.js explicitly, hence no
- // handler)
- defineFunction(["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], 0, null);
-
- // Old font changing functions
- defineFunction(["\\rm", "\\sf", "\\tt", "\\bf", "\\it"], 0, null);
-
- defineFunction(
- [
- // styles
- "\\mathrm",
- "\\mathit",
- "\\mathbf",
-
- // families
- "\\mathbb",
- "\\mathcal",
- "\\mathfrak",
- "\\mathscr",
- "\\mathsf",
- "\\mathtt",
-
- // aliases
- "\\Bbb",
- "\\bold",
- "\\frak",
- ],
- {
- numArgs: 1,
- greediness: 2,
- },
- function (context, args) {
- var body = args[0];
- var func = context.funcName;
- if (func in fontAliases) {
- func = fontAliases[func];
- }
- return {
- type: "font",
- font: func.slice(1),
- body: body,
- };
- }
- );
-
- // Accents
- defineFunction(
- [
- "\\acute",
- "\\grave",
- "\\ddot",
- "\\tilde",
- "\\bar",
- "\\breve",
- "\\check",
- "\\hat",
- "\\vec",
- "\\dot",
- "\\widehat",
- "\\widetilde",
- "\\overrightarrow",
- "\\overleftarrow",
- "\\Overrightarrow",
- "\\overleftrightarrow",
- "\\overgroup",
- "\\overlinesegment",
- "\\overleftharpoon",
- "\\overrightharpoon",
- ],
- {
- numArgs: 1,
- },
- function (context, args) {
- var base = args[0];
-
- var isStretchy = !_utils2.default.contains(
- ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot"],
- context.funcName
- );
-
- var isShifty = !isStretchy || _utils2.default.contains(["\\widehat", "\\widetilde"], context.funcName);
-
- return {
- type: "accent",
- label: context.funcName,
- isStretchy: isStretchy,
- isShifty: isShifty,
- value: ordargument(base),
- base: base,
- };
- }
- );
-
- // Text-mode accents
- defineFunction(
- ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v"],
- {
- numArgs: 1,
- allowedInText: true,
- allowedInMath: false,
- },
- function (context, args) {
- var base = args[0];
-
- return {
- type: "accent",
- label: context.funcName,
- isStretchy: false,
- isShifty: true,
- value: ordargument(base),
- base: base,
- };
- }
- );
-
- // Horizontal stretchy braces
- defineFunction(
- ["\\overbrace", "\\underbrace"],
- {
- numArgs: 1,
- },
- function (context, args) {
- var base = args[0];
- return {
- type: "horizBrace",
- label: context.funcName,
- isOver: /^\\over/.test(context.funcName),
- base: base,
- };
- }
- );
-
- // Stretchy accents under the body
- defineFunction(
- ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\undertilde"],
- {
- numArgs: 1,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "accentUnder",
- label: context.funcName,
- value: ordargument(body),
- body: body,
- };
- }
- );
-
- // Stretchy arrows with an optional argument
- defineFunction(
- [
- "\\xleftarrow",
- "\\xrightarrow",
- "\\xLeftarrow",
- "\\xRightarrow",
- "\\xleftrightarrow",
- "\\xLeftrightarrow",
- "\\xhookleftarrow",
- "\\xhookrightarrow",
- "\\xmapsto",
- "\\xrightharpoondown",
- "\\xrightharpoonup",
- "\\xleftharpoondown",
- "\\xleftharpoonup",
- "\\xrightleftharpoons",
- "\\xleftrightharpoons",
- "\\xLongequal",
- "\\xtwoheadrightarrow",
- "\\xtwoheadleftarrow",
- "\\xLongequal",
- "\\xtofrom",
- ],
- {
- numArgs: 1,
- numOptionalArgs: 1,
- },
- function (context, args) {
- var below = args[0];
- var body = args[1];
- return {
- type: "xArrow", // x for extensible
- label: context.funcName,
- body: body,
- below: below,
- };
- }
- );
-
- // enclose
- defineFunction(
- ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\fbox"],
- {
- numArgs: 1,
- },
- function (context, args) {
- var body = args[0];
- return {
- type: "enclose",
- label: context.funcName,
- body: body,
- };
- }
- );
-
- // Infix generalized fractions
- defineFunction(
- ["\\over", "\\choose", "\\atop"],
- {
- numArgs: 0,
- infix: true,
- },
- function (context) {
- var replaceWith = void 0;
- switch (context.funcName) {
- case "\\over":
- replaceWith = "\\frac";
- break;
- case "\\choose":
- replaceWith = "\\binom";
- break;
- case "\\atop":
- replaceWith = "\\\\atopfrac";
- break;
- default:
- throw new Error("Unrecognized infix genfrac command");
- }
- return {
- type: "infix",
- replaceWith: replaceWith,
- token: context.token,
- };
- }
- );
-
- // Row breaks for aligned data
- defineFunction(
- ["\\\\", "\\cr"],
- {
- numArgs: 0,
- numOptionalArgs: 1,
- argTypes: ["size"],
- },
- function (context, args) {
- var size = args[0];
- return {
- type: "cr",
- size: size,
- };
- }
- );
-
- // Environment delimiters
- defineFunction(
- ["\\begin", "\\end"],
- {
- numArgs: 1,
- argTypes: ["text"],
- },
- function (context, args) {
- var nameGroup = args[0];
- if (nameGroup.type !== "ordgroup") {
- throw new _ParseError2.default("Invalid environment name", nameGroup);
- }
- var name = "";
- for (var i = 0; i < nameGroup.value.length; ++i) {
- name += nameGroup.value[i].value;
- }
- return {
- type: "environment",
- name: name,
- nameGroup: nameGroup,
- };
- }
- );
- },
- {
- "./ParseError": 29,
- "./ParseNode": 30,
- "./utils": 51,
- },
- ],
- 44: [
- function (require, module, exports) {
- /**
- * Predefined macros for KaTeX.
- * This can be used to define some commands in terms of others.
- */
-
- // This function might one day accept additional argument and do more things.
- function defineMacro(name, body) {
- module.exports[name] = body;
- }
-
- //////////////////////////////////////////////////////////////////////
- // basics
- defineMacro("\\bgroup", "{");
- defineMacro("\\egroup", "}");
- defineMacro("\\begingroup", "{");
- defineMacro("\\endgroup", "}");
-
- // We don't distinguish between math and nonmath kerns.
- // (In TeX, the mu unit works only with \mkern.)
- defineMacro("\\mkern", "\\kern");
-
- //////////////////////////////////////////////////////////////////////
- // amsmath.sty
-
- // \def\overset#1#2{\binrel@{#2}\binrel@@{\mathop{\kern\z@#2}\limits^{#1}}}
- defineMacro("\\overset", "\\mathop{#2}\\limits^{#1}");
- defineMacro("\\underset", "\\mathop{#2}\\limits_{#1}");
-
- // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
- defineMacro("\\boxed", "\\fbox{\\displaystyle{#1}}");
-
- //TODO: When implementing \dots, should ideally add the \DOTSB indicator
- // into the macro, to indicate these are binary operators.
- // \def\iff{\DOTSB\;\Longleftrightarrow\;}
- // \def\implies{\DOTSB\;\Longrightarrow\;}
- // \def\impliedby{\DOTSB\;\Longleftarrow\;}
- defineMacro("\\iff", "\\;\\Longleftrightarrow\\;");
- defineMacro("\\implies", "\\;\\Longrightarrow\\;");
- defineMacro("\\impliedby", "\\;\\Longleftarrow\\;");
-
- //////////////////////////////////////////////////////////////////////
- // mathtools.sty
-
- //\providecommand\ordinarycolon{:}
- defineMacro("\\ordinarycolon", ":");
- //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}}
- //TODO(edemaine): Not yet centered. Fix via \raisebox or #726
- defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}");
- // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon}
- defineMacro("\\dblcolon", "\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon");
- // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=}
- defineMacro("\\coloneqq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}=");
- // \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=}
- defineMacro("\\Coloneqq", "\\dblcolon\\mathrel{\\mkern-1.2mu}=");
- // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
- defineMacro("\\coloneq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}");
- // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
- defineMacro("\\Coloneq", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}");
- // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon}
- defineMacro("\\eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\vcentcolon");
- // \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon}
- defineMacro("\\Eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\dblcolon");
- // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon}
- defineMacro("\\eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon");
- // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon}
- defineMacro("\\Eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon");
- // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx}
- defineMacro("\\colonapprox", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx");
- // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx}
- defineMacro("\\Colonapprox", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx");
- // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim}
- defineMacro("\\colonsim", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim");
- // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim}
- defineMacro("\\Colonsim", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim");
-
- //////////////////////////////////////////////////////////////////////
- // colonequals.sty
-
- // Alternate names for mathtools's macros:
- defineMacro("\\ratio", "\\vcentcolon");
- defineMacro("\\coloncolon", "\\dblcolon");
- defineMacro("\\colonequals", "\\coloneqq");
- defineMacro("\\coloncolonequals", "\\Coloneqq");
- defineMacro("\\equalscolon", "\\eqqcolon");
- defineMacro("\\equalscoloncolon", "\\Eqqcolon");
- defineMacro("\\colonminus", "\\coloneq");
- defineMacro("\\coloncolonminus", "\\Coloneq");
- defineMacro("\\minuscolon", "\\eqcolon");
- defineMacro("\\minuscoloncolon", "\\Eqcolon");
- // \colonapprox name is same in mathtools and colonequals.
- defineMacro("\\coloncolonapprox", "\\Colonapprox");
- // \colonsim name is same in mathtools and colonequals.
- defineMacro("\\coloncolonsim", "\\Colonsim");
-
- // Additional macros, implemented by analogy with mathtools definitions:
- defineMacro("\\simcolon", "\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon");
- defineMacro("\\simcoloncolon", "\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon");
- defineMacro("\\approxcolon", "\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon");
- defineMacro("\\approxcoloncolon", "\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon");
- },
- {},
- ],
- 45: [
- function (require, module, exports) {
- var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- var _createClass2 = require("babel-runtime/helpers/createClass");
-
- var _createClass3 = _interopRequireDefault(_createClass2);
-
- var _utils = require("./utils");
-
- var _utils2 = _interopRequireDefault(_utils);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * This node represents a general purpose MathML node of any type. The
- * constructor requires the type of node to create (for example, `"mo"` or
- * `"mspace"`, corresponding to `` and `` tags).
- */
- var MathNode = (function () {
- function MathNode(type, children) {
- (0, _classCallCheck3.default)(this, MathNode);
-
- this.type = type;
- this.attributes = {};
- this.children = children || [];
- }
-
- /**
- * Sets an attribute on a MathML node. MathML depends on attributes to convey a
- * semantic content, so this is used heavily.
- */
-
- (0, _createClass3.default)(MathNode, [
- {
- key: "setAttribute",
- value: function setAttribute(name, value) {
- this.attributes[name] = value;
- },
-
- /**
- * Converts the math node into a MathML-namespaced DOM element.
- */
- },
- {
- key: "toNode",
- value: function toNode() {
- var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
-
- for (var attr in this.attributes) {
- if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
- node.setAttribute(attr, this.attributes[attr]);
- }
- }
-
- for (var i = 0; i < this.children.length; i++) {
- node.appendChild(this.children[i].toNode());
- }
-
- return node;
- },
-
- /**
- * Converts the math node into an HTML markup string.
- */
- },
- {
- key: "toMarkup",
- value: function toMarkup() {
- var markup = "<" + this.type;
-
- // Add the attributes
- for (var attr in this.attributes) {
- if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
- markup += " " + attr + '="';
- markup += _utils2.default.escape(this.attributes[attr]);
- markup += '"';
- }
- }
-
- markup += ">";
-
- for (var i = 0; i < this.children.length; i++) {
- markup += this.children[i].toMarkup();
- }
-
- markup += "" + this.type + ">";
-
- return markup;
- },
- },
- ]);
- return MathNode;
- })();
-
- /**
- * This node represents a piece of text.
- */
- /**
- * These objects store data about MathML nodes. This is the MathML equivalent
- * of the types in domTree.js. Since MathML handles its own rendering, and
- * since we're mainly using MathML to improve accessibility, we don't manage
- * any of the styling state that the plain DOM nodes do.
- *
- * The `toNode` and `toMarkup` functions work simlarly to how they do in
- * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.
- */
-
- var TextNode = (function () {
- function TextNode(text) {
- (0, _classCallCheck3.default)(this, TextNode);
-
- this.text = text;
- }
-
- /**
- * Converts the text node into a DOM text node.
- */
-
- (0, _createClass3.default)(TextNode, [
- {
- key: "toNode",
- value: function toNode() {
- return document.createTextNode(this.text);
- },
-
- /**
- * Converts the text node into HTML markup (which is just the text itself).
- */
- },
- {
- key: "toMarkup",
- value: function toMarkup() {
- return _utils2.default.escape(this.text);
- },
- },
- ]);
- return TextNode;
- })();
-
- module.exports = {
- MathNode: MathNode,
- TextNode: TextNode,
- };
- },
- {
- "./utils": 51,
- "babel-runtime/helpers/classCallCheck": 4,
- "babel-runtime/helpers/createClass": 5,
- },
- ],
- 46: [
- function (require, module, exports) {
- var _Parser = require("./Parser");
-
- var _Parser2 = _interopRequireDefault(_Parser);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- /**
- * Parses an expression using a Parser, then returns the parsed result.
- */
- var parseTree = function parseTree(toParse, settings) {
- if (!(typeof toParse === "string" || toParse instanceof String)) {
- throw new TypeError("KaTeX can only parse string typed expression");
- }
- var parser = new _Parser2.default(toParse, settings);
-
- return parser.parse();
- }; /**
- * Provides a single function for parsing an expression using a Parser
- * TODO(emily): Remove this
- */
-
- module.exports = parseTree;
- },
- { "./Parser": 31 },
- ],
- 47: [
- function (require, module, exports) {
- /**
- * This file provides support to buildMathML.js and buildHTML.js
- * for stretchy wide elements rendered from SVG files
- * and other CSS trickery.
- */
-
- var buildCommon = require("./buildCommon");
- var mathMLTree = require("./mathMLTree");
- var utils = require("./utils");
-
- var stretchyCodePoint = {
- widehat: "^",
- widetilde: "~",
- undertilde: "~",
- overleftarrow: "\u2190",
- underleftarrow: "\u2190",
- xleftarrow: "\u2190",
- overrightarrow: "\u2192",
- underrightarrow: "\u2192",
- xrightarrow: "\u2192",
- underbrace: "\u23B5",
- overbrace: "\u23DE",
- overleftrightarrow: "\u2194",
- underleftrightarrow: "\u2194",
- xleftrightarrow: "\u2194",
- Overrightarrow: "\u21D2",
- xRightarrow: "\u21D2",
- overleftharpoon: "\u21BC",
- xleftharpoonup: "\u21BC",
- overrightharpoon: "\u21C0",
- xrightharpoonup: "\u21C0",
- xLeftarrow: "\u21D0",
- xLeftrightarrow: "\u21D4",
- xhookleftarrow: "\u21A9",
- xhookrightarrow: "\u21AA",
- xmapsto: "\u21A6",
- xrightharpoondown: "\u21C1",
- xleftharpoondown: "\u21BD",
- xrightleftharpoons: "\u21CC",
- xleftrightharpoons: "\u21CB",
- xtwoheadleftarrow: "\u219E",
- xtwoheadrightarrow: "\u21A0",
- xLongequal: "=",
- xtofrom: "\u21C4",
- };
-
- var mathMLnode = function mathMLnode(label) {
- var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]);
- node.setAttribute("stretchy", "true");
- return node;
- };
-
- // In the katexImagesData object just below, the dimensions all
- // correspond to path geometry inside the relevant SVG.
- // For example, \rightarrow uses the same arrowhead as glyph U+2192
- // from the KaTeX Main font. The scaling factor is 1000.
- // That is, inside the font, that arrowhead is 522 units tall, which
- // corresponds to 0.522 em inside the document.
- // And for extensible arrows, we split that distance around the math axis.
-
- var katexImagesData = {
- // height, depth, imageName, minWidth
- overleftarrow: [0.522, 0, "leftarrow", 0.5],
- underleftarrow: [0.522, 0, "leftarrow", 0.5],
- xleftarrow: [0.261, 0.261, "leftarrow", 0.783],
- overrightarrow: [0.522, 0, "rightarrow", 0.5],
- underrightarrow: [0.522, 0, "rightarrow", 0.5],
- xrightarrow: [0.261, 0.261, "rightarrow", 0.783],
- overbrace: [0.548, 0, "overbrace", 1.6],
- underbrace: [0.548, 0, "underbrace", 1.6],
- overleftrightarrow: [0.522, 0, "leftrightarrow", 0.5],
- underleftrightarrow: [0.522, 0, "leftrightarrow", 0.5],
- xleftrightarrow: [0.261, 0.261, "leftrightarrow", 0.783],
- Overrightarrow: [0.56, 0, "doublerightarrow", 0.5],
- xLeftarrow: [0.28, 0.28, "doubleleftarrow", 0.783],
- xRightarrow: [0.28, 0.28, "doublerightarrow", 0.783],
- xLeftrightarrow: [0.28, 0.28, "doubleleftrightarrow", 0.955],
- overleftharpoon: [0.522, 0, "leftharpoon", 0.5],
- overrightharpoon: [0.522, 0, "rightharpoon", 0.5],
- xleftharpoonup: [0.261, 0.261, "leftharpoon", 0.783],
- xrightharpoonup: [0.261, 0.261, "rightharpoon", 0.783],
- xhookleftarrow: [0.261, 0.261, "hookleftarrow", 0.87],
- xhookrightarrow: [0.261, 0.261, "hookrightarrow", 0.87],
- overlinesegment: [0.414, 0, "linesegment", 0.5],
- underlinesegment: [0.414, 0, "linesegment", 0.5],
- xmapsto: [0.261, 0.261, "mapsto", 0.783],
- xrightharpoondown: [0.261, 0.261, "rightharpoondown", 0.783],
- xleftharpoondown: [0.261, 0.261, "leftharpoondown", 0.783],
- xrightleftharpoons: [0.358, 0.358, "rightleftharpoons", 0.716],
- xleftrightharpoons: [0.358, 0.358, "leftrightharpoons", 0.716],
- overgroup: [0.342, 0, "overgroup", 0.87],
- undergroup: [0.342, 0, "undergroup", 0.87],
- xtwoheadleftarrow: [0.167, 0.167, "twoheadleftarrow", 0.86],
- xtwoheadrightarrow: [0.167, 0.167, "twoheadrightarrow", 0.86],
- xLongequal: [0.167, 0.167, "longequal", 0.5],
- xtofrom: [0.264, 0.264, "tofrom", 0.86],
- };
-
- // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.
- // Copyright (c) 2009-2010, Design Science, Inc. ()
- // Copyright (c) 2014-2017 Khan Academy ()
- // Licensed under the SIL Open Font License, Version 1.1.
- // See \nhttp://scripts.sil.org/OFL
-
- // Nested SVGs
- // Many of the KaTeX SVG images contain a nested SVG. This is done to
- // achieve a stretchy image while avoiding distortion of arrowheads or
- // brace corners.
-
- // The inner SVG typically contains a very long (400 em) arrow.
-
- // The outer SVG acts like a window that exposes only part of the inner SVG.
- // The outer SVG will grow or shrink to match the dimensions set by CSS.
-
- // The inner SVG always has a longer, thinner aspect ratio than the outer
- // SVG. After the inner SVG fills 100% of the height of the outer SVG,
- // there is a long arrow shaft left over. That left-over shaft is not shown.
- // Instead, it is sliced off because the inner SVG is set to
- // "preserveAspectRatio='... slice'".
-
- // Thus, the reader sees an arrow that matches the subject matter width
- // without distortion.
-
- // Some functions, such as \cancel, need to vary their aspect ratio. These
- // functions do not get the nested SVG treatment.
-
- // Second Brush Stroke
- // Low resolution monitors struggle to display images in fine detail.
- // So browsers apply anti-aliasing. A long straight arrow shaft therefore
- // will sometimes appear as if it has a blurred edge.
-
- // To mitigate this, these SVG files contain a second "brush-stroke" on the
- // arrow shafts. That is, a second long thin rectangular SVG path has been
- // written directly on top of each arrow shaft. This reinforcement causes
- // some of the screen pixels to display as black instead of the anti-aliased
- // gray pixel that a single path would generate. So we get arrow shafts
- // whose edges appear to be sharper.
-
- var svgPath = {
- doubleleftarrow:
- " ",
-
- doublerightarrow:
- " ",
-
- leftarrow:
- " ",
-
- rightarrow:
- " ",
- };
-
- var innerSVG = {
- // Since bcancel's SVG is inline and it omits the viewBox attribute,
- // it's stroke-width will not vary with span area.
- bcancel: " ",
-
- cancel: " ",
-
- // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
- doubleleftarrow: ">" + svgPath["doubleleftarrow"] + " ",
-
- // doubleleftrightarrow is from glyph U+21D4 in font KaTeX Main
- doubleleftrightarrow:
- ">" +
- svgPath["doubleleftarrow"] +
- " \n" +
- svgPath["doublerightarrow"] +
- " ",
-
- // doublerightarrow is from glyph U+21D2 in font KaTeX Main
- doublerightarrow: ">" + svgPath["doublerightarrow"] + " ",
-
- // hookleftarrow is from glyph U+21A9 in font KaTeX Main
- hookleftarrow:
- ">" +
- svgPath["leftarrow"] +
- " \n ",
-
- // hookrightarrow is from glyph U+21AA in font KaTeX Main
- hookrightarrow:
- ">" +
- svgPath["rightarrow"] +
- " ",
-
- // leftarrow is from glyph U+2190 in font KaTeX Main
- leftarrow: ">" + svgPath["leftarrow"] + " ",
-
- // leftharpoon is from glyph U+21BD in font KaTeX Main
- leftharpoon:
- "> ",
-
- // leftharpoondown is from glyph U+21BD in font KaTeX Main
- leftharpoondown:
- "> ",
-
- // leftrightarrow is from glyph U+2194 in font KaTeX Main
- leftrightarrow:
- ">" +
- svgPath["leftarrow"] +
- " \n" +
- svgPath["rightarrow"] +
- " ",
-
- // leftrightharpoons is from glyphs U+21BC/21B1 in font KaTeX Main
- leftrightharpoons:
- "> \n ",
-
- linesegment:
- ">\n ",
-
- longequal: " viewBox='0 0 100 334' preserveAspectRatio='none'>\n ",
-
- // mapsto is from glyph U+21A6 in font KaTeX Main
- mapsto:
- ">" +
- svgPath["rightarrow"] +
- " ",
-
- // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
- overbrace:
- "> \n ",
-
- // overgroup is from the MnSymbol package (public domain)
- overgroup:
- "> ",
-
- // rightarrow is from glyph U+2192 in font KaTeX Main
- rightarrow: ">" + svgPath["rightarrow"] + " ",
-
- // rightharpoon is from glyph U+21C0 in font KaTeX Main
- rightharpoon:
- "> ",
-
- // rightharpoondown is from glyph U+21C1 in font KaTeX Main
- rightharpoondown:
- "> ",
-
- // rightleftharpoons is from glyph U+21CC in font KaTeX Main
- rightleftharpoons:
- "> ",
-
- // tilde1 is a modified version of a glyph from the MnSymbol package
- tilde1:
- " viewBox='0 0 600 260' preserveAspectRatio='none'>\n ",
-
- // Ditto tilde2, tilde3, and tilde 4
- tilde2:
- " viewBox='0 0 1033 286' preserveAspectRatio='none'>\n ",
-
- tilde3:
- " viewBox='0 0 2339 306' preserveAspectRatio='none'>\n ",
-
- tilde4:
- " viewBox='0 0 2340 312' preserveAspectRatio='none'>\n ",
-
- // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
- tofrom:
- "> ",
-
- // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
- twoheadleftarrow:
- "> \n ",
-
- // twoheadrightarrow is from glyph U+21A0 in font KaTeX AMS Regular
- twoheadrightarrow:
- "> \n ",
-
- // underbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
- underbrace:
- "> \n ",
-
- // undergroup is from the MnSymbol package (public domain)
- undergroup:
- "> ",
-
- // widehat1 is a modified version of a glyph from the MnSymbol package
- widehat1:
- " viewBox='0 0 1062 239' preserveAspectRatio='none'>\n ",
-
- // Ditto widehat2, widehat3, and widehat4
- widehat2:
- " viewBox='0 0 2364 300' preserveAspectRatio='none'>\n ",
-
- widehat3:
- " viewBox='0 0 2364 360' preserveAspectRatio='none'>\n ",
-
- widehat4:
- " viewBox='0 0 2364 420' preserveAspectRatio='none'>\n ",
-
- xcancel:
- " \n ",
- };
-
- var svgSpan = function svgSpan(group, options) {
- // Create a span with inline SVG for the element.
- var label = group.value.label.substr(1);
- var height = 0;
- var depth = 0;
- var imageName = "";
- var minWidth = 0;
-
- if (utils.contains(["widehat", "widetilde", "undertilde"], label)) {
- // There are four SVG images available for each function.
- // Choose a taller image when there are more characters.
- var numChars = group.value.value.length;
- if (numChars > 5) {
- height = 0.312;
- imageName = (label === "widehat" ? "widehat" : "tilde") + "4";
- } else {
- var imgIndex = [1, 1, 2, 2, 3, 3][numChars];
- if (label === "widehat") {
- height = [0, 0.24, 0.3, 0.3, 0.36, 0.36][numChars];
- imageName = "widehat" + imgIndex;
- } else {
- height = [0, 0.26, 0.3, 0.3, 0.34, 0.34][numChars];
- imageName = "tilde" + imgIndex;
- }
- }
- } else {
- var imgData = katexImagesData[label];
- height = imgData[0];
- depth = imgData[1];
- imageName = imgData[2];
- minWidth = imgData[3];
- }
-
- var span = buildCommon.makeSpan([], [], options);
- span.height = height;
- span.depth = depth;
- var totalHeight = height + depth;
- span.style.height = totalHeight + "em";
- if (minWidth > 0) {
- span.style.minWidth = minWidth + "em";
- }
-
- span.innerHTML = "";
-
- return span;
- };
-
- var encloseSpan = function encloseSpan(inner, label, pad, options) {
- // Return an image span for \cancel, \bcancel, \xcancel, or \fbox
- var img = void 0;
- var totalHeight = inner.height + inner.depth + 2 * pad;
-
- if (label === "fbox") {
- img = buildCommon.makeSpan(["stretchy", label], [], options);
- if (options.color) {
- img.style.borderColor = options.getColor();
- }
- } else {
- img = buildCommon.makeSpan([], [], options);
- img.innerHTML = "" + innerSVG[label] + " ";
- }
-
- img.height = totalHeight;
- img.style.height = totalHeight + "em";
-
- return img;
- };
-
- module.exports = {
- encloseSpan: encloseSpan,
- mathMLnode: mathMLnode,
- svgSpan: svgSpan,
- };
- },
- {
- "./buildCommon": 34,
- "./mathMLTree": 45,
- "./utils": 51,
- },
- ],
- 48: [
- function (require, module, exports) {
- /**
- * This file holds a list of all no-argument functions and single-character
- * symbols (like 'a' or ';').
- *
- * For each of the symbols, there are three properties they can have:
- * - font (required): the font to be used for this symbol. Either "main" (the
- normal font), or "ams" (the ams fonts).
- * - group (required): the ParseNode group type the symbol should have (i.e.
- "textord", "mathord", etc).
- See https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types
- * - replace: the character that this symbol or function should be
- * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi
- * character in the main font).
- *
- * The outermost map in the table indicates what mode the symbols should be
- * accepted in (e.g. "math" or "text").
- */
-
- module.exports = {
- math: {},
- text: {},
- };
-
- function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {
- module.exports[mode][name] = {
- font: font,
- group: group,
- replace: replace,
- };
-
- if (acceptUnicodeChar) {
- module.exports[mode][replace] = module.exports[mode][name];
- }
- }
-
- // Some abbreviations for commonly used strings.
- // This helps minify the code, and also spotting typos using jshint.
-
- // modes:
- var math = "math";
- var text = "text";
-
- // fonts:
- var main = "main";
- var ams = "ams";
-
- // groups:
- var accent = "accent";
- var bin = "bin";
- var close = "close";
- var inner = "inner";
- var mathord = "mathord";
- var op = "op";
- var open = "open";
- var punct = "punct";
- var rel = "rel";
- var spacing = "spacing";
- var textord = "textord";
-
- // Now comes the symbol table
-
- // Relation Symbols
- defineSymbol(math, main, rel, "\u2261", "\\equiv");
- defineSymbol(math, main, rel, "\u227A", "\\prec");
- defineSymbol(math, main, rel, "\u227B", "\\succ");
- defineSymbol(math, main, rel, "\u223C", "\\sim");
- defineSymbol(math, main, rel, "\u22A5", "\\perp");
- defineSymbol(math, main, rel, "\u2AAF", "\\preceq");
- defineSymbol(math, main, rel, "\u2AB0", "\\succeq");
- defineSymbol(math, main, rel, "\u2243", "\\simeq");
- defineSymbol(math, main, rel, "\u2223", "\\mid");
- defineSymbol(math, main, rel, "\u226A", "\\ll");
- defineSymbol(math, main, rel, "\u226B", "\\gg");
- defineSymbol(math, main, rel, "\u224D", "\\asymp");
- defineSymbol(math, main, rel, "\u2225", "\\parallel");
- defineSymbol(math, main, rel, "\u22C8", "\\bowtie");
- defineSymbol(math, main, rel, "\u2323", "\\smile");
- defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq");
- defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq");
- defineSymbol(math, main, rel, "\u2250", "\\doteq");
- defineSymbol(math, main, rel, "\u2322", "\\frown");
- defineSymbol(math, main, rel, "\u220B", "\\ni");
- defineSymbol(math, main, rel, "\u221D", "\\propto");
- defineSymbol(math, main, rel, "\u22A2", "\\vdash");
- defineSymbol(math, main, rel, "\u22A3", "\\dashv");
- defineSymbol(math, main, rel, "\u220B", "\\owns");
-
- // Punctuation
- defineSymbol(math, main, punct, ".", "\\ldotp");
- defineSymbol(math, main, punct, "\u22C5", "\\cdotp");
-
- // Misc Symbols
- defineSymbol(math, main, textord, "#", "\\#");
- defineSymbol(text, main, textord, "#", "\\#");
- defineSymbol(math, main, textord, "&", "\\&");
- defineSymbol(text, main, textord, "&", "\\&");
- defineSymbol(math, main, textord, "\u2135", "\\aleph");
- defineSymbol(math, main, textord, "\u2200", "\\forall");
- defineSymbol(math, main, textord, "\u210F", "\\hbar");
- defineSymbol(math, main, textord, "\u2203", "\\exists");
- defineSymbol(math, main, textord, "\u2207", "\\nabla");
- defineSymbol(math, main, textord, "\u266D", "\\flat");
- defineSymbol(math, main, textord, "\u2113", "\\ell");
- defineSymbol(math, main, textord, "\u266E", "\\natural");
- defineSymbol(math, main, textord, "\u2663", "\\clubsuit");
- defineSymbol(math, main, textord, "\u2118", "\\wp");
- defineSymbol(math, main, textord, "\u266F", "\\sharp");
- defineSymbol(math, main, textord, "\u2662", "\\diamondsuit");
- defineSymbol(math, main, textord, "\u211C", "\\Re");
- defineSymbol(math, main, textord, "\u2661", "\\heartsuit");
- defineSymbol(math, main, textord, "\u2111", "\\Im");
- defineSymbol(math, main, textord, "\u2660", "\\spadesuit");
-
- // Math and Text
- defineSymbol(math, main, textord, "\u2020", "\\dag");
- defineSymbol(text, main, textord, "\u2020", "\\dag");
- defineSymbol(text, main, textord, "\u2020", "\\textdagger");
- defineSymbol(math, main, textord, "\u2021", "\\ddag");
- defineSymbol(text, main, textord, "\u2021", "\\ddag");
- defineSymbol(text, main, textord, "\u2020", "\\textdaggerdbl");
-
- // Large Delimiters
- defineSymbol(math, main, close, "\u23B1", "\\rmoustache");
- defineSymbol(math, main, open, "\u23B0", "\\lmoustache");
- defineSymbol(math, main, close, "\u27EF", "\\rgroup");
- defineSymbol(math, main, open, "\u27EE", "\\lgroup");
-
- // Binary Operators
- defineSymbol(math, main, bin, "\u2213", "\\mp");
- defineSymbol(math, main, bin, "\u2296", "\\ominus");
- defineSymbol(math, main, bin, "\u228E", "\\uplus");
- defineSymbol(math, main, bin, "\u2293", "\\sqcap");
- defineSymbol(math, main, bin, "\u2217", "\\ast");
- defineSymbol(math, main, bin, "\u2294", "\\sqcup");
- defineSymbol(math, main, bin, "\u25EF", "\\bigcirc");
- defineSymbol(math, main, bin, "\u2219", "\\bullet");
- defineSymbol(math, main, bin, "\u2021", "\\ddagger");
- defineSymbol(math, main, bin, "\u2240", "\\wr");
- defineSymbol(math, main, bin, "\u2A3F", "\\amalg");
-
- // Arrow Symbols
- defineSymbol(math, main, rel, "\u27F5", "\\longleftarrow");
- defineSymbol(math, main, rel, "\u21D0", "\\Leftarrow");
- defineSymbol(math, main, rel, "\u27F8", "\\Longleftarrow");
- defineSymbol(math, main, rel, "\u27F6", "\\longrightarrow");
- defineSymbol(math, main, rel, "\u21D2", "\\Rightarrow");
- defineSymbol(math, main, rel, "\u27F9", "\\Longrightarrow");
- defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow");
- defineSymbol(math, main, rel, "\u27F7", "\\longleftrightarrow");
- defineSymbol(math, main, rel, "\u21D4", "\\Leftrightarrow");
- defineSymbol(math, main, rel, "\u27FA", "\\Longleftrightarrow");
- defineSymbol(math, main, rel, "\u21A6", "\\mapsto");
- defineSymbol(math, main, rel, "\u27FC", "\\longmapsto");
- defineSymbol(math, main, rel, "\u2197", "\\nearrow");
- defineSymbol(math, main, rel, "\u21A9", "\\hookleftarrow");
- defineSymbol(math, main, rel, "\u21AA", "\\hookrightarrow");
- defineSymbol(math, main, rel, "\u2198", "\\searrow");
- defineSymbol(math, main, rel, "\u21BC", "\\leftharpoonup");
- defineSymbol(math, main, rel, "\u21C0", "\\rightharpoonup");
- defineSymbol(math, main, rel, "\u2199", "\\swarrow");
- defineSymbol(math, main, rel, "\u21BD", "\\leftharpoondown");
- defineSymbol(math, main, rel, "\u21C1", "\\rightharpoondown");
- defineSymbol(math, main, rel, "\u2196", "\\nwarrow");
- defineSymbol(math, main, rel, "\u21CC", "\\rightleftharpoons");
-
- // AMS Negated Binary Relations
- defineSymbol(math, ams, rel, "\u226E", "\\nless");
- defineSymbol(math, ams, rel, "\uE010", "\\nleqslant");
- defineSymbol(math, ams, rel, "\uE011", "\\nleqq");
- defineSymbol(math, ams, rel, "\u2A87", "\\lneq");
- defineSymbol(math, ams, rel, "\u2268", "\\lneqq");
- defineSymbol(math, ams, rel, "\uE00C", "\\lvertneqq");
- defineSymbol(math, ams, rel, "\u22E6", "\\lnsim");
- defineSymbol(math, ams, rel, "\u2A89", "\\lnapprox");
- defineSymbol(math, ams, rel, "\u2280", "\\nprec");
- defineSymbol(math, ams, rel, "\u22E0", "\\npreceq");
- defineSymbol(math, ams, rel, "\u22E8", "\\precnsim");
- defineSymbol(math, ams, rel, "\u2AB9", "\\precnapprox");
- defineSymbol(math, ams, rel, "\u2241", "\\nsim");
- defineSymbol(math, ams, rel, "\uE006", "\\nshortmid");
- defineSymbol(math, ams, rel, "\u2224", "\\nmid");
- defineSymbol(math, ams, rel, "\u22AC", "\\nvdash");
- defineSymbol(math, ams, rel, "\u22AD", "\\nvDash");
- defineSymbol(math, ams, rel, "\u22EA", "\\ntriangleleft");
- defineSymbol(math, ams, rel, "\u22EC", "\\ntrianglelefteq");
- defineSymbol(math, ams, rel, "\u228A", "\\subsetneq");
- defineSymbol(math, ams, rel, "\uE01A", "\\varsubsetneq");
- defineSymbol(math, ams, rel, "\u2ACB", "\\subsetneqq");
- defineSymbol(math, ams, rel, "\uE017", "\\varsubsetneqq");
- defineSymbol(math, ams, rel, "\u226F", "\\ngtr");
- defineSymbol(math, ams, rel, "\uE00F", "\\ngeqslant");
- defineSymbol(math, ams, rel, "\uE00E", "\\ngeqq");
- defineSymbol(math, ams, rel, "\u2A88", "\\gneq");
- defineSymbol(math, ams, rel, "\u2269", "\\gneqq");
- defineSymbol(math, ams, rel, "\uE00D", "\\gvertneqq");
- defineSymbol(math, ams, rel, "\u22E7", "\\gnsim");
- defineSymbol(math, ams, rel, "\u2A8A", "\\gnapprox");
- defineSymbol(math, ams, rel, "\u2281", "\\nsucc");
- defineSymbol(math, ams, rel, "\u22E1", "\\nsucceq");
- defineSymbol(math, ams, rel, "\u22E9", "\\succnsim");
- defineSymbol(math, ams, rel, "\u2ABA", "\\succnapprox");
- defineSymbol(math, ams, rel, "\u2246", "\\ncong");
- defineSymbol(math, ams, rel, "\uE007", "\\nshortparallel");
- defineSymbol(math, ams, rel, "\u2226", "\\nparallel");
- defineSymbol(math, ams, rel, "\u22AF", "\\nVDash");
- defineSymbol(math, ams, rel, "\u22EB", "\\ntriangleright");
- defineSymbol(math, ams, rel, "\u22ED", "\\ntrianglerighteq");
- defineSymbol(math, ams, rel, "\uE018", "\\nsupseteqq");
- defineSymbol(math, ams, rel, "\u228B", "\\supsetneq");
- defineSymbol(math, ams, rel, "\uE01B", "\\varsupsetneq");
- defineSymbol(math, ams, rel, "\u2ACC", "\\supsetneqq");
- defineSymbol(math, ams, rel, "\uE019", "\\varsupsetneqq");
- defineSymbol(math, ams, rel, "\u22AE", "\\nVdash");
- defineSymbol(math, ams, rel, "\u2AB5", "\\precneqq");
- defineSymbol(math, ams, rel, "\u2AB6", "\\succneqq");
- defineSymbol(math, ams, rel, "\uE016", "\\nsubseteqq");
- defineSymbol(math, ams, bin, "\u22B4", "\\unlhd");
- defineSymbol(math, ams, bin, "\u22B5", "\\unrhd");
-
- // AMS Negated Arrows
- defineSymbol(math, ams, rel, "\u219A", "\\nleftarrow");
- defineSymbol(math, ams, rel, "\u219B", "\\nrightarrow");
- defineSymbol(math, ams, rel, "\u21CD", "\\nLeftarrow");
- defineSymbol(math, ams, rel, "\u21CF", "\\nRightarrow");
- defineSymbol(math, ams, rel, "\u21AE", "\\nleftrightarrow");
- defineSymbol(math, ams, rel, "\u21CE", "\\nLeftrightarrow");
-
- // AMS Misc
- defineSymbol(math, ams, rel, "\u25B3", "\\vartriangle");
- defineSymbol(math, ams, textord, "\u210F", "\\hslash");
- defineSymbol(math, ams, textord, "\u25BD", "\\triangledown");
- defineSymbol(math, ams, textord, "\u25CA", "\\lozenge");
- defineSymbol(math, ams, textord, "\u24C8", "\\circledS");
- defineSymbol(math, ams, textord, "\xAE", "\\circledR");
- defineSymbol(text, ams, textord, "\xAE", "\\circledR");
- defineSymbol(math, ams, textord, "\u2221", "\\measuredangle");
- defineSymbol(math, ams, textord, "\u2204", "\\nexists");
- defineSymbol(math, ams, textord, "\u2127", "\\mho");
- defineSymbol(math, ams, textord, "\u2132", "\\Finv");
- defineSymbol(math, ams, textord, "\u2141", "\\Game");
- defineSymbol(math, ams, textord, "k", "\\Bbbk");
- defineSymbol(math, ams, textord, "\u2035", "\\backprime");
- defineSymbol(math, ams, textord, "\u25B2", "\\blacktriangle");
- defineSymbol(math, ams, textord, "\u25BC", "\\blacktriangledown");
- defineSymbol(math, ams, textord, "\u25A0", "\\blacksquare");
- defineSymbol(math, ams, textord, "\u29EB", "\\blacklozenge");
- defineSymbol(math, ams, textord, "\u2605", "\\bigstar");
- defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle");
- defineSymbol(math, ams, textord, "\u2201", "\\complement");
- defineSymbol(math, ams, textord, "\xF0", "\\eth");
- defineSymbol(math, ams, textord, "\u2571", "\\diagup");
- defineSymbol(math, ams, textord, "\u2572", "\\diagdown");
- defineSymbol(math, ams, textord, "\u25A1", "\\square");
- defineSymbol(math, ams, textord, "\u25A1", "\\Box");
- defineSymbol(math, ams, textord, "\u25CA", "\\Diamond");
- defineSymbol(math, ams, textord, "\xA5", "\\yen");
- defineSymbol(math, ams, textord, "\u2713", "\\checkmark");
- defineSymbol(text, ams, textord, "\u2713", "\\checkmark");
-
- // AMS Hebrew
- defineSymbol(math, ams, textord, "\u2136", "\\beth");
- defineSymbol(math, ams, textord, "\u2138", "\\daleth");
- defineSymbol(math, ams, textord, "\u2137", "\\gimel");
-
- // AMS Greek
- defineSymbol(math, ams, textord, "\u03DD", "\\digamma");
- defineSymbol(math, ams, textord, "\u03F0", "\\varkappa");
-
- // AMS Delimiters
- defineSymbol(math, ams, open, "\u250C", "\\ulcorner");
- defineSymbol(math, ams, close, "\u2510", "\\urcorner");
- defineSymbol(math, ams, open, "\u2514", "\\llcorner");
- defineSymbol(math, ams, close, "\u2518", "\\lrcorner");
-
- // AMS Binary Relations
- defineSymbol(math, ams, rel, "\u2266", "\\leqq");
- defineSymbol(math, ams, rel, "\u2A7D", "\\leqslant");
- defineSymbol(math, ams, rel, "\u2A95", "\\eqslantless");
- defineSymbol(math, ams, rel, "\u2272", "\\lesssim");
- defineSymbol(math, ams, rel, "\u2A85", "\\lessapprox");
- defineSymbol(math, ams, rel, "\u224A", "\\approxeq");
- defineSymbol(math, ams, bin, "\u22D6", "\\lessdot");
- defineSymbol(math, ams, rel, "\u22D8", "\\lll");
- defineSymbol(math, ams, rel, "\u2276", "\\lessgtr");
- defineSymbol(math, ams, rel, "\u22DA", "\\lesseqgtr");
- defineSymbol(math, ams, rel, "\u2A8B", "\\lesseqqgtr");
- defineSymbol(math, ams, rel, "\u2251", "\\doteqdot");
- defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq");
- defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq");
- defineSymbol(math, ams, rel, "\u223D", "\\backsim");
- defineSymbol(math, ams, rel, "\u22CD", "\\backsimeq");
- defineSymbol(math, ams, rel, "\u2AC5", "\\subseteqq");
- defineSymbol(math, ams, rel, "\u22D0", "\\Subset");
- defineSymbol(math, ams, rel, "\u228F", "\\sqsubset");
- defineSymbol(math, ams, rel, "\u227C", "\\preccurlyeq");
- defineSymbol(math, ams, rel, "\u22DE", "\\curlyeqprec");
- defineSymbol(math, ams, rel, "\u227E", "\\precsim");
- defineSymbol(math, ams, rel, "\u2AB7", "\\precapprox");
- defineSymbol(math, ams, rel, "\u22B2", "\\vartriangleleft");
- defineSymbol(math, ams, rel, "\u22B4", "\\trianglelefteq");
- defineSymbol(math, ams, rel, "\u22A8", "\\vDash");
- defineSymbol(math, ams, rel, "\u22AA", "\\Vvdash");
- defineSymbol(math, ams, rel, "\u2323", "\\smallsmile");
- defineSymbol(math, ams, rel, "\u2322", "\\smallfrown");
- defineSymbol(math, ams, rel, "\u224F", "\\bumpeq");
- defineSymbol(math, ams, rel, "\u224E", "\\Bumpeq");
- defineSymbol(math, ams, rel, "\u2267", "\\geqq");
- defineSymbol(math, ams, rel, "\u2A7E", "\\geqslant");
- defineSymbol(math, ams, rel, "\u2A96", "\\eqslantgtr");
- defineSymbol(math, ams, rel, "\u2273", "\\gtrsim");
- defineSymbol(math, ams, rel, "\u2A86", "\\gtrapprox");
- defineSymbol(math, ams, bin, "\u22D7", "\\gtrdot");
- defineSymbol(math, ams, rel, "\u22D9", "\\ggg");
- defineSymbol(math, ams, rel, "\u2277", "\\gtrless");
- defineSymbol(math, ams, rel, "\u22DB", "\\gtreqless");
- defineSymbol(math, ams, rel, "\u2A8C", "\\gtreqqless");
- defineSymbol(math, ams, rel, "\u2256", "\\eqcirc");
- defineSymbol(math, ams, rel, "\u2257", "\\circeq");
- defineSymbol(math, ams, rel, "\u225C", "\\triangleq");
- defineSymbol(math, ams, rel, "\u223C", "\\thicksim");
- defineSymbol(math, ams, rel, "\u2248", "\\thickapprox");
- defineSymbol(math, ams, rel, "\u2AC6", "\\supseteqq");
- defineSymbol(math, ams, rel, "\u22D1", "\\Supset");
- defineSymbol(math, ams, rel, "\u2290", "\\sqsupset");
- defineSymbol(math, ams, rel, "\u227D", "\\succcurlyeq");
- defineSymbol(math, ams, rel, "\u22DF", "\\curlyeqsucc");
- defineSymbol(math, ams, rel, "\u227F", "\\succsim");
- defineSymbol(math, ams, rel, "\u2AB8", "\\succapprox");
- defineSymbol(math, ams, rel, "\u22B3", "\\vartriangleright");
- defineSymbol(math, ams, rel, "\u22B5", "\\trianglerighteq");
- defineSymbol(math, ams, rel, "\u22A9", "\\Vdash");
- defineSymbol(math, ams, rel, "\u2223", "\\shortmid");
- defineSymbol(math, ams, rel, "\u2225", "\\shortparallel");
- defineSymbol(math, ams, rel, "\u226C", "\\between");
- defineSymbol(math, ams, rel, "\u22D4", "\\pitchfork");
- defineSymbol(math, ams, rel, "\u221D", "\\varpropto");
- defineSymbol(math, ams, rel, "\u25C0", "\\blacktriangleleft");
- defineSymbol(math, ams, rel, "\u2234", "\\therefore");
- defineSymbol(math, ams, rel, "\u220D", "\\backepsilon");
- defineSymbol(math, ams, rel, "\u25B6", "\\blacktriangleright");
- defineSymbol(math, ams, rel, "\u2235", "\\because");
- defineSymbol(math, ams, rel, "\u22D8", "\\llless");
- defineSymbol(math, ams, rel, "\u22D9", "\\gggtr");
- defineSymbol(math, ams, bin, "\u22B2", "\\lhd");
- defineSymbol(math, ams, bin, "\u22B3", "\\rhd");
- defineSymbol(math, ams, rel, "\u2242", "\\eqsim");
- defineSymbol(math, main, rel, "\u22C8", "\\Join");
- defineSymbol(math, ams, rel, "\u2251", "\\Doteq");
-
- // AMS Binary Operators
- defineSymbol(math, ams, bin, "\u2214", "\\dotplus");
- defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus");
- defineSymbol(math, ams, bin, "\u22D2", "\\Cap");
- defineSymbol(math, ams, bin, "\u22D3", "\\Cup");
- defineSymbol(math, ams, bin, "\u2A5E", "\\doublebarwedge");
- defineSymbol(math, ams, bin, "\u229F", "\\boxminus");
- defineSymbol(math, ams, bin, "\u229E", "\\boxplus");
- defineSymbol(math, ams, bin, "\u22C7", "\\divideontimes");
- defineSymbol(math, ams, bin, "\u22C9", "\\ltimes");
- defineSymbol(math, ams, bin, "\u22CA", "\\rtimes");
- defineSymbol(math, ams, bin, "\u22CB", "\\leftthreetimes");
- defineSymbol(math, ams, bin, "\u22CC", "\\rightthreetimes");
- defineSymbol(math, ams, bin, "\u22CF", "\\curlywedge");
- defineSymbol(math, ams, bin, "\u22CE", "\\curlyvee");
- defineSymbol(math, ams, bin, "\u229D", "\\circleddash");
- defineSymbol(math, ams, bin, "\u229B", "\\circledast");
- defineSymbol(math, ams, bin, "\u22C5", "\\centerdot");
- defineSymbol(math, ams, bin, "\u22BA", "\\intercal");
- defineSymbol(math, ams, bin, "\u22D2", "\\doublecap");
- defineSymbol(math, ams, bin, "\u22D3", "\\doublecup");
- defineSymbol(math, ams, bin, "\u22A0", "\\boxtimes");
-
- // AMS Arrows
- defineSymbol(math, ams, rel, "\u21E2", "\\dashrightarrow");
- defineSymbol(math, ams, rel, "\u21E0", "\\dashleftarrow");
- defineSymbol(math, ams, rel, "\u21C7", "\\leftleftarrows");
- defineSymbol(math, ams, rel, "\u21C6", "\\leftrightarrows");
- defineSymbol(math, ams, rel, "\u21DA", "\\Lleftarrow");
- defineSymbol(math, ams, rel, "\u219E", "\\twoheadleftarrow");
- defineSymbol(math, ams, rel, "\u21A2", "\\leftarrowtail");
- defineSymbol(math, ams, rel, "\u21AB", "\\looparrowleft");
- defineSymbol(math, ams, rel, "\u21CB", "\\leftrightharpoons");
- defineSymbol(math, ams, rel, "\u21B6", "\\curvearrowleft");
- defineSymbol(math, ams, rel, "\u21BA", "\\circlearrowleft");
- defineSymbol(math, ams, rel, "\u21B0", "\\Lsh");
- defineSymbol(math, ams, rel, "\u21C8", "\\upuparrows");
- defineSymbol(math, ams, rel, "\u21BF", "\\upharpoonleft");
- defineSymbol(math, ams, rel, "\u21C3", "\\downharpoonleft");
- defineSymbol(math, ams, rel, "\u22B8", "\\multimap");
- defineSymbol(math, ams, rel, "\u21AD", "\\leftrightsquigarrow");
- defineSymbol(math, ams, rel, "\u21C9", "\\rightrightarrows");
- defineSymbol(math, ams, rel, "\u21C4", "\\rightleftarrows");
- defineSymbol(math, ams, rel, "\u21A0", "\\twoheadrightarrow");
- defineSymbol(math, ams, rel, "\u21A3", "\\rightarrowtail");
- defineSymbol(math, ams, rel, "\u21AC", "\\looparrowright");
- defineSymbol(math, ams, rel, "\u21B7", "\\curvearrowright");
- defineSymbol(math, ams, rel, "\u21BB", "\\circlearrowright");
- defineSymbol(math, ams, rel, "\u21B1", "\\Rsh");
- defineSymbol(math, ams, rel, "\u21CA", "\\downdownarrows");
- defineSymbol(math, ams, rel, "\u21BE", "\\upharpoonright");
- defineSymbol(math, ams, rel, "\u21C2", "\\downharpoonright");
- defineSymbol(math, ams, rel, "\u21DD", "\\rightsquigarrow");
- defineSymbol(math, ams, rel, "\u21DD", "\\leadsto");
- defineSymbol(math, ams, rel, "\u21DB", "\\Rrightarrow");
- defineSymbol(math, ams, rel, "\u21BE", "\\restriction");
-
- defineSymbol(math, main, textord, "\u2018", "`");
- defineSymbol(math, main, textord, "$", "\\$");
- defineSymbol(text, main, textord, "$", "\\$");
- defineSymbol(text, main, textord, "$", "\\textdollar");
- defineSymbol(math, main, textord, "%", "\\%");
- defineSymbol(text, main, textord, "%", "\\%");
- defineSymbol(math, main, textord, "_", "\\_");
- defineSymbol(text, main, textord, "_", "\\_");
- defineSymbol(text, main, textord, "_", "\\textunderscore");
- defineSymbol(math, main, textord, "\u2220", "\\angle");
- defineSymbol(math, main, textord, "\u221E", "\\infty");
- defineSymbol(math, main, textord, "\u2032", "\\prime");
- defineSymbol(math, main, textord, "\u25B3", "\\triangle");
- defineSymbol(math, main, textord, "\u0393", "\\Gamma", true);
- defineSymbol(math, main, textord, "\u0394", "\\Delta", true);
- defineSymbol(math, main, textord, "\u0398", "\\Theta", true);
- defineSymbol(math, main, textord, "\u039B", "\\Lambda", true);
- defineSymbol(math, main, textord, "\u039E", "\\Xi", true);
- defineSymbol(math, main, textord, "\u03A0", "\\Pi", true);
- defineSymbol(math, main, textord, "\u03A3", "\\Sigma", true);
- defineSymbol(math, main, textord, "\u03A5", "\\Upsilon", true);
- defineSymbol(math, main, textord, "\u03A6", "\\Phi", true);
- defineSymbol(math, main, textord, "\u03A8", "\\Psi", true);
- defineSymbol(math, main, textord, "\u03A9", "\\Omega", true);
- defineSymbol(math, main, textord, "\xAC", "\\neg");
- defineSymbol(math, main, textord, "\xAC", "\\lnot");
- defineSymbol(math, main, textord, "\u22A4", "\\top");
- defineSymbol(math, main, textord, "\u22A5", "\\bot");
- defineSymbol(math, main, textord, "\u2205", "\\emptyset");
- defineSymbol(math, ams, textord, "\u2205", "\\varnothing");
- defineSymbol(math, main, mathord, "\u03B1", "\\alpha", true);
- defineSymbol(math, main, mathord, "\u03B2", "\\beta", true);
- defineSymbol(math, main, mathord, "\u03B3", "\\gamma", true);
- defineSymbol(math, main, mathord, "\u03B4", "\\delta", true);
- defineSymbol(math, main, mathord, "\u03F5", "\\epsilon", true);
- defineSymbol(math, main, mathord, "\u03B6", "\\zeta", true);
- defineSymbol(math, main, mathord, "\u03B7", "\\eta", true);
- defineSymbol(math, main, mathord, "\u03B8", "\\theta", true);
- defineSymbol(math, main, mathord, "\u03B9", "\\iota", true);
- defineSymbol(math, main, mathord, "\u03BA", "\\kappa", true);
- defineSymbol(math, main, mathord, "\u03BB", "\\lambda", true);
- defineSymbol(math, main, mathord, "\u03BC", "\\mu", true);
- defineSymbol(math, main, mathord, "\u03BD", "\\nu", true);
- defineSymbol(math, main, mathord, "\u03BE", "\\xi", true);
- defineSymbol(math, main, mathord, "\u03BF", "\\omicron", true);
- defineSymbol(math, main, mathord, "\u03C0", "\\pi", true);
- defineSymbol(math, main, mathord, "\u03C1", "\\rho", true);
- defineSymbol(math, main, mathord, "\u03C3", "\\sigma", true);
- defineSymbol(math, main, mathord, "\u03C4", "\\tau", true);
- defineSymbol(math, main, mathord, "\u03C5", "\\upsilon", true);
- defineSymbol(math, main, mathord, "\u03D5", "\\phi", true);
- defineSymbol(math, main, mathord, "\u03C7", "\\chi", true);
- defineSymbol(math, main, mathord, "\u03C8", "\\psi", true);
- defineSymbol(math, main, mathord, "\u03C9", "\\omega", true);
- defineSymbol(math, main, mathord, "\u03B5", "\\varepsilon", true);
- defineSymbol(math, main, mathord, "\u03D1", "\\vartheta", true);
- defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true);
- defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true);
- defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true);
- defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true);
- defineSymbol(math, main, bin, "\u2217", "*");
- defineSymbol(math, main, bin, "+", "+");
- defineSymbol(math, main, bin, "\u2212", "-");
- defineSymbol(math, main, bin, "\u22C5", "\\cdot");
- defineSymbol(math, main, bin, "\u2218", "\\circ");
- defineSymbol(math, main, bin, "\xF7", "\\div");
- defineSymbol(math, main, bin, "\xB1", "\\pm");
- defineSymbol(math, main, bin, "\xD7", "\\times");
- defineSymbol(math, main, bin, "\u2229", "\\cap");
- defineSymbol(math, main, bin, "\u222A", "\\cup");
- defineSymbol(math, main, bin, "\u2216", "\\setminus");
- defineSymbol(math, main, bin, "\u2227", "\\land");
- defineSymbol(math, main, bin, "\u2228", "\\lor");
- defineSymbol(math, main, bin, "\u2227", "\\wedge");
- defineSymbol(math, main, bin, "\u2228", "\\vee");
- defineSymbol(math, main, textord, "\u221A", "\\surd");
- defineSymbol(math, main, open, "(", "(");
- defineSymbol(math, main, open, "[", "[");
- defineSymbol(math, main, open, "\u27E8", "\\langle");
- defineSymbol(math, main, open, "\u2223", "\\lvert");
- defineSymbol(math, main, open, "\u2225", "\\lVert");
- defineSymbol(math, main, close, ")", ")");
- defineSymbol(math, main, close, "]", "]");
- defineSymbol(math, main, close, "?", "?");
- defineSymbol(math, main, close, "!", "!");
- defineSymbol(math, main, close, "\u27E9", "\\rangle");
- defineSymbol(math, main, close, "\u2223", "\\rvert");
- defineSymbol(math, main, close, "\u2225", "\\rVert");
- defineSymbol(math, main, rel, "=", "=");
- defineSymbol(math, main, rel, "<", "<");
- defineSymbol(math, main, rel, ">", ">");
- defineSymbol(math, main, rel, ":", ":");
- defineSymbol(math, main, rel, "\u2248", "\\approx");
- defineSymbol(math, main, rel, "\u2245", "\\cong");
- defineSymbol(math, main, rel, "\u2265", "\\ge");
- defineSymbol(math, main, rel, "\u2265", "\\geq");
- defineSymbol(math, main, rel, "\u2190", "\\gets");
- defineSymbol(math, main, rel, ">", "\\gt");
- defineSymbol(math, main, rel, "\u2208", "\\in");
- defineSymbol(math, main, rel, "\u2209", "\\notin");
- defineSymbol(math, main, rel, "\u0338", "\\not");
- defineSymbol(math, main, rel, "\u2282", "\\subset");
- defineSymbol(math, main, rel, "\u2283", "\\supset");
- defineSymbol(math, main, rel, "\u2286", "\\subseteq");
- defineSymbol(math, main, rel, "\u2287", "\\supseteq");
- defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq");
- defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq");
- defineSymbol(math, main, rel, "\u22A8", "\\models");
- defineSymbol(math, main, rel, "\u2190", "\\leftarrow");
- defineSymbol(math, main, rel, "\u2264", "\\le");
- defineSymbol(math, main, rel, "\u2264", "\\leq");
- defineSymbol(math, main, rel, "<", "\\lt");
- defineSymbol(math, main, rel, "\u2260", "\\ne");
- defineSymbol(math, main, rel, "\u2260", "\\neq");
- defineSymbol(math, main, rel, "\u2192", "\\rightarrow");
- defineSymbol(math, main, rel, "\u2192", "\\to");
- defineSymbol(math, ams, rel, "\u2271", "\\ngeq");
- defineSymbol(math, ams, rel, "\u2270", "\\nleq");
- defineSymbol(math, main, spacing, null, "\\!");
- defineSymbol(math, main, spacing, "\xA0", "\\ ");
- defineSymbol(math, main, spacing, "\xA0", "~");
- defineSymbol(math, main, spacing, null, "\\,");
- defineSymbol(math, main, spacing, null, "\\:");
- defineSymbol(math, main, spacing, null, "\\;");
- defineSymbol(math, main, spacing, null, "\\enspace");
- defineSymbol(math, main, spacing, null, "\\qquad");
- defineSymbol(math, main, spacing, null, "\\quad");
- defineSymbol(math, main, spacing, "\xA0", "\\space");
- defineSymbol(math, main, punct, ",", ",");
- defineSymbol(math, main, punct, ";", ";");
- defineSymbol(math, main, punct, ":", "\\colon");
- defineSymbol(math, ams, bin, "\u22BC", "\\barwedge");
- defineSymbol(math, ams, bin, "\u22BB", "\\veebar");
- defineSymbol(math, main, bin, "\u2299", "\\odot");
- defineSymbol(math, main, bin, "\u2295", "\\oplus");
- defineSymbol(math, main, bin, "\u2297", "\\otimes");
- defineSymbol(math, main, textord, "\u2202", "\\partial");
- defineSymbol(math, main, bin, "\u2298", "\\oslash");
- defineSymbol(math, ams, bin, "\u229A", "\\circledcirc");
- defineSymbol(math, ams, bin, "\u22A1", "\\boxdot");
- defineSymbol(math, main, bin, "\u25B3", "\\bigtriangleup");
- defineSymbol(math, main, bin, "\u25BD", "\\bigtriangledown");
- defineSymbol(math, main, bin, "\u2020", "\\dagger");
- defineSymbol(math, main, bin, "\u22C4", "\\diamond");
- defineSymbol(math, main, bin, "\u22C6", "\\star");
- defineSymbol(math, main, bin, "\u25C3", "\\triangleleft");
- defineSymbol(math, main, bin, "\u25B9", "\\triangleright");
- defineSymbol(math, main, open, "{", "\\{");
- defineSymbol(text, main, textord, "{", "\\{");
- defineSymbol(text, main, textord, "{", "\\textbraceleft");
- defineSymbol(math, main, close, "}", "\\}");
- defineSymbol(text, main, textord, "}", "\\}");
- defineSymbol(text, main, textord, "}", "\\textbraceright");
- defineSymbol(math, main, open, "{", "\\lbrace");
- defineSymbol(math, main, close, "}", "\\rbrace");
- defineSymbol(math, main, open, "[", "\\lbrack");
- defineSymbol(math, main, close, "]", "\\rbrack");
- defineSymbol(text, main, textord, "<", "\\textless"); // in T1 fontenc
- defineSymbol(text, main, textord, ">", "\\textgreater"); // in T1 fontenc
- defineSymbol(math, main, open, "\u230A", "\\lfloor");
- defineSymbol(math, main, close, "\u230B", "\\rfloor");
- defineSymbol(math, main, open, "\u2308", "\\lceil");
- defineSymbol(math, main, close, "\u2309", "\\rceil");
- defineSymbol(math, main, textord, "\\", "\\backslash");
- defineSymbol(math, main, textord, "\u2223", "|");
- defineSymbol(math, main, textord, "\u2223", "\\vert");
- defineSymbol(text, main, textord, "|", "\\textbar"); // in T1 fontenc
- defineSymbol(math, main, textord, "\u2225", "\\|");
- defineSymbol(math, main, textord, "\u2225", "\\Vert");
- defineSymbol(text, main, textord, "\u2225", "\\textbardbl");
- defineSymbol(math, main, rel, "\u2191", "\\uparrow");
- defineSymbol(math, main, rel, "\u21D1", "\\Uparrow");
- defineSymbol(math, main, rel, "\u2193", "\\downarrow");
- defineSymbol(math, main, rel, "\u21D3", "\\Downarrow");
- defineSymbol(math, main, rel, "\u2195", "\\updownarrow");
- defineSymbol(math, main, rel, "\u21D5", "\\Updownarrow");
- defineSymbol(math, main, op, "\u2210", "\\coprod");
- defineSymbol(math, main, op, "\u22C1", "\\bigvee");
- defineSymbol(math, main, op, "\u22C0", "\\bigwedge");
- defineSymbol(math, main, op, "\u2A04", "\\biguplus");
- defineSymbol(math, main, op, "\u22C2", "\\bigcap");
- defineSymbol(math, main, op, "\u22C3", "\\bigcup");
- defineSymbol(math, main, op, "\u222B", "\\int");
- defineSymbol(math, main, op, "\u222B", "\\intop");
- defineSymbol(math, main, op, "\u222C", "\\iint");
- defineSymbol(math, main, op, "\u222D", "\\iiint");
- defineSymbol(math, main, op, "\u220F", "\\prod");
- defineSymbol(math, main, op, "\u2211", "\\sum");
- defineSymbol(math, main, op, "\u2A02", "\\bigotimes");
- defineSymbol(math, main, op, "\u2A01", "\\bigoplus");
- defineSymbol(math, main, op, "\u2A00", "\\bigodot");
- defineSymbol(math, main, op, "\u222E", "\\oint");
- defineSymbol(math, main, op, "\u2A06", "\\bigsqcup");
- defineSymbol(math, main, op, "\u222B", "\\smallint");
- defineSymbol(text, main, inner, "\u2026", "\\textellipsis");
- defineSymbol(math, main, inner, "\u2026", "\\mathellipsis");
- defineSymbol(text, main, inner, "\u2026", "\\ldots", true);
- defineSymbol(math, main, inner, "\u2026", "\\ldots", true);
- defineSymbol(math, main, inner, "\u22EF", "\\cdots", true);
- defineSymbol(math, main, inner, "\u22F1", "\\ddots", true);
- defineSymbol(math, main, textord, "\u22EE", "\\vdots", true);
- defineSymbol(math, main, accent, "\xB4", "\\acute");
- defineSymbol(math, main, accent, "`", "\\grave");
- defineSymbol(math, main, accent, "\xA8", "\\ddot");
- defineSymbol(math, main, accent, "~", "\\tilde");
- defineSymbol(math, main, accent, "\xAF", "\\bar");
- defineSymbol(math, main, accent, "\u02D8", "\\breve");
- defineSymbol(math, main, accent, "\u02C7", "\\check");
- defineSymbol(math, main, accent, "^", "\\hat");
- defineSymbol(math, main, accent, "\u20D7", "\\vec");
- defineSymbol(math, main, accent, "\u02D9", "\\dot");
- defineSymbol(math, main, mathord, "\u0131", "\\imath");
- defineSymbol(math, main, mathord, "\u0237", "\\jmath");
- defineSymbol(text, main, accent, "\u02CA", "\\'"); // acute
- defineSymbol(text, main, accent, "\u02CB", "\\`"); // grave
- defineSymbol(text, main, accent, "\u02C6", "\\^"); // circumflex
- defineSymbol(text, main, accent, "\u02DC", "\\~"); // tilde
- defineSymbol(text, main, accent, "\u02C9", "\\="); // macron
- defineSymbol(text, main, accent, "\u02D8", "\\u"); // breve
- defineSymbol(text, main, accent, "\u02D9", "\\."); // dot above
- defineSymbol(text, main, accent, "\u02DA", "\\r"); // ring above
- defineSymbol(text, main, accent, "\u02C7", "\\v"); // caron
- defineSymbol(text, main, accent, "\xA8", '\\"'); // diaresis
- defineSymbol(text, main, accent, "\u030B", "\\H"); // double acute
-
- defineSymbol(text, main, textord, "\u2013", "--");
- defineSymbol(text, main, textord, "\u2013", "\\textendash");
- defineSymbol(text, main, textord, "\u2014", "---");
- defineSymbol(text, main, textord, "\u2014", "\\textemdash");
- defineSymbol(text, main, textord, "\u2018", "`");
- defineSymbol(text, main, textord, "\u2018", "\\textquoteleft");
- defineSymbol(text, main, textord, "\u2019", "'");
- defineSymbol(text, main, textord, "\u2019", "\\textquoteright");
- defineSymbol(text, main, textord, "\u201C", "``");
- defineSymbol(text, main, textord, "\u201C", "\\textquotedblleft");
- defineSymbol(text, main, textord, "\u201D", "''");
- defineSymbol(text, main, textord, "\u201D", "\\textquotedblright");
- defineSymbol(math, main, textord, "\xB0", "\\degree");
- defineSymbol(text, main, textord, "\xB0", "\\degree");
- // TODO: In LaTeX, \pounds can generate a different character in text and math
- // mode, but among our fonts, only Main-Italic defines this character "163".
- defineSymbol(math, main, mathord, "\xA3", "\\pounds");
- defineSymbol(math, main, mathord, "\xA3", "\\mathsterling");
- defineSymbol(text, main, mathord, "\xA3", "\\pounds");
- defineSymbol(text, main, mathord, "\xA3", "\\textsterling");
- defineSymbol(math, ams, textord, "\u2720", "\\maltese");
- defineSymbol(text, ams, textord, "\u2720", "\\maltese");
-
- defineSymbol(text, main, spacing, "\xA0", "\\ ");
- defineSymbol(text, main, spacing, "\xA0", " ");
- defineSymbol(text, main, spacing, "\xA0", "~");
-
- // There are lots of symbols which are the same, so we add them in afterwards.
-
- // All of these are textords in math mode
- var mathTextSymbols = '0123456789/@."';
- for (var i = 0; i < mathTextSymbols.length; i++) {
- var ch = mathTextSymbols.charAt(i);
- defineSymbol(math, main, textord, ch, ch);
- }
-
- // All of these are textords in text mode
- var textSymbols = '0123456789!@*()-=+[]<>|";:?/.,';
- for (var _i = 0; _i < textSymbols.length; _i++) {
- var _ch = textSymbols.charAt(_i);
- defineSymbol(text, main, textord, _ch, _ch);
- }
-
- // All of these are textords in text mode, and mathords in math mode
- var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
- for (var _i2 = 0; _i2 < letters.length; _i2++) {
- var _ch2 = letters.charAt(_i2);
- defineSymbol(math, main, mathord, _ch2, _ch2);
- defineSymbol(text, main, textord, _ch2, _ch2);
- }
-
- // Latin-1 letters
- for (var _i3 = 0x00c0; _i3 <= 0x00d6; _i3++) {
- var _ch3 = String.fromCharCode(_i3);
- defineSymbol(math, main, mathord, _ch3, _ch3);
- defineSymbol(text, main, textord, _ch3, _ch3);
- }
-
- for (var _i4 = 0x00d8; _i4 <= 0x00f6; _i4++) {
- var _ch4 = String.fromCharCode(_i4);
- defineSymbol(math, main, mathord, _ch4, _ch4);
- defineSymbol(text, main, textord, _ch4, _ch4);
- }
-
- for (var _i5 = 0x00f8; _i5 <= 0x00ff; _i5++) {
- var _ch5 = String.fromCharCode(_i5);
- defineSymbol(math, main, mathord, _ch5, _ch5);
- defineSymbol(text, main, textord, _ch5, _ch5);
- }
-
- // Cyrillic
- for (var _i6 = 0x0410; _i6 <= 0x044f; _i6++) {
- var _ch6 = String.fromCharCode(_i6);
- defineSymbol(text, main, textord, _ch6, _ch6);
- }
-
- // Unicode versions of existing characters
- defineSymbol(text, main, textord, "\u2013", "–");
- defineSymbol(text, main, textord, "\u2014", "—");
- defineSymbol(text, main, textord, "\u2018", "‘");
- defineSymbol(text, main, textord, "\u2019", "’");
- defineSymbol(text, main, textord, "\u201C", "“");
- defineSymbol(text, main, textord, "\u201D", "”");
- },
- {},
- ],
- 49: [
- function (require, module, exports) {
- var hangulRegex = /[\uAC00-\uD7AF]/;
-
- // This regex combines
- // - CJK symbols and punctuation: [\u3000-\u303F]
- // - Hiragana: [\u3040-\u309F]
- // - Katakana: [\u30A0-\u30FF]
- // - CJK ideograms: [\u4E00-\u9FAF]
- // - Hangul syllables: [\uAC00-\uD7AF]
- // - Fullwidth punctuation: [\uFF00-\uFF60]
- // Notably missing are halfwidth Katakana and Romanji glyphs.
- var cjkRegex = /[\u3000-\u30FF\u4E00-\u9FAF\uAC00-\uD7AF\uFF00-\uFF60]/;
-
- module.exports = {
- cjkRegex: cjkRegex,
- hangulRegex: hangulRegex,
- };
- },
- {},
- ],
- 50: [
- function (require, module, exports) {
- var _ParseError = require("./ParseError");
-
- var _ParseError2 = _interopRequireDefault(_ParseError);
-
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : { default: obj };
- }
-
- // This table gives the number of TeX pts in one of each *absolute* TeX unit.
- // Thus, multiplying a length by this number converts the length from units
- // into pts. Dividing the result by ptPerEm gives the number of ems
- // *assuming* a font size of ptPerEm (normal size, normal style).
- var ptPerUnit = {
- // https://en.wikibooks.org/wiki/LaTeX/Lengths and
- // https://tex.stackexchange.com/a/8263
- pt: 1, // TeX point
- mm: 7227 / 2540, // millimeter
- cm: 7227 / 254, // centimeter
- in: 72.27, // inch
- bp: 803 / 800, // big (PostScript) points
- pc: 12, // pica
- dd: 1238 / 1157, // didot
- cc: 14856 / 1157, // cicero (12 didot)
- nd: 685 / 642, // new didot
- nc: 1370 / 107, // new cicero (12 new didot)
- sp: 1 / 65536, // scaled point (TeX's internal smallest unit)
- // https://tex.stackexchange.com/a/41371
- px: 803 / 800,
- };
-
- // Dictionary of relative units, for fast validity testing.
- /* eslint no-console:0 */
-
- /**
- * This file does conversion between units. In particular, it provides
- * calculateSize to convert other units into ems.
- */
-
- var relativeUnit = {
- ex: true,
- em: true,
- mu: true,
- };
-
- /**
- * Determine whether the specified unit (either a string defining the unit
- * or a "size" parse node containing a unit field) is valid.
- */
- var validUnit = function validUnit(unit) {
- if (unit.unit) {
- unit = unit.unit;
- }
- return unit in ptPerUnit || unit in relativeUnit || unit === "ex";
- };
-
- /*
- * Convert a "size" parse node (with numeric "number" and string "unit" fields,
- * as parsed by functions.js argType "size") into a CSS em value for the
- * current style/scale. `options` gives the current options.
- */
- var calculateSize = function calculateSize(sizeValue, options) {
- var scale = void 0;
- if (sizeValue.unit in ptPerUnit) {
- // Absolute units
- scale =
- ptPerUnit[sizeValue.unit] / // Convert unit to pt
- options.fontMetrics().ptPerEm / // Convert pt to CSS em
- options.sizeMultiplier; // Unscale to make absolute units
- } else if (sizeValue.unit === "mu") {
- // `mu` units scale with scriptstyle/scriptscriptstyle.
- scale = options.fontMetrics().cssEmPerMu;
- } else {
- // Other relative units always refer to the *textstyle* font
- // in the current size.
- var unitOptions = void 0;
- if (options.style.isTight()) {
- // isTight() means current style is script/scriptscript.
- unitOptions = options.havingStyle(options.style.text());
- } else {
- unitOptions = options;
- }
- // TODO: In TeX these units are relative to the quad of the current
- // *text* font, e.g. cmr10. KaTeX instead uses values from the
- // comparably-sized *Computer Modern symbol* font. At 10pt, these
- // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;
- // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$.
- // TeX \showlists shows a kern of 1.13889 * fontsize;
- // KaTeX shows a kern of 1.171 * fontsize.
- if (sizeValue.unit === "ex") {
- scale = unitOptions.fontMetrics().xHeight;
- } else if (sizeValue.unit === "em") {
- scale = unitOptions.fontMetrics().quad;
- } else {
- throw new _ParseError2.default("Invalid unit: '" + sizeValue.unit + "'");
- }
- if (unitOptions !== options) {
- scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;
- }
- }
- return sizeValue.number * scale;
- };
-
- module.exports = {
- validUnit: validUnit,
- calculateSize: calculateSize,
- };
- },
- { "./ParseError": 29 },
- ],
- 51: [
- function (require, module, exports) {
- /**
- * This file contains a list of utility functions which are useful in other
- * files.
- */
-
- /**
- * Provide an `indexOf` function which works in IE8, but defers to native if
- * possible.
- */
- var nativeIndexOf = Array.prototype.indexOf;
- var indexOf = function indexOf(list, elem) {
- if (list == null) {
- return -1;
- }
- if (nativeIndexOf && list.indexOf === nativeIndexOf) {
- return list.indexOf(elem);
- }
- var l = list.length;
- for (var i = 0; i < l; i++) {
- if (list[i] === elem) {
- return i;
- }
- }
- return -1;
- };
-
- /**
- * Return whether an element is contained in a list
- */
- var contains = function contains(list, elem) {
- return indexOf(list, elem) !== -1;
- };
-
- /**
- * Provide a default value if a setting is undefined
- */
- var deflt = function deflt(setting, defaultIfUndefined) {
- return setting === undefined ? defaultIfUndefined : setting;
- };
-
- // hyphenate and escape adapted from Facebook's React under Apache 2 license
-
- var uppercase = /([A-Z])/g;
- var hyphenate = function hyphenate(str) {
- return str.replace(uppercase, "-$1").toLowerCase();
- };
-
- var ESCAPE_LOOKUP = {
- "&": "&",
- ">": ">",
- "<": "<",
- '"': """,
- "'": "'",
- };
-
- var ESCAPE_REGEX = /[&><"']/g;
-
- function escaper(match) {
- return ESCAPE_LOOKUP[match];
- }
-
- /**
- * Escapes text to prevent scripting attacks.
- *
- * @param {*} text Text value to escape.
- * @return {string} An escaped string.
- */
- function escape(text) {
- return ("" + text).replace(ESCAPE_REGEX, escaper);
- }
-
- /**
- * A function to set the text content of a DOM element in all supported
- * browsers. Note that we don't define this if there is no document.
- */
- var setTextContent = void 0;
- if (typeof document !== "undefined") {
- var testNode = document.createElement("span");
- if ("textContent" in testNode) {
- setTextContent = function setTextContent(node, text) {
- node.textContent = text;
- };
- } else {
- setTextContent = function setTextContent(node, text) {
- node.innerText = text;
- };
- }
- }
-
- /**
- * A function to clear a node.
- */
- function clearNode(node) {
- setTextContent(node, "");
- }
-
- module.exports = {
- contains: contains,
- deflt: deflt,
- escape: escape,
- hyphenate: hyphenate,
- indexOf: indexOf,
- setTextContent: setTextContent,
- clearNode: clearNode,
- };
- },
- {},
- ],
- },
- {},
- [1]
- )(1);
- });
- });
-
- var katex$2 = unwrapExports(katex$1);
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- // This is a straight concatenation of code from KaTeX's contrib folder,
- // but we aren't using some of their helpers that don't work well outside a browser environment.
-
- /*global katex */
-
- const findEndOfMath = function (delimiter, text, startIndex) {
- // Adapted from
- // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
- let index = startIndex;
- let braceLevel = 0;
-
- const delimLength = delimiter.length;
-
- while (index < text.length) {
- const character = text[index];
-
- if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
- return index;
- } else if (character === "\\") {
- index++;
- } else if (character === "{") {
- braceLevel++;
- } else if (character === "}") {
- braceLevel--;
- }
-
- index++;
- }
-
- return -1;
- };
-
- const splitAtDelimiters = function (startData, leftDelim, rightDelim, display) {
- const finalData = [];
-
- for (let i = 0; i < startData.length; i++) {
- if (startData[i].type === "text") {
- const text = startData[i].data;
-
- let lookingForLeft = true;
- let currIndex = 0;
- let nextIndex;
-
- nextIndex = text.indexOf(leftDelim);
- if (nextIndex !== -1) {
- currIndex = nextIndex;
- finalData.push({
- type: "text",
- data: text.slice(0, currIndex),
- });
- lookingForLeft = false;
- }
-
- while (true) {
- // eslint-disable-line no-constant-condition
- if (lookingForLeft) {
- nextIndex = text.indexOf(leftDelim, currIndex);
- if (nextIndex === -1) {
- break;
- }
-
- finalData.push({
- type: "text",
- data: text.slice(currIndex, nextIndex),
- });
-
- currIndex = nextIndex;
- } else {
- nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
- if (nextIndex === -1) {
- break;
- }
-
- finalData.push({
- type: "math",
- data: text.slice(currIndex + leftDelim.length, nextIndex),
- rawData: text.slice(currIndex, nextIndex + rightDelim.length),
- display: display,
- });
-
- currIndex = nextIndex + rightDelim.length;
- }
-
- lookingForLeft = !lookingForLeft;
- }
-
- finalData.push({
- type: "text",
- data: text.slice(currIndex),
- });
- } else {
- finalData.push(startData[i]);
- }
- }
-
- return finalData;
- };
-
- const splitWithDelimiters = function (text, delimiters) {
- let data = [{ type: "text", data: text }];
- for (let i = 0; i < delimiters.length; i++) {
- const delimiter = delimiters[i];
- data = splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
- }
- return data;
- };
-
- /* Note: optionsCopy is mutated by this method. If it is ever exposed in the
- * API, we should copy it before mutating.
- */
- const renderMathInText = function (text, optionsCopy) {
- const data = splitWithDelimiters(text, optionsCopy.delimiters);
- const fragment = document.createDocumentFragment();
-
- for (let i = 0; i < data.length; i++) {
- if (data[i].type === "text") {
- fragment.appendChild(document.createTextNode(data[i].data));
- } else {
- const tag = document.createElement("d-math");
- const math = data[i].data;
- // Override any display mode defined in the settings with that
- // defined by the text itself
- optionsCopy.displayMode = data[i].display;
- try {
- tag.textContent = math;
- if (optionsCopy.displayMode) {
- tag.setAttribute("block", "");
- }
- } catch (e) {
- if (!(e instanceof katex.ParseError)) {
- throw e;
- }
- optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
- fragment.appendChild(document.createTextNode(data[i].rawData));
- continue;
- }
- fragment.appendChild(tag);
- }
- }
-
- return fragment;
- };
-
- const renderElem = function (elem, optionsCopy) {
- for (let i = 0; i < elem.childNodes.length; i++) {
- const childNode = elem.childNodes[i];
- if (childNode.nodeType === 3) {
- // Text node
- const text = childNode.textContent;
- if (optionsCopy.mightHaveMath(text)) {
- const frag = renderMathInText(text, optionsCopy);
- i += frag.childNodes.length - 1;
- elem.replaceChild(frag, childNode);
- }
- } else if (childNode.nodeType === 1) {
- // Element node
- const shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1;
-
- if (shouldRender) {
- renderElem(childNode, optionsCopy);
- }
- }
- // Otherwise, it's something else, and ignore it.
- }
- };
-
- const defaultAutoRenderOptions = {
- delimiters: [
- { left: "$$", right: "$$", display: true },
- { left: "\\[", right: "\\]", display: true },
- { left: "\\(", right: "\\)", display: false },
- // LaTeX uses this, but it ruins the display of normal `$` in text:
- // {left: '$', right: '$', display: false},
- ],
-
- ignoredTags: ["script", "noscript", "style", "textarea", "pre", "code", "svg"],
-
- errorCallback: function (msg, err) {
- console.error(msg, err);
- },
- };
-
- const renderMathInElement = function (elem, options) {
- if (!elem) {
- throw new Error("No element provided to render");
- }
-
- const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);
- const delimiterStrings = optionsCopy.delimiters.flatMap((d) => [d.left, d.right]);
- const mightHaveMath = (text) => delimiterStrings.some((d) => text.indexOf(d) !== -1);
- optionsCopy.mightHaveMath = mightHaveMath;
- renderElem(elem, optionsCopy);
- };
-
- // Copyright 2018 The Distill Template Authors
-
- function Mathematics(dom, data) {
- let needsCSS = false;
- const body = dom.querySelector("body");
-
- if (!body) {
- console.warn("No body tag found!");
- return;
- }
-
- if (data.katex && data.katex.delimiters) {
- global.document = dom;
- renderMathInElement(body, data.katex);
- }
-
- // render d-math tags
- const mathTags = body.querySelectorAll("d-math");
- if (mathTags.length > 0) {
- needsCSS = true;
- console.warn(`Prerendering ${mathTags.length} math tags...`);
- for (const mathTag of mathTags) {
- const localOptions = {
- displayMode: mathTag.hasAttribute("block"),
- };
- const options = Object.assign(localOptions, data.katex);
- const html = katex$2.renderToString(mathTag.textContent, options);
- const container = dom.createElement("span");
- container.innerHTML = html;
- mathTag.parentElement.insertBefore(container, mathTag);
- mathTag.parentElement.removeChild(mathTag);
- }
- }
-
- if (needsCSS) {
- const katexCSSTag = ' ';
- dom.head.insertAdjacentHTML("beforeend", katexCSSTag);
- }
- }
-
- var favicon =
- "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA99JREFUeNrsG4t1ozDMzQSM4A2ODUonKBucN2hugtIJ6E1AboLcBiQTkJsANiAb9OCd/OpzMWBJBl5TvaeXPiiyJetry0J8wW3D3QpjRh3GjneXDq+fSQA9s2mH9x3KDhN4foJfCb8N/Jrv+2fnDn8vLRQOplWHVYdvHZYdZsBcZP1vBmh/n8DzEmhUQDPaOuP9pFuY+JwJHwHnCLQE2tnWBGEyXozY9xCUgHMhhjE2I4heVWtgIkZ83wL6Qgxj1obfWBxymPwe+b00BCCRNPbwfb60yleAkkBHGT5AEehIYz7eJrFDMF9CvH4wwhcGHiHMneFvLDQwlwvMLQq58trRcYBWfYn0A0OgHWQUSu25mE+BnoYKnnEJoeIWAifzOv7vLWd2ZKRfWAIme3tOiUaQ3UnLkb0xj1FxRIeEGKaGIHOs9nEgLaaA9i0JRYo1Ic67wJW86KSKE/ZAM8KuVMk8ITVhmxUxJ3Cl2xlm9Vtkeju1+mpCQNxaEGNCY8bs9X2YqwNoQeGjBWut/ma0QAWy/TqAsHx9wSya3I5IRxOfTC+leG+kA/4vSeEcGBtNUN6byhu3+keEZCQJUNh8MAO7HL6H8pQLnsW/Hd4T4lv93TPjfM7A46iEEqbB5EDOvwYNW6tGNZzT/o+CZ6sqZ6wUtR/wf7mi/VL8iNciT6rHih48Y55b4nKCHJCCzb4y0nwFmin3ZEMIoLfZF8F7nncFmvnWBaBj7CGAYA/WGJsUwHdYqVDwAmNsUgAx4CGgAA7GOOxADYOFWOaIKifuVYzmOpREqA21Mo7aPsgiY1PhOMAmxtR+AUbYH3Id2wc0SAFIQTsn9IUGWR8k9jx3vtXSiAacFxTAGakBk9UudkNECd6jLe+6HrshshvIuC6IlLMRy7er+JpcKma24SlE4cFZSZJDGVVrsNvitQhQrDhW0jfiOLfFd47C42eHT56D/BK0To+58Ahj+cAT8HT1UWlfLZCCd/uKawzU0Rh2EyIX/Icqth3niG8ybNroezwe6khdCNxRN+l4XGdOLVLlOOt2hTRJlr1ETIuMAltVTMz70mJrkdGAaZLSmnBEqmAE32JCMmuTlCnRgsBENtOUpHhvvsYIL0ibnBkaC6QvKcR7738GKp0AKnim7xgUSNv1bpS8QwhBt8r+EP47v/oyRK/S34yJ9nT+AN0Tkm4OdB9E4BsmXM3SnMlRFUrtp6IDpV2eKzdYvF3etm3KhQksbOLChGkSmcBdmcEwvqkrMy5BzL00NZeu3qPYJOOuCc+5NjcWKXQxFvTa3NoXJ4d8in7fiAUuTt781dkvuHX4K8AA2Usy7yNKLy0AAAAASUVORK5CYII=\n";
-
- /*!
- * escape-html
- * Copyright(c) 2012-2013 TJ Holowaychuk
- * Copyright(c) 2015 Andreas Lubbe
- * Copyright(c) 2015 Tiancheng "Timothy" Gu
- * MIT Licensed
- */
-
- /**
- * Module variables.
- * @private
- */
-
- var matchHtmlRegExp = /["'&<>]/;
-
- /**
- * Module exports.
- * @public
- */
-
- var escapeHtml_1 = escapeHtml;
-
- /**
- * Escape special characters in the given string of html.
- *
- * @param {string} string The string to escape for inserting into HTML
- * @return {string}
- * @public
- */
-
- function escapeHtml(string) {
- var str = "" + string;
- var match = matchHtmlRegExp.exec(str);
-
- if (!match) {
- return str;
- }
-
- var escape;
- var html = "";
- var index = 0;
- var lastIndex = 0;
-
- for (index = match.index; index < str.length; index++) {
- switch (str.charCodeAt(index)) {
- case 34: // "
- escape = """;
- break;
- case 38: // &
- escape = "&";
- break;
- case 39: // '
- escape = "'";
- break;
- case 60: // <
- escape = "<";
- break;
- case 62: // >
- escape = ">";
- break;
- default:
- continue;
- }
-
- if (lastIndex !== index) {
- html += str.substring(lastIndex, index);
- }
-
- lastIndex = index + 1;
- html += escape;
- }
-
- return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function Meta(dom, data) {
- let head = dom.querySelector("head");
- let appendHead = (html) => appendHtml(head, html);
-
- function meta(name, content, force) {
- if (content || force) appendHead(` \n`);
- }
-
- appendHead(`
-
-
-
- `);
-
- if (data.title) {
- appendHead(`
- ${escapeHtml_1(data.title)}
- `);
- }
-
- if (data.url) {
- appendHead(`
-
- `);
- }
-
- if (data.publishedDate) {
- appendHead(`
-
-
-
-
- `);
- }
-
- if (data.updatedDate) {
- appendHead(`
-
- `);
- }
-
- (data.authors || []).forEach((a) => {
- appendHtml(
- head,
- `
- `
- );
- });
-
- appendHead(`
-
-
-
-
-
-
-
-
- `);
-
- appendHead(`
-
-
-
-
-
-
-
-
- `);
-
- // if this is a proprer article, generate Google Scholar meta data
- if (data.doiSuffix) {
- appendHead(`
- \n`);
-
- meta("citation_title", data.title);
- meta("citation_fulltext_html_url", data.url);
- meta("citation_volume", data.volume);
- meta("citation_issue", data.issue);
- meta("citation_firstpage", data.doiSuffix ? `e${data.doiSuffix}` : undefined);
- meta("citation_doi", data.doi);
-
- let journal = data.journal || {};
- meta("citation_journal_title", journal.full_title || journal.title);
- meta("citation_journal_abbrev", journal.abbrev_title);
- meta("citation_issn", journal.issn);
- meta("citation_publisher", journal.publisher);
- meta("citation_fulltext_world_readable", "", true);
-
- if (data.publishedDate) {
- meta("citation_online_date", `${data.publishedYear}/${data.publishedMonthPadded}/${data.publishedDayPadded}`);
- meta("citation_publication_date", `${data.publishedYear}/${data.publishedMonthPadded}/${data.publishedDayPadded}`);
- }
-
- (data.authors || []).forEach((a) => {
- meta("citation_author", `${a.lastName}, ${a.firstName}`);
- meta("citation_author_institution", a.affiliation);
- });
- } else {
- console.warn("No DOI suffix in data; not adding citation meta tags!");
- }
-
- if (data.citations) {
- data.citations.forEach((key) => {
- if (data.bibliography && data.bibliography.has(key)) {
- const entry = data.bibliography.get(key);
- meta("citation_reference", citation_meta_content(entry));
- } else {
- console.warn("No bibliography data found for " + key);
- }
- });
- } else {
- console.warn("No citations found; not adding any references meta tags!");
- }
- }
-
- function appendHtml(el, html) {
- el.innerHTML += html;
- }
-
- function citation_meta_content(ref) {
- var content = `citation_title=${ref.title};`;
-
- if (ref.author && ref.author !== "") {
- ref.author.split(" and ").forEach((name) => {
- name = name.trim();
- let last, firsts;
- if (name.indexOf(",") != -1) {
- last = name.split(",")[0].trim();
- firsts = name.split(",")[1].trim();
- } else {
- last = name.split(" ").slice(-1)[0].trim();
- firsts = name.split(" ").slice(0, -1).join(" ");
- }
- content += `citation_author=${firsts} ${last};`;
- });
- }
-
- if ("year" in ref) {
- content += `citation_publication_date=${ref.year};`;
- }
-
- // Special test for arxiv
- let arxiv_id_search = /https?:\/\/arxiv\.org\/pdf\/([0-9]*\.[0-9]*)\.pdf/.exec(ref.url);
- arxiv_id_search = arxiv_id_search || /https?:\/\/arxiv\.org\/abs\/([0-9]*\.[0-9]*)/.exec(ref.url);
- arxiv_id_search = arxiv_id_search || /arXiv preprint arXiv:([0-9]*\.[0-9]*)/.exec(ref.journal);
- if (arxiv_id_search && arxiv_id_search[1]) {
- content += `citation_arxiv_id=${arxiv_id_search[1]};`;
- return content; // arXiv is not considered a journal, so we don't need journal/volume/issue
- }
- if ("journal" in ref) {
- content += `citation_journal_title=${escapeHtml_1(ref.journal)};`;
- }
- if ("volume" in ref) {
- content += `citation_volume=${escapeHtml_1(ref.volume)};`;
- }
- if ("issue" in ref || "number" in ref) {
- content += `citation_number=${escapeHtml_1(ref.issue || ref.number)};`;
- }
- return content;
- }
-
- var base =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml {\n font-size: 14px;\n\tline-height: 1.6em;\n /* font-family: "Libre Franklin", "Helvetica Neue", sans-serif; */\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;\n /*, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";*/\n text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\n@media(min-width: 768px) {\n html {\n font-size: 16px;\n }\n}\n\nbody {\n margin: 0;\n}\n\na {\n color: #004276;\n}\n\nfigure {\n margin: 0;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th {\n\ttext-align: left;\n}\n\ntable thead {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\ntable thead th {\n padding-bottom: 0.5em;\n}\n\ntable tbody :first-child td {\n padding-top: 0.5em;\n}\n\npre {\n overflow: auto;\n max-width: 100%;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nsup, sub {\n vertical-align: baseline;\n position: relative;\n top: -0.4em;\n line-height: 1em;\n}\n\nsub {\n top: 0.4em;\n}\n\n.kicker,\n.marker {\n font-size: 15px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* Headline */\n\n@media(min-width: 1024px) {\n d-title h1 span {\n display: block;\n }\n}\n\n/* Figure */\n\nfigure {\n position: relative;\n margin-bottom: 2.5em;\n margin-top: 1.5em;\n}\n\nfigcaption+figure {\n\n}\n\nfigure img {\n width: 100%;\n}\n\nfigure svg text,\nfigure svg tspan {\n}\n\nfigcaption,\n.figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n\n@media(min-width: 1024px) {\nfigcaption,\n.figcaption {\n font-size: 13px;\n }\n}\n\nfigure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\nfigcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nfigcaption b,\nfigcaption strong, {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n';
-
- var layout =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@supports not (display: grid) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n display: block;\n padding: 8px;\n }\n}\n\n.base-grid,\ndistill-header,\nd-title,\nd-abstract,\nd-article,\nd-appendix,\ndistill-appendix,\nd-byline,\nd-footnote-list,\nd-citation-list,\ndistill-footer {\n display: grid;\n justify-items: stretch;\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\n grid-column-gap: 8px;\n}\n\n.grid {\n display: grid;\n grid-column-gap: 8px;\n}\n\n@media(min-width: 768px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1000px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1180px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 32px;\n }\n\n .grid {\n grid-column-gap: 32px;\n }\n}\n\n\n\n\n.base-grid {\n grid-column: screen;\n}\n\n/* .l-body,\nd-article > * {\n grid-column: text;\n}\n\n.l-page,\nd-title > *,\nd-figure {\n grid-column: page;\n} */\n\n.l-gutter {\n grid-column: gutter;\n}\n\n.l-text,\n.l-body {\n grid-column: text;\n}\n\n.l-page {\n grid-column: page;\n}\n\n.l-body-outset {\n grid-column: middle;\n}\n\n.l-page-outset {\n grid-column: page;\n}\n\n.l-screen {\n grid-column: screen;\n}\n\n.l-screen-inset {\n grid-column: screen;\n padding-left: 16px;\n padding-left: 16px;\n}\n\n\n/* Aside */\n\nd-article aside {\n grid-column: gutter;\n font-size: 12px;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.6)\n}\n\n@media(min-width: 768px) {\n aside {\n grid-column: gutter;\n }\n\n .side {\n grid-column: gutter;\n }\n}\n';
-
- var print =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@media print {\n\n @page {\n size: 8in 11in;\n @bottom-right {\n content: counter(page) " of " counter(pages);\n }\n }\n\n html {\n /* no general margins -- CSS Grid takes care of those */\n }\n\n p, code {\n page-break-inside: avoid;\n }\n\n h2, h3 {\n page-break-after: avoid;\n }\n\n d-header {\n visibility: hidden;\n }\n\n d-footer {\n display: none!important;\n }\n\n}\n';
-
- var byline =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n';
-
- var article =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n';
-
- var title =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n';
-
- var math =
- '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nspan.katex-display {\n text-align: left;\n padding: 8px 0 8px 0;\n margin: 0.5em 0 0.5em 1em;\n}\n\nspan.katex {\n -webkit-font-smoothing: antialiased;\n color: rgba(0, 0, 0, 0.8);\n font-size: 1.18em;\n}\n';
-
- // Copyright 2018 The Distill Template Authors
-
- const styles = base + layout + title + byline + article + math + print;
-
- function makeStyleTag(dom) {
- const styleTagId = "distill-prerendered-styles";
- const prerenderedTag = dom.getElementById(styleTagId);
- if (!prerenderedTag) {
- const styleTag = dom.createElement("style");
- styleTag.id = styleTagId;
- styleTag.type = "text/css";
- const cssTextTag = dom.createTextNode(styles);
- styleTag.appendChild(cssTextTag);
- const firstScriptTag = dom.head.querySelector("script");
- dom.head.insertBefore(styleTag, firstScriptTag);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function renderTOC(element, headings) {
- let ToC = `
-
-
- Table of contents
- `;
-
- for (const el of headings) {
- // should element be included in TOC?
- const isInTitle = el.parentElement.tagName == "D-TITLE";
- const isException = el.getAttribute("no-toc");
- if (isInTitle || isException) continue;
- // create TOC entry
- const title = el.textContent;
- const link = "#" + el.getAttribute("id");
-
- let newLine = "" + '' + title + " " + " ";
- if (el.tagName == "H3") {
- newLine = "";
- } else {
- newLine += " ";
- }
- ToC += newLine;
- }
-
- ToC += " ";
- element.innerHTML = ToC;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function TOC(dom) {
- const article = dom.querySelector("d-article");
- const toc = dom.querySelector("d-toc");
- if (toc) {
- const headings = article.querySelectorAll("h2, h3");
- renderTOC(toc, headings);
- toc.setAttribute("prerendered", "true");
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- function Typeset(dom) {
- var textNodes = dom.createTreeWalker(dom.body, dom.defaultView.NodeFilter.SHOW_TEXT);
- while (textNodes.nextNode()) {
- var n = textNodes.currentNode,
- text = n.nodeValue;
- if (text && acceptNode(n)) {
- text = quotes(text);
- text = punctuation(text);
- // TODO: Add back support for ligatures once their uppercased versions don't hang Chrome search anymore
- // see: https://bugs.chromium.org/p/chromium/issues/detail?id=862648
- // text = ligatures(text);
- n.nodeValue = text;
- }
- }
- }
-
- // 2018-07-11 shancarter@ and ludwigschubert@ no longer know what this was meant to accomplish
- // if it was trying to not replace text in any child nodes of those listed here,
- // then it does not accomplish that.
- function acceptNode(node) {
- var parent = node.parentElement;
- var isMath =
- parent && parent.getAttribute && parent.getAttribute("class")
- ? parent.getAttribute("class").includes("katex") || parent.getAttribute("class").includes("MathJax")
- : false;
- return (
- parent &&
- parent.nodeName !== "SCRIPT" &&
- parent.nodeName !== "STYLE" &&
- parent.nodeName !== "CODE" &&
- parent.nodeName !== "PRE" &&
- parent.nodeName !== "SPAN" &&
- parent.nodeName !== "D-HEADER" &&
- parent.nodeName !== "D-BYLINE" &&
- parent.nodeName !== "D-MATH" &&
- parent.nodeName !== "D-CODE" &&
- parent.nodeName !== "D-BIBLIOGRAPHY" &&
- parent.nodeName !== "D-FOOTER" &&
- parent.nodeName !== "D-APPENDIX" &&
- parent.nodeName !== "D-FRONTMATTER" &&
- parent.nodeName !== "D-TOC" &&
- parent.nodeType !== 8 && //comment nodes
- !isMath
- );
- }
-
- /*!
- * typeset - Typesetting for the web
- * @version v0.1.6
- * @link https://github.com/davidmerfield/Typeset.js
- * @author David Merfield
- */
- // which has a CC0 license
- // http://creativecommons.org/publicdomain/zero/1.0/
-
- function punctuation(text) {
- // Dashes
- text = text.replace(/--/g, "\u2014");
- text = text.replace(/\s*\u2014\s*/g, "\u2009\u2014\u2009"); //this has thin spaces
-
- // Elipses
- text = text.replace(/\.\.\./g, "…");
-
- // Nbsp for punc with spaces
- var NBSP = "\u00a0";
- var NBSP_PUNCTUATION_START = /([«¿¡]) /g;
- var NBSP_PUNCTUATION_END = / ([!?:;.,‽»])/g;
-
- text = text.replace(NBSP_PUNCTUATION_START, "$1" + NBSP);
- text = text.replace(NBSP_PUNCTUATION_END, NBSP + "$1");
-
- return text;
- }
-
- function quotes(text) {
- text = text
- .replace(/(\W|^)"([^\s!?:;.,‽»])/g, "$1\u201c$2") // beginning "
- .replace(/(\u201c[^"]*)"([^"]*$|[^\u201c"]*\u201c)/g, "$1\u201d$2") // ending "
- .replace(/([^0-9])"/g, "$1\u201d") // remaining " at end of word
- .replace(/(\W|^)'(\S)/g, "$1\u2018$2") // beginning '
- .replace(/([a-z])'([a-z])/gi, "$1\u2019$2") // conjunction's possession
- .replace(/((\u2018[^']*)|[a-z])'([^0-9]|$)/gi, "$1\u2019$3") // ending '
- .replace(/(\u2018)([0-9]{2}[^\u2019]*)(\u2018([^0-9]|$)|$|\u2019[a-z])/gi, "\u2019$2$3") // abbrev. years like '93
- .replace(/(\B|^)\u2018(?=([^\u2019]*\u2019\b)*([^\u2019\u2018]*\W[\u2019\u2018]\b|[^\u2019\u2018]*$))/gi, "$1\u2019") // backwards apostrophe
- .replace(/'''/g, "\u2034") // triple prime
- .replace(/("|'')/g, "\u2033") // double prime
- .replace(/'/g, "\u2032");
-
- // Allow escaped quotes
- text = text.replace(/\\“/, '"');
- text = text.replace(/\\”/, '"');
- text = text.replace(/\\’/, "'");
- text = text.replace(/\\‘/, "'");
-
- return text;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- // const template = `
- // if ('IntersectionObserver' in window &&
- // 'IntersectionObserverEntry' in window &&
- // 'intersectionRatio' in IntersectionObserverEntry.prototype) {
- // // Platform supports IntersectionObserver natively! :-)
- // if (!('isIntersecting' in IntersectionObserverEntry.prototype)) {
- // Object.defineProperty(IntersectionObserverEntry.prototype,
- // 'isIntersecting', {
- // get: function () {
- // return this.intersectionRatio > 0;
- // }
- // });
- // }
- // } else {
- // // Platform does not support webcomponents--loading polyfills synchronously.
- // const scriptTag = document.createElement('script');
- // scriptTag.src = '${intersectionObserverPath}';
- // scriptTag.async = false;
- // document.currentScript.parentNode.insertBefore(scriptTag, document.currentScript.nextSibling);
- // }
- //
- // if ('registerElement' in document &&
- // 'import' in document.createElement('link') &&
- // 'content' in document.createElement('template')) {
- // // Platform supports webcomponents natively! :-)
- // } else {
- // // Platform does not support webcomponents--loading polyfills synchronously.
- // const scriptTag = document.createElement('script');
- // scriptTag.src = '${webcomponentPath}';
- // scriptTag.async = false;
- // document.currentScript.parentNode.insertBefore(scriptTag, document.currentScript.nextSibling);
- // }
- //
- //
- // `;
-
- const addBackIn = `
-window.addEventListener('WebComponentsReady', function() {
- console.warn('WebComponentsReady');
- const loaderTag = document.createElement('script');
- loaderTag.src = 'https://distill.pub/template.v2.js';
- document.head.insertBefore(loaderTag, document.head.firstChild);
-});
-`;
-
- function render(dom) {
- // pull out template script tag
- const templateTag = dom.querySelector('script[src*="template.v2.js"]');
- if (templateTag) {
- templateTag.parentNode.removeChild(templateTag);
- } else {
- console.debug("FYI: Did not find template tag when trying to remove it. You may not have added it. Be aware that our polyfills will add it.");
- }
-
- // add loader
- const loaderTag = dom.createElement("script");
- loaderTag.src = "https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.17/webcomponents-loader.js";
- dom.head.insertBefore(loaderTag, dom.head.firstChild);
-
- // add loader event listener to add tempalrte back in
- const addTag = dom.createElement("script");
- addTag.innerHTML = addBackIn;
- dom.head.insertBefore(addTag, dom.head.firstChild);
-
- // create polyfill script tag
- // const polyfillScriptTag = dom.createElement('script');
- // polyfillScriptTag.innerHTML = template;
- // polyfillScriptTag.id = 'polyfills';
-
- // insert at appropriate position--before any other script tag
- // const firstScriptTag = dom.head.querySelector('script');
- // dom.head.insertBefore(polyfillScriptTag, firstScriptTag);
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const styles$1 = `
-d-citation-list {
- contain: style;
-}
-
-d-citation-list .references {
- grid-column: text;
-}
-
-d-citation-list .references .title {
- font-weight: 500;
-}
-`;
-
- function renderCitationList(element, entries, dom = document) {
- if (entries.size > 0) {
- element.style.display = "";
- let list = element.querySelector(".references");
- if (list) {
- list.innerHTML = "";
- } else {
- const stylesTag = dom.createElement("style");
- stylesTag.innerHTML = styles$1;
- element.appendChild(stylesTag);
-
- const heading = dom.createElement("h3");
- heading.id = "references";
- heading.textContent = "References";
- element.appendChild(heading);
-
- list = dom.createElement("ol");
- list.id = "references-list";
- list.className = "references";
- element.appendChild(list);
- }
-
- for (const [key, entry] of entries) {
- const listItem = dom.createElement("li");
- listItem.id = key;
- listItem.innerHTML = bibliography_cite(entry);
- list.appendChild(listItem);
- }
- } else {
- element.style.display = "none";
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function CitationList(dom, data) {
- const citationListTag = dom.querySelector("d-citation-list");
- if (citationListTag) {
- const entries = new Map(
- data.citations.map((citationKey) => {
- return [citationKey, data.bibliography.get(citationKey)];
- })
- );
- renderCitationList(citationListTag, entries, dom);
- citationListTag.setAttribute("distill-prerendered", "true");
- }
- }
-
- // Copyright 2018 The Distill Template Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
-
- /*
- Try to only reorder things that MAY be user defined.
- Try to use templates etc to define the order of our own tags.
- */
-
- function render$1(dom) {
- const head = dom.head;
-
- const metaIE = head.querySelector("meta[http-equiv]");
- head.insertBefore(metaIE, head.firstChild);
-
- const metaViewport = head.querySelector("meta[name=viewport]");
- head.insertBefore(metaViewport, head.firstChild);
-
- const metaCharset = head.querySelector("meta[charset]");
- head.insertBefore(metaCharset, head.firstChild);
- }
-
- var logo =
- '\n \n \n';
-
- const headerTemplate = `
-
-
-`;
-
- // Copyright 2018 The Distill Template Authors
-
- function DistillHeader(dom, data) {
- const headerTag = dom.querySelector("distill-header");
- if (!headerTag) {
- const header = dom.createElement("distill-header");
- header.innerHTML = headerTemplate;
- header.setAttribute("distill-prerendered", "");
- const body = dom.querySelector("body");
- body.insertBefore(header, body.firstChild);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const styles$2 = `
-
-`;
-
- function appendixTemplate(frontMatter) {
- let html = styles$2;
-
- if (typeof frontMatter.githubUrl !== "undefined") {
- html += `
- Updates and Corrections
- `;
- if (frontMatter.githubCompareUpdatesUrl) {
- html += `View all changes to this article since it was first published.`;
- }
- html += `
- If you see mistakes or want to suggest changes, please create an issue on GitHub .
- `;
- }
-
- const journal = frontMatter.journal;
- if (typeof journal !== "undefined" && journal.title === "Distill") {
- html += `
- Reuse
- Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub , unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.
- `;
- }
-
- if (typeof frontMatter.publishedDate !== "undefined") {
- html += `
- Citation
- For attribution in academic contexts, please cite this work as
- ${frontMatter.concatenatedAuthors}, "${frontMatter.title}", Distill, ${frontMatter.publishedYear}.
- BibTeX citation
- ${serializeFrontmatterToBibtex(frontMatter)}
- `;
- }
-
- return html;
- }
-
- // Copyright 2018 The Distill Template Authors
-
- function DistillAppendix(dom, data) {
- const appendixTag = dom.querySelector("d-appendix");
- if (!appendixTag) {
- console.warn("No appendix tag found!");
- return;
- }
- const distillAppendixTag = appendixTag.querySelector("distill-appendix");
- if (!distillAppendixTag) {
- const distillAppendix = dom.createElement("distill-appendix");
- appendixTag.appendChild(distillAppendix);
- distillAppendix.innerHTML = appendixTemplate(data);
- }
- }
-
- const footerTemplate = `
-
-
-
-
-`;
-
- // Copyright 2018 The Distill Template Authors
-
- function DistillFooter(dom) {
- const footerTag = dom.querySelector("distill-footer");
- if (!footerTag) {
- const footer = dom.createElement("distill-footer");
- footer.innerHTML = footerTemplate;
- const body = dom.querySelector("body");
- body.appendChild(footer);
- }
- }
-
- // Copyright 2018 The Distill Template Authors
-
- const extractors = new Map([
- ["ExtractFrontmatter", ExtractFrontmatter],
- ["ExtractBibliography", ExtractBibliography],
- ["ExtractCitations", ExtractCitations],
- ]);
-
- const transforms = new Map([
- ["HTML", HTML],
- ["makeStyleTag", makeStyleTag],
- ["OptionalComponents", OptionalComponents],
- ["TOC", TOC],
- ["Byline", Byline],
- ["Mathematics", Mathematics],
- ["Meta", Meta],
- ["Typeset", Typeset],
- ["Polyfills", render],
- ["CitationList", CitationList],
- ["Reorder", render$1], // keep last
- ]);
-
- const distillTransforms = new Map([
- ["DistillHeader", DistillHeader],
- ["DistillAppendix", DistillAppendix],
- ["DistillFooter", DistillFooter],
- ]);
-
- /* Exported functions */
-
- function render$2(dom, data, verbose = true) {
- let frontMatter;
- if (data instanceof FrontMatter) {
- frontMatter = data;
- } else {
- frontMatter = FrontMatter.fromObject(data);
- }
- // first, we collect static data from the dom
- for (const [name, extract] of extractors.entries()) {
- if (verbose) console.warn("Running extractor: " + name);
- extract(dom, frontMatter, verbose);
- }
- // secondly we use it to transform parts of the dom
- for (const [name, transform] of transforms.entries()) {
- if (verbose) console.warn("Running transform: " + name);
- // console.warn('Running transform: ', transform);
- transform(dom, frontMatter, verbose);
- }
- dom.body.setAttribute("distill-prerendered", "");
- // the function calling us can now use the transformed dom and filled data object
- if (data instanceof FrontMatter);
- else {
- frontMatter.assignToObject(data);
- }
- }
-
- function distillify(dom, data, verbose = true) {
- // thirdly, we can use these additional transforms when publishing on the Distill website
- for (const [name, transform] of distillTransforms.entries()) {
- if (verbose) console.warn("Running distillify: ", name);
- transform(dom, data, verbose);
- }
- }
-
- function usesTemplateV2(dom) {
- const tags = dom.querySelectorAll("script");
- let usesV2 = undefined;
- for (const tag of tags) {
- const src = tag.src;
- if (src.includes("template.v1.js")) {
- usesV2 = false;
- } else if (src.includes("template.v2.js")) {
- usesV2 = true;
- } else if (src.includes("template.")) {
- throw new Error("Uses distill template, but unknown version?!");
- }
- }
-
- if (usesV2 === undefined) {
- throw new Error("Does not seem to use Distill template at all.");
- } else {
- return usesV2;
- }
- }
-
- const testing = {
- extractors: extractors,
- transforms: transforms,
- distillTransforms: distillTransforms,
- };
-
- exports.FrontMatter = FrontMatter;
- exports.distillify = distillify;
- exports.render = render$2;
- exports.testing = testing;
- exports.usesTemplateV2 = usesTemplateV2;
-
- Object.defineProperty(exports, "__esModule", { value: true });
-});
-//# sourceMappingURL=transforms.v2.js.map
+(function (global, factory) {
+ typeof exports === "object" && typeof module !== "undefined"
+ ? factory(exports, require("fs"))
+ : typeof define === "function" && define.amd
+ ? define(["exports", "fs"], factory)
+ : ((global = global || self), factory((global.dl = {}), global.fs));
+})(this, function (exports, fs) {
+ "use strict";
+
+ fs = fs && Object.prototype.hasOwnProperty.call(fs, "default") ? fs["default"] : fs;
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+ const months = ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."];
+ const zeroPad = (n) => (n < 10 ? "0" + n : n);
+
+ const RFC = function (date) {
+ const day = days[date.getDay()].substring(0, 3);
+ const paddedDate = zeroPad(date.getDate());
+ const month = months[date.getMonth()].substring(0, 3);
+ const year = date.getFullYear().toString();
+ const hours = date.getUTCHours().toString();
+ const minutes = date.getUTCMinutes().toString();
+ const seconds = date.getUTCSeconds().toString();
+ return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`;
+ };
+
+ const objectFromMap = function (map) {
+ const object = Array.from(map).reduce(
+ (object, [key, value]) => Object.assign(object, { [key]: value }), // Be careful! Maps can have non-String keys; object literals can't.
+ {}
+ );
+ return object;
+ };
+
+ const mapFromObject = function (object) {
+ const map = new Map();
+ for (var property in object) {
+ if (object.hasOwnProperty(property)) {
+ map.set(property, object[property]);
+ }
+ }
+ return map;
+ };
+
+ class Author {
+ // constructor(name='', personalURL='', affiliation='', affiliationURL='') {
+ // this.name = name; // 'Chris Olah'
+ // this.personalURL = personalURL; // 'https://colah.github.io'
+ // this.affiliation = affiliation; // 'Google Brain'
+ // this.affiliationURL = affiliationURL; // 'https://g.co/brain'
+ // }
+
+ constructor(object) {
+ this.name = object.author; // 'Chris Olah'
+ this.personalURL = object.authorURL; // 'https://colah.github.io'
+ this.affiliation = object.affiliation; // 'Google Brain'
+ this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'
+ this.affiliations = object.affiliations || []; // new-style affiliations
+ }
+
+ // 'Chris'
+ get firstName() {
+ const names = this.name.split(" ");
+ return names.slice(0, names.length - 1).join(" ");
+ }
+
+ // 'Olah'
+ get lastName() {
+ const names = this.name.split(" ");
+ return names[names.length - 1];
+ }
+ }
+
+ function mergeFromYMLFrontmatter(target, source) {
+ target.title = source.title;
+ if (source.published) {
+ if (source.published instanceof Date) {
+ target.publishedDate = source.published;
+ } else if (source.published.constructor === String) {
+ target.publishedDate = new Date(source.published);
+ }
+ }
+ if (source.publishedDate) {
+ if (source.publishedDate instanceof Date) {
+ target.publishedDate = source.publishedDate;
+ } else if (source.publishedDate.constructor === String) {
+ target.publishedDate = new Date(source.publishedDate);
+ } else {
+ console.error("Don't know what to do with published date: " + source.publishedDate);
+ }
+ }
+ target.description = source.description;
+ target.authors = source.authors.map((authorObject) => new Author(authorObject));
+ target.katex = source.katex;
+ target.password = source.password;
+ if (source.doi) {
+ target.doi = source.doi;
+ }
+ }
+
+ class FrontMatter {
+ constructor() {
+ this.title = "unnamed article"; // 'Attention and Augmented Recurrent Neural Networks'
+ this.description = ""; // 'A visual overview of neural attention...'
+ this.authors = []; // Array of Author(s)
+
+ this.bibliography = new Map();
+ this.bibliographyParsed = false;
+ // {
+ // 'gregor2015draw': {
+ // 'title': 'DRAW: A recurrent neural network for image generation',
+ // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',
+ // 'journal': 'arXiv preprint arXiv:1502.04623',
+ // 'year': '2015',
+ // 'url': 'https://arxiv.org/pdf/1502.04623.pdf',
+ // 'type': 'article'
+ // },
+ // }
+
+ // Citation keys should be listed in the order that they are appear in the document.
+ // Each key refers to a key in the bibliography dictionary.
+ this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]
+ this.citationsCollected = false;
+
+ //
+ // Assigned from posts.csv
+ //
+
+ // publishedDate: 2016-09-08T07:00:00.000Z,
+ // tags: [ 'rnn' ],
+ // distillPath: '2016/augmented-rnns',
+ // githubPath: 'distillpub/post--augmented-rnns',
+ // doiSuffix: 1,
+
+ //
+ // Assigned from journal
+ //
+ this.journal = {};
+ // journal: {
+ // 'title': 'Distill',
+ // 'full_title': 'Distill',
+ // 'abbrev_title': 'Distill',
+ // 'url': 'http://distill.pub',
+ // 'doi': '10.23915/distill',
+ // 'publisherName': 'Distill Working Group',
+ // 'publisherEmail': 'admin@distill.pub',
+ // 'issn': '2476-0757',
+ // 'editors': [...],
+ // 'committee': [...]
+ // }
+ // volume: 1,
+ // issue: 9,
+
+ this.katex = {};
+
+ //
+ // Assigned from publishing process
+ //
+
+ // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',
+ // updatedDate: 2017-03-21T07:13:16.000Z,
+ // doi: '10.23915/distill.00001',
+ this.doi = undefined;
+ this.publishedDate = undefined;
+ }
+
+ // Example:
+ // title: Demo Title Attention and Augmented Recurrent Neural Networks
+ // published: Jan 10, 2017
+ // authors:
+ // - Chris Olah:
+ // - Shan Carter: http://shancarter.com
+ // affiliations:
+ // - Google Brain:
+ // - Google Brain: http://g.co/brain
+
+ //
+ // Computed Properties
+ //
+
+ // 'http://distill.pub/2016/augmented-rnns',
+ set url(value) {
+ this._url = value;
+ }
+ get url() {
+ if (this._url) {
+ return this._url;
+ } else if (this.distillPath && this.journal.url) {
+ return this.journal.url + "/" + this.distillPath;
+ } else if (this.journal.url) {
+ return this.journal.url;
+ }
+ }
+
+ // 'https://github.com/distillpub/post--augmented-rnns',
+ get githubUrl() {
+ if (this.githubPath) {
+ return "https://github.com/" + this.githubPath;
+ } else {
+ return undefined;
+ }
+ }
+
+ // TODO resolve differences in naming of URL/Url/url.
+ // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',
+ set previewURL(value) {
+ this._previewURL = value;
+ }
+ get previewURL() {
+ return this._previewURL ? this._previewURL : this.url + "/thumbnail.jpg";
+ }
+
+ // 'Thu, 08 Sep 2016 00:00:00 -0700',
+ get publishedDateRFC() {
+ return RFC(this.publishedDate);
+ }
+
+ // 'Thu, 08 Sep 2016 00:00:00 -0700',
+ get updatedDateRFC() {
+ return RFC(this.updatedDate);
+ }
+
+ // 2016,
+ get publishedYear() {
+ return this.publishedDate.getFullYear();
+ }
+
+ // 'Sept',
+ get publishedMonth() {
+ return months[this.publishedDate.getMonth()];
+ }
+
+ // 8,
+ get publishedDay() {
+ return this.publishedDate.getDate();
+ }
+
+ // '09',
+ get publishedMonthPadded() {
+ return zeroPad(this.publishedDate.getMonth() + 1);
+ }
+
+ // '08',
+ get publishedDayPadded() {
+ return zeroPad(this.publishedDate.getDate());
+ }
+
+ get publishedISODateOnly() {
+ return this.publishedDate.toISOString().split("T")[0];
+ }
+
+ get volume() {
+ const volume = this.publishedYear - 2015;
+ if (volume < 1) {
+ throw new Error("Invalid publish date detected during computing volume");
+ }
+ return volume;
+ }
+
+ get issue() {
+ return this.publishedDate.getMonth() + 1;
+ }
+
+ // 'Olah & Carter',
+ get concatenatedAuthors() {
+ if (this.authors.length > 2) {
+ return this.authors[0].lastName + ", et al.";
+ } else if (this.authors.length === 2) {
+ return this.authors[0].lastName + " & " + this.authors[1].lastName;
+ } else if (this.authors.length === 1) {
+ return this.authors[0].lastName;
+ }
+ }
+
+ // 'Olah, Chris and Carter, Shan',
+ get bibtexAuthors() {
+ return this.authors
+ .map((author) => {
+ return author.lastName + ", " + author.firstName;
+ })
+ .join(" and ");
+ }
+
+ // 'olah2016attention'
+ get slug() {
+ let slug = "";
+ if (this.authors.length) {
+ slug += this.authors[0].lastName.toLowerCase();
+ slug += this.publishedYear;
+ slug += this.title.split(" ")[0].toLowerCase();
+ }
+ return slug || "Untitled";
+ }
+
+ get bibliographyEntries() {
+ return new Map(
+ this.citations.map((citationKey) => {
+ const entry = this.bibliography.get(citationKey);
+ return [citationKey, entry];
+ })
+ );
+ }
+
+ set bibliography(bibliography) {
+ if (bibliography instanceof Map) {
+ this._bibliography = bibliography;
+ } else if (typeof bibliography === "object") {
+ this._bibliography = mapFromObject(bibliography);
+ }
+ }
+
+ get bibliography() {
+ return this._bibliography;
+ }
+
+ static fromObject(source) {
+ const frontMatter = new FrontMatter();
+ Object.assign(frontMatter, source);
+ return frontMatter;
+ }
+
+ assignToObject(target) {
+ Object.assign(target, this);
+ target.bibliography = objectFromMap(this.bibliographyEntries);
+ target.url = this.url;
+ target.doi = this.doi;
+ target.githubUrl = this.githubUrl;
+ target.previewURL = this.previewURL;
+ if (this.publishedDate) {
+ target.volume = this.volume;
+ target.issue = this.issue;
+ target.publishedDateRFC = this.publishedDateRFC;
+ target.publishedYear = this.publishedYear;
+ target.publishedMonth = this.publishedMonth;
+ target.publishedDay = this.publishedDay;
+ target.publishedMonthPadded = this.publishedMonthPadded;
+ target.publishedDayPadded = this.publishedDayPadded;
+ }
+ if (this.updatedDate) {
+ target.updatedDateRFC = this.updatedDateRFC;
+ }
+ target.concatenatedAuthors = this.concatenatedAuthors;
+ target.bibtexAuthors = this.bibtexAuthors;
+ target.slug = this.slug;
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ function _moveLegacyAffiliationFormatIntoArray(frontMatter) {
+ // authors used to have propoerties "affiliation" and "affiliationURL".
+ // We now encourage using an array for affiliations containing objects with
+ // properties "name" and "url".
+ for (let author of frontMatter.authors) {
+ const hasOldStyle = Boolean(author.affiliation);
+ const hasNewStyle = Boolean(author.affiliations);
+ if (!hasOldStyle) continue;
+ if (hasNewStyle) {
+ console.warn(
+ `Author ${author.author} has both old-style ("affiliation" & "affiliationURL") and new style ("affiliations") affiliation information!`
+ );
+ } else {
+ let newAffiliation = {
+ name: author.affiliation,
+ };
+ if (author.affiliationURL) newAffiliation.url = author.affiliationURL;
+ author.affiliations = [newAffiliation];
+ }
+ }
+ return frontMatter;
+ }
+
+ function parseFrontmatter(element) {
+ const scriptTag = element.firstElementChild;
+ if (scriptTag) {
+ const type = scriptTag.getAttribute("type");
+ if (type.split("/")[1] == "json") {
+ const content = scriptTag.textContent;
+ const parsed = JSON.parse(content);
+ return _moveLegacyAffiliationFormatIntoArray(parsed);
+ } else {
+ console.error("Distill only supports JSON frontmatter tags anymore; no more YAML.");
+ }
+ } else {
+ console.error(
+ "You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates."
+ );
+ }
+ return {};
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function ExtractFrontmatter(dom, data) {
+ const frontMatterTag = dom.querySelector("d-front-matter");
+ if (!frontMatterTag) {
+ console.warn("No front matter tag found!");
+ return;
+ }
+ const extractedData = parseFrontmatter(frontMatterTag);
+ mergeFromYMLFrontmatter(data, extractedData);
+ }
+
+ function commonjsRequire() {
+ throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs");
+ }
+
+ function unwrapExports(x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
+ }
+
+ function createCommonjsModule(fn, module) {
+ return (module = { exports: {} }), fn(module, module.exports), module.exports;
+ }
+
+ var bibtexParse = createCommonjsModule(function (module, exports) {
+ /* start bibtexParse 0.0.22 */
+
+ //Original work by Henrik Muehe (c) 2010
+ //
+ //CommonJS port by Mikola Lysenko 2013
+ //
+ //Port to Browser lib by ORCID / RCPETERS
+ //
+ //Issues:
+ //no comment handling within strings
+ //no string concatenation
+ //no variable values yet
+ //Grammar implemented here:
+ //bibtex -> (string | preamble | comment | entry)*;
+ //string -> '@STRING' '{' key_equals_value '}';
+ //preamble -> '@PREAMBLE' '{' value '}';
+ //comment -> '@COMMENT' '{' value '}';
+ //entry -> '@' key '{' key ',' key_value_list '}';
+ //key_value_list -> key_equals_value (',' key_equals_value)*;
+ //key_equals_value -> key '=' value;
+ //value -> value_quotes | value_braces | key;
+ //value_quotes -> '"' .*? '"'; // not quite
+ //value_braces -> '{' .*? '"'; // not quite
+ (function (exports) {
+ function BibtexParser() {
+ this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
+ this.notKey = [",", "{", "}", " ", "="];
+ this.pos = 0;
+ this.input = "";
+ this.entries = new Array();
+
+ this.currentEntry = "";
+
+ this.setInput = function (t) {
+ this.input = t;
+ };
+
+ this.getEntries = function () {
+ return this.entries;
+ };
+
+ this.isWhitespace = function (s) {
+ return s == " " || s == "\r" || s == "\t" || s == "\n";
+ };
+
+ this.match = function (s, canCommentOut) {
+ if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;
+ this.skipWhitespace(canCommentOut);
+ if (this.input.substring(this.pos, this.pos + s.length) == s) {
+ this.pos += s.length;
+ } else {
+ throw "Token mismatch, expected " + s + ", found " + this.input.substring(this.pos);
+ }
+ this.skipWhitespace(canCommentOut);
+ };
+
+ this.tryMatch = function (s, canCommentOut) {
+ if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;
+ this.skipWhitespace(canCommentOut);
+ if (this.input.substring(this.pos, this.pos + s.length) == s) {
+ return true;
+ } else {
+ return false;
+ }
+ };
+
+ /* when search for a match all text can be ignored, not just white space */
+ this.matchAt = function () {
+ while (this.input.length > this.pos && this.input[this.pos] != "@") {
+ this.pos++;
+ }
+ if (this.input[this.pos] == "@") {
+ return true;
+ }
+ return false;
+ };
+
+ this.skipWhitespace = function (canCommentOut) {
+ while (this.isWhitespace(this.input[this.pos])) {
+ this.pos++;
+ }
+ if (this.input[this.pos] == "%" && canCommentOut == true) {
+ while (this.input[this.pos] != "\n") {
+ this.pos++;
+ }
+ this.skipWhitespace(canCommentOut);
+ }
+ };
+
+ this.value_braces = function () {
+ var bracecount = 0;
+ this.match("{", false);
+ var start = this.pos;
+ var escaped = false;
+ while (true) {
+ if (!escaped) {
+ if (this.input[this.pos] == "}") {
+ if (bracecount > 0) {
+ bracecount--;
+ } else {
+ var end = this.pos;
+ this.match("}", false);
+ return this.input.substring(start, end);
+ }
+ } else if (this.input[this.pos] == "{") {
+ bracecount++;
+ } else if (this.pos >= this.input.length - 1) {
+ throw "Unterminated value";
+ }
+ }
+ if (this.input[this.pos] == "\\" && escaped == false) escaped = true;
+ else escaped = false;
+ this.pos++;
+ }
+ };
+
+ this.value_comment = function () {
+ var str = "";
+ var brcktCnt = 0;
+ while (!(this.tryMatch("}", false) && brcktCnt == 0)) {
+ str = str + this.input[this.pos];
+ if (this.input[this.pos] == "{") brcktCnt++;
+ if (this.input[this.pos] == "}") brcktCnt--;
+ if (this.pos >= this.input.length - 1) {
+ throw "Unterminated value:" + this.input.substring(start);
+ }
+ this.pos++;
+ }
+ return str;
+ };
+
+ this.value_quotes = function () {
+ this.match('"', false);
+ var start = this.pos;
+ var escaped = false;
+ while (true) {
+ if (!escaped) {
+ if (this.input[this.pos] == '"') {
+ var end = this.pos;
+ this.match('"', false);
+ return this.input.substring(start, end);
+ } else if (this.pos >= this.input.length - 1) {
+ throw "Unterminated value:" + this.input.substring(start);
+ }
+ }
+ if (this.input[this.pos] == "\\" && escaped == false) escaped = true;
+ else escaped = false;
+ this.pos++;
+ }
+ };
+
+ this.single_value = function () {
+ var start = this.pos;
+ if (this.tryMatch("{")) {
+ return this.value_braces();
+ } else if (this.tryMatch('"')) {
+ return this.value_quotes();
+ } else {
+ var k = this.key();
+ if (k.match("^[0-9]+$")) return k;
+ else if (this.months.indexOf(k.toLowerCase()) >= 0) return k.toLowerCase();
+ else throw "Value expected:" + this.input.substring(start) + " for key: " + k;
+ }
+ };
+
+ this.value = function () {
+ var values = [];
+ values.push(this.single_value());
+ while (this.tryMatch("#")) {
+ this.match("#");
+ values.push(this.single_value());
+ }
+ return values.join("");
+ };
+
+ this.key = function () {
+ var start = this.pos;
+ while (true) {
+ if (this.pos >= this.input.length) {
+ throw "Runaway key";
+ } // а-яА-Я is Cyrillic
+ //console.log(this.input[this.pos]);
+ if (this.notKey.indexOf(this.input[this.pos]) >= 0) {
+ return this.input.substring(start, this.pos);
+ } else {
+ this.pos++;
+ }
+ }
+ };
+
+ this.key_equals_value = function () {
+ var key = this.key();
+ if (this.tryMatch("=")) {
+ this.match("=");
+ var val = this.value();
+ return [key, val];
+ } else {
+ throw "... = value expected, equals sign missing:" + this.input.substring(this.pos);
+ }
+ };
+
+ this.key_value_list = function () {
+ var kv = this.key_equals_value();
+ this.currentEntry["entryTags"] = {};
+ this.currentEntry["entryTags"][kv[0]] = kv[1];
+ while (this.tryMatch(",")) {
+ this.match(",");
+ // fixes problems with commas at the end of a list
+ if (this.tryMatch("}")) {
+ break;
+ }
+ kv = this.key_equals_value();
+ this.currentEntry["entryTags"][kv[0]] = kv[1];
+ }
+ };
+
+ this.entry_body = function (d) {
+ this.currentEntry = {};
+ this.currentEntry["citationKey"] = this.key();
+ this.currentEntry["entryType"] = d.substring(1);
+ this.match(",");
+ this.key_value_list();
+ this.entries.push(this.currentEntry);
+ };
+
+ this.directive = function () {
+ this.match("@");
+ return "@" + this.key();
+ };
+
+ this.preamble = function () {
+ this.currentEntry = {};
+ this.currentEntry["entryType"] = "PREAMBLE";
+ this.currentEntry["entry"] = this.value_comment();
+ this.entries.push(this.currentEntry);
+ };
+
+ this.comment = function () {
+ this.currentEntry = {};
+ this.currentEntry["entryType"] = "COMMENT";
+ this.currentEntry["entry"] = this.value_comment();
+ this.entries.push(this.currentEntry);
+ };
+
+ this.entry = function (d) {
+ this.entry_body(d);
+ };
+
+ this.bibtex = function () {
+ while (this.matchAt()) {
+ var d = this.directive();
+ this.match("{");
+ if (d == "@STRING") {
+ this.string();
+ } else if (d == "@PREAMBLE") {
+ this.preamble();
+ } else if (d == "@COMMENT") {
+ this.comment();
+ } else {
+ this.entry(d);
+ }
+ this.match("}");
+ }
+ };
+ }
+ exports.toJSON = function (bibtex) {
+ var b = new BibtexParser();
+ b.setInput(bibtex);
+ b.bibtex();
+ return b.entries;
+ };
+
+ /* added during hackathon don't hate on me */
+ exports.toBibtex = function (json) {
+ var out = "";
+ for (var i in json) {
+ out += "@" + json[i].entryType;
+ out += "{";
+ if (json[i].citationKey) out += json[i].citationKey + ", ";
+ if (json[i].entry) out += json[i].entry;
+ if (json[i].entryTags) {
+ var tags = "";
+ for (var jdx in json[i].entryTags) {
+ if (tags.length != 0) tags += ", ";
+ tags += jdx + "= {" + json[i].entryTags[jdx] + "}";
+ }
+ out += tags;
+ }
+ out += "}\n\n";
+ }
+ return out;
+ };
+ })(exports);
+
+ /* end bibtexParse */
+ });
+
+ // Copyright 2018 The Distill Template Authors
+
+ function normalizeTag(string) {
+ return string
+ .replace(/[\t\n ]+/g, " ")
+ .replace(/{\\["^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char)
+ .replace(/{\\([a-zA-Z])}/g, (full, char) => char);
+ }
+
+ function parseBibtex(bibtex) {
+ const bibliography = new Map();
+ const parsedEntries = bibtexParse.toJSON(bibtex);
+ for (const entry of parsedEntries) {
+ // normalize tags; note entryTags is an object, not Map
+ for (const [key, value] of Object.entries(entry.entryTags)) {
+ entry.entryTags[key.toLowerCase()] = normalizeTag(value);
+ }
+ entry.entryTags.type = entry.entryType;
+ // add to bibliography
+ bibliography.set(entry.citationKey, entry.entryTags);
+ }
+ return bibliography;
+ }
+
+ function serializeFrontmatterToBibtex(frontMatter) {
+ return `@article{${frontMatter.slug},
+ author = {${frontMatter.bibtexAuthors}},
+ title = {${frontMatter.title}},
+ journal = {${frontMatter.journal.title}},
+ year = {${frontMatter.publishedYear}},
+ note = {${frontMatter.url}},
+ doi = {${frontMatter.doi}}
+}`;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function parseBibliography(element) {
+ const scriptTag = element.firstElementChild;
+ if (scriptTag && scriptTag.tagName === "SCRIPT") {
+ if (scriptTag.type == "text/bibtex") {
+ const bibtex = element.firstElementChild.textContent;
+ return parseBibtex(bibtex);
+ } else if (scriptTag.type == "text/json") {
+ return new Map(JSON.parse(scriptTag.textContent));
+ } else {
+ console.warn("Unsupported bibliography script tag type: " + scriptTag.type);
+ }
+ } else {
+ console.warn("Bibliography did not have any script tag.");
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function ExtractBibliography(dom, data) {
+ const bibliographyTag = dom.querySelector("d-bibliography");
+ if (!bibliographyTag) {
+ console.warn("No bibliography tag found!");
+ return;
+ }
+
+ const src = bibliographyTag.getAttribute("src");
+ if (src) {
+ const path = data.inputDirectory + "/" + src;
+ const text = fs.readFileSync(path, "utf-8");
+ const bibliography = parseBibtex(text);
+ const scriptTag = dom.createElement("script");
+ scriptTag.type = "text/json";
+ scriptTag.textContent = JSON.stringify([...bibliography]);
+ bibliographyTag.appendChild(scriptTag);
+ bibliographyTag.removeAttribute("src");
+ }
+
+ data.bibliography = parseBibliography(bibliographyTag);
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ function collect_citations(dom = document) {
+ const citations = new Set();
+ const citeTags = dom.querySelectorAll("d-cite");
+ for (const tag of citeTags) {
+ const keyString = tag.getAttribute("key") || tag.getAttribute("bibtex-key");
+ const keys = keyString.split(",").map((k) => k.trim());
+ for (const key of keys) {
+ citations.add(key);
+ }
+ }
+ return [...citations];
+ }
+
+ function author_string(ent, template, sep, finalSep) {
+ if (ent.author == null) {
+ return "";
+ }
+ var names = ent.author.split(" and ");
+ let name_strings = names.map((name) => {
+ name = name.trim();
+ if (name.indexOf(",") != -1) {
+ var last = name.split(",")[0].trim();
+ var firsts = name.split(",")[1];
+ } else if (name.indexOf(" ") != -1) {
+ var last = name.split(" ").slice(-1)[0].trim();
+ var firsts = name.split(" ").slice(0, -1).join(" ");
+ } else {
+ var last = name.trim();
+ }
+ var initials = "";
+ if (firsts != undefined) {
+ initials = firsts
+ .trim()
+ .split(" ")
+ .map((s) => s.trim()[0]);
+ initials = initials.join(".") + ".";
+ }
+ return template.replace("${F}", firsts).replace("${L}", last).replace("${I}", initials).trim(); // in case one of first or last was empty
+ });
+ if (names.length > 1) {
+ var str = name_strings.slice(0, names.length - 1).join(sep);
+ str += (finalSep || sep) + name_strings[names.length - 1];
+ return str;
+ } else {
+ return name_strings[0];
+ }
+ }
+
+ function venue_string(ent) {
+ var cite = ent.journal || ent.booktitle || "";
+ if ("volume" in ent) {
+ var issue = ent.issue || ent.number;
+ issue = issue != undefined ? "(" + issue + ")" : "";
+ cite += ", Vol " + ent.volume + issue;
+ }
+ if ("pages" in ent) {
+ cite += ", pp. " + ent.pages;
+ }
+ if (cite != "") cite += ". ";
+ if ("publisher" in ent) {
+ cite += ent.publisher;
+ if (cite[cite.length - 1] != ".") cite += ".";
+ }
+ return cite;
+ }
+
+ function link_string(ent) {
+ if ("url" in ent) {
+ var url = ent.url;
+ var arxiv_match = /arxiv\.org\/abs\/([0-9\.]*)/.exec(url);
+ if (arxiv_match != null) {
+ url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`;
+ }
+
+ if (url.slice(-4) == ".pdf") {
+ var label = "PDF";
+ } else if (url.slice(-5) == ".html") {
+ var label = "HTML";
+ }
+ return ` [${label || "link"}] `;
+ } /* else if ("doi" in ent){
+ return ` [DOI] `;
+ }*/ else {
+ return "";
+ }
+ }
+ function doi_string(ent, new_line) {
+ if ("doi" in ent) {
+ return `${new_line ? " " : ""} DOI: ${ent.doi} `;
+ } else {
+ return "";
+ }
+ }
+
+ function title_string(ent) {
+ return '' + ent.title + " ";
+ }
+
+ function bibliography_cite(ent, fancy) {
+ if (ent) {
+ var cite = title_string(ent);
+ cite += link_string(ent) + " ";
+ if (ent.author) {
+ cite += author_string(ent, "${L}, ${I}", ", ", " and ");
+ if (ent.year || ent.date) {
+ cite += ", ";
+ }
+ }
+ if (ent.year || ent.date) {
+ cite += (ent.year || ent.date) + ". ";
+ } else {
+ cite += ". ";
+ }
+ cite += venue_string(ent);
+ cite += doi_string(ent);
+ return cite;
+ /*var cite = author_string(ent, "${L}, ${I}", ", ", " and ");
+ if (ent.year || ent.date){
+ cite += ", " + (ent.year || ent.date) + ". "
+ } else {
+ cite += ". "
+ }
+ cite += "" + ent.title + " . ";
+ cite += venue_string(ent);
+ cite += doi_string(ent);
+ cite += link_string(ent);
+ return cite*/
+ } else {
+ return "?";
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function ExtractCitations(dom, data) {
+ const citations = new Set(data.citations);
+ const newCitations = collect_citations(dom);
+ for (const citation of newCitations) {
+ citations.add(citation);
+ }
+ data.citations = Array.from(citations);
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ function HTML(dom) {
+ const head = dom.querySelector("head");
+
+ // set language to 'en'
+ if (!dom.querySelector("html").getAttribute("lang")) {
+ dom.querySelector("html").setAttribute("lang", "en");
+ }
+
+ // set charset to 'utf-8'
+ if (!dom.querySelector("meta[charset]")) {
+ const meta = dom.createElement("meta");
+ meta.setAttribute("charset", "utf-8");
+ head.appendChild(meta);
+ }
+
+ // set viewport
+ if (!dom.querySelector("meta[name=viewport]")) {
+ const meta = dom.createElement("meta");
+ meta.setAttribute("name", "viewport");
+ meta.setAttribute("content", "width=device-width, initial-scale=1");
+ head.appendChild(meta);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // import style from '../styles/d-byline.css';
+
+ function bylineTemplate(frontMatter) {
+ return `
+
+
+
Authors
+
Affiliations
+ ${frontMatter.authors
+ .map(
+ (author) => `
+
+ ${
+ author.personalURL
+ ? `
+ ${author.name} `
+ : `
+ ${author.name} `
+ }
+
+
+ ${author.affiliations
+ .map((affiliation) =>
+ affiliation.url
+ ? `${affiliation.name} `
+ : `${affiliation.name} `
+ )
+ .join(", ")}
+
+ `
+ )
+ .join("")}
+
+
+
Published
+ ${
+ frontMatter.publishedDate
+ ? `
+
${frontMatter.publishedMonth} ${frontMatter.publishedDay}, ${frontMatter.publishedYear}
`
+ : `
+
Not published yet.
`
+ }
+
+
+`;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function Byline(dom, data) {
+ const byline = dom.querySelector("d-byline");
+ if (byline) {
+ byline.innerHTML = bylineTemplate(data);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // no appendix -> add appendix
+ // title in front, no h1 -> add it
+ // no title in front, h1 -> read and put into frontMatter
+ // footnote -> footnote list
+ // break up bib
+ // if citation, no bib-list -> add citation-list
+
+ // if authors, no byline -> add byline
+
+ function OptionalComponents(dom, data) {
+ const body = dom.body;
+ const article = body.querySelector("d-article");
+
+ // If we don't have an article tag, something weird is going on—giving up.
+ if (!article) {
+ console.warn("No d-article tag found; skipping adding optional components!");
+ return;
+ }
+
+ let byline = dom.querySelector("d-byline");
+ if (!byline) {
+ if (data.authors) {
+ byline = dom.createElement("d-byline");
+ body.insertBefore(byline, article);
+ } else {
+ console.warn("No authors found in front matter; please add them before submission!");
+ }
+ }
+
+ let title = dom.querySelector("d-title");
+ if (!title) {
+ title = dom.createElement("d-title");
+ body.insertBefore(title, byline);
+ }
+
+ let h1 = title.querySelector("h1");
+ if (!h1) {
+ h1 = dom.createElement("h1");
+ h1.textContent = data.title;
+ title.insertBefore(h1, title.firstChild);
+ }
+
+ const hasPassword = typeof data.password !== "undefined";
+ let interstitial = body.querySelector("d-interstitial");
+ if (hasPassword && !interstitial) {
+ const inBrowser = typeof window !== "undefined";
+ const onLocalhost = inBrowser && window.location.hostname.includes("localhost");
+ if (!inBrowser || !onLocalhost) {
+ interstitial = dom.createElement("d-interstitial");
+ interstitial.password = data.password;
+ body.insertBefore(interstitial, body.firstChild);
+ }
+ } else if (!hasPassword && interstitial) {
+ interstitial.parentElement.removeChild(this);
+ }
+
+ let appendix = dom.querySelector("d-appendix");
+ if (!appendix) {
+ appendix = dom.createElement("d-appendix");
+ dom.body.appendChild(appendix);
+ }
+
+ let footnoteList = dom.querySelector("d-footnote-list");
+ if (!footnoteList) {
+ footnoteList = dom.createElement("d-footnote-list");
+ appendix.appendChild(footnoteList);
+ }
+
+ let citationList = dom.querySelector("d-citation-list");
+ if (!citationList) {
+ citationList = dom.createElement("d-citation-list");
+ appendix.appendChild(citationList);
+ }
+ }
+
+ var katex$1 = createCommonjsModule(function (module, exports) {
+ (function (f) {
+ {
+ module.exports = f();
+ }
+ })(function () {
+ return (function e(t, n, r) {
+ function s(o, u) {
+ if (!n[o]) {
+ if (!t[o]) {
+ var a = typeof commonjsRequire == "function" && commonjsRequire;
+ if (!u && a) return a(o, !0);
+ if (i) return i(o, !0);
+ var f = new Error("Cannot find module '" + o + "'");
+ throw ((f.code = "MODULE_NOT_FOUND"), f);
+ }
+ var l = (n[o] = { exports: {} });
+ t[o][0].call(
+ l.exports,
+ function (e) {
+ var n = t[o][1][e];
+ return s(n ? n : e);
+ },
+ l,
+ l.exports,
+ e,
+ t,
+ n,
+ r
+ );
+ }
+ return n[o].exports;
+ }
+ var i = typeof commonjsRequire == "function" && commonjsRequire;
+ for (var o = 0; o < r.length; o++) s(r[o]);
+ return s;
+ })(
+ {
+ 1: [
+ function (require, module, exports) {
+ var _ParseError = require("./src/ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ var _Settings = require("./src/Settings");
+
+ var _Settings2 = _interopRequireDefault(_Settings);
+
+ var _buildTree = require("./src/buildTree");
+
+ var _buildTree2 = _interopRequireDefault(_buildTree);
+
+ var _parseTree = require("./src/parseTree");
+
+ var _parseTree2 = _interopRequireDefault(_parseTree);
+
+ var _utils = require("./src/utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * Parse and build an expression, and place that expression in the DOM node
+ * given.
+ */
+ var render = function render(expression, baseNode, options) {
+ _utils2.default.clearNode(baseNode);
+
+ var settings = new _Settings2.default(options);
+
+ var tree = (0, _parseTree2.default)(expression, settings);
+ var node = (0, _buildTree2.default)(tree, expression, settings).toNode();
+
+ baseNode.appendChild(node);
+ };
+
+ // KaTeX's styles don't work properly in quirks mode. Print out an error, and
+ // disable rendering.
+ /* eslint no-console:0 */
+ /**
+ * This is the main entry point for KaTeX. Here, we expose functions for
+ * rendering expressions either to DOM nodes or to markup strings.
+ *
+ * We also expose the ParseError class to check if errors thrown from KaTeX are
+ * errors in the expression, or errors in javascript handling.
+ */
+
+ if (typeof document !== "undefined") {
+ if (document.compatMode !== "CSS1Compat") {
+ typeof console !== "undefined" &&
+ console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype.");
+
+ render = function render() {
+ throw new _ParseError2.default("KaTeX doesn't work in quirks mode.");
+ };
+ }
+ }
+
+ /**
+ * Parse and build an expression, and return the markup for that.
+ */
+ var renderToString = function renderToString(expression, options) {
+ var settings = new _Settings2.default(options);
+
+ var tree = (0, _parseTree2.default)(expression, settings);
+ return (0, _buildTree2.default)(tree, expression, settings).toMarkup();
+ };
+
+ /**
+ * Parse an expression and return the parse tree.
+ */
+ var generateParseTree = function generateParseTree(expression, options) {
+ var settings = new _Settings2.default(options);
+ return (0, _parseTree2.default)(expression, settings);
+ };
+
+ module.exports = {
+ render: render,
+ renderToString: renderToString,
+ /**
+ * NOTE: This method is not currently recommended for public use.
+ * The internal tree representation is unstable and is very likely
+ * to change. Use at your own risk.
+ */
+ __parse: generateParseTree,
+ ParseError: _ParseError2.default,
+ };
+ },
+ {
+ "./src/ParseError": 29,
+ "./src/Settings": 32,
+ "./src/buildTree": 37,
+ "./src/parseTree": 46,
+ "./src/utils": 51,
+ },
+ ],
+ 2: [
+ function (require, module, exports) {
+ module.exports = {
+ default: require("core-js/library/fn/json/stringify"),
+ __esModule: true,
+ };
+ },
+ { "core-js/library/fn/json/stringify": 6 },
+ ],
+ 3: [
+ function (require, module, exports) {
+ module.exports = {
+ default: require("core-js/library/fn/object/define-property"),
+ __esModule: true,
+ };
+ },
+ { "core-js/library/fn/object/define-property": 7 },
+ ],
+ 4: [
+ function (require, module, exports) {
+ exports.__esModule = true;
+
+ exports.default = function (instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ };
+ },
+ {},
+ ],
+ 5: [
+ function (require, module, exports) {
+ exports.__esModule = true;
+
+ var _defineProperty = require("../core-js/object/define-property");
+
+ var _defineProperty2 = _interopRequireDefault(_defineProperty);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ exports.default = (function () {
+ function defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ (0, _defineProperty2.default)(target, descriptor.key, descriptor);
+ }
+ }
+
+ return function (Constructor, protoProps, staticProps) {
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) defineProperties(Constructor, staticProps);
+ return Constructor;
+ };
+ })();
+ },
+ { "../core-js/object/define-property": 3 },
+ ],
+ 6: [
+ function (require, module, exports) {
+ var core = require("../../modules/_core"),
+ $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
+ module.exports = function stringify(it) {
+ // eslint-disable-line no-unused-vars
+ return $JSON.stringify.apply($JSON, arguments);
+ };
+ },
+ { "../../modules/_core": 10 },
+ ],
+ 7: [
+ function (require, module, exports) {
+ require("../../modules/es6.object.define-property");
+ var $Object = require("../../modules/_core").Object;
+ module.exports = function defineProperty(it, key, desc) {
+ return $Object.defineProperty(it, key, desc);
+ };
+ },
+ {
+ "../../modules/_core": 10,
+ "../../modules/es6.object.define-property": 23,
+ },
+ ],
+ 8: [
+ function (require, module, exports) {
+ module.exports = function (it) {
+ if (typeof it != "function") throw TypeError(it + " is not a function!");
+ return it;
+ };
+ },
+ {},
+ ],
+ 9: [
+ function (require, module, exports) {
+ var isObject = require("./_is-object");
+ module.exports = function (it) {
+ if (!isObject(it)) throw TypeError(it + " is not an object!");
+ return it;
+ };
+ },
+ { "./_is-object": 19 },
+ ],
+ 10: [
+ function (require, module, exports) {
+ var core = (module.exports = { version: "2.4.0" });
+ if (typeof __e == "number") __e = core; // eslint-disable-line no-undef
+ },
+ {},
+ ],
+ 11: [
+ function (require, module, exports) {
+ // optional / simple context binding
+ var aFunction = require("./_a-function");
+ module.exports = function (fn, that, length) {
+ aFunction(fn);
+ if (that === undefined) return fn;
+ switch (length) {
+ case 1:
+ return function (a) {
+ return fn.call(that, a);
+ };
+ case 2:
+ return function (a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3:
+ return function (a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function (/* ...args */) {
+ return fn.apply(that, arguments);
+ };
+ };
+ },
+ { "./_a-function": 8 },
+ ],
+ 12: [
+ function (require, module, exports) {
+ // Thank's IE8 for his funny defineProperty
+ module.exports = !require("./_fails")(function () {
+ return (
+ Object.defineProperty({}, "a", {
+ get: function () {
+ return 7;
+ },
+ }).a != 7
+ );
+ });
+ },
+ { "./_fails": 15 },
+ ],
+ 13: [
+ function (require, module, exports) {
+ var isObject = require("./_is-object"),
+ document = require("./_global").document,
+ // in old IE typeof document.createElement is 'object'
+ is = isObject(document) && isObject(document.createElement);
+ module.exports = function (it) {
+ return is ? document.createElement(it) : {};
+ };
+ },
+ { "./_global": 16, "./_is-object": 19 },
+ ],
+ 14: [
+ function (require, module, exports) {
+ var global = require("./_global"),
+ core = require("./_core"),
+ ctx = require("./_ctx"),
+ hide = require("./_hide"),
+ PROTOTYPE = "prototype";
+
+ var $export = function (type, name, source) {
+ var IS_FORCED = type & $export.F,
+ IS_GLOBAL = type & $export.G,
+ IS_STATIC = type & $export.S,
+ IS_PROTO = type & $export.P,
+ IS_BIND = type & $export.B,
+ IS_WRAP = type & $export.W,
+ exports = IS_GLOBAL ? core : core[name] || (core[name] = {}),
+ expProto = exports[PROTOTYPE],
+ target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE],
+ key,
+ own,
+ out;
+ if (IS_GLOBAL) source = name;
+ for (key in source) {
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ if (own && key in exports) continue;
+ // export native or passed
+ out = own ? target[key] : source[key];
+ // prevent global pollution for namespaces
+ exports[key] =
+ IS_GLOBAL && typeof target[key] != "function"
+ ? source[key]
+ : // bind timers to global for call from export context
+ IS_BIND && own
+ ? ctx(out, global)
+ : // wrap global constructors for prevent change them in library
+ IS_WRAP && target[key] == out
+ ? (function (C) {
+ var F = function (a, b, c) {
+ if (this instanceof C) {
+ switch (arguments.length) {
+ case 0:
+ return new C();
+ case 1:
+ return new C(a);
+ case 2:
+ return new C(a, b);
+ }
+ return new C(a, b, c);
+ }
+ return C.apply(this, arguments);
+ };
+ F[PROTOTYPE] = C[PROTOTYPE];
+ return F;
+ // make static versions for prototype methods
+ })(out)
+ : IS_PROTO && typeof out == "function"
+ ? ctx(Function.call, out)
+ : out;
+ // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+ if (IS_PROTO) {
+ (exports.virtual || (exports.virtual = {}))[key] = out;
+ // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+ if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
+ }
+ }
+ };
+ // type bitmap
+ $export.F = 1; // forced
+ $export.G = 2; // global
+ $export.S = 4; // static
+ $export.P = 8; // proto
+ $export.B = 16; // bind
+ $export.W = 32; // wrap
+ $export.U = 64; // safe
+ $export.R = 128; // real proto method for `library`
+ module.exports = $export;
+ },
+ {
+ "./_core": 10,
+ "./_ctx": 11,
+ "./_global": 16,
+ "./_hide": 17,
+ },
+ ],
+ 15: [
+ function (require, module, exports) {
+ module.exports = function (exec) {
+ try {
+ return !!exec();
+ } catch (e) {
+ return true;
+ }
+ };
+ },
+ {},
+ ],
+ 16: [
+ function (require, module, exports) {
+ // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+ var global = (module.exports =
+ typeof window != "undefined" && window.Math == Math
+ ? window
+ : typeof self != "undefined" && self.Math == Math
+ ? self
+ : Function("return this")());
+ if (typeof __g == "number") __g = global; // eslint-disable-line no-undef
+ },
+ {},
+ ],
+ 17: [
+ function (require, module, exports) {
+ var dP = require("./_object-dp"),
+ createDesc = require("./_property-desc");
+ module.exports = require("./_descriptors")
+ ? function (object, key, value) {
+ return dP.f(object, key, createDesc(1, value));
+ }
+ : function (object, key, value) {
+ object[key] = value;
+ return object;
+ };
+ },
+ {
+ "./_descriptors": 12,
+ "./_object-dp": 20,
+ "./_property-desc": 21,
+ },
+ ],
+ 18: [
+ function (require, module, exports) {
+ module.exports =
+ !require("./_descriptors") &&
+ !require("./_fails")(function () {
+ return (
+ Object.defineProperty(require("./_dom-create")("div"), "a", {
+ get: function () {
+ return 7;
+ },
+ }).a != 7
+ );
+ });
+ },
+ {
+ "./_descriptors": 12,
+ "./_dom-create": 13,
+ "./_fails": 15,
+ },
+ ],
+ 19: [
+ function (require, module, exports) {
+ module.exports = function (it) {
+ return typeof it === "object" ? it !== null : typeof it === "function";
+ };
+ },
+ {},
+ ],
+ 20: [
+ function (require, module, exports) {
+ var anObject = require("./_an-object"),
+ IE8_DOM_DEFINE = require("./_ie8-dom-define"),
+ toPrimitive = require("./_to-primitive"),
+ dP = Object.defineProperty;
+
+ exports.f = require("./_descriptors")
+ ? Object.defineProperty
+ : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE)
+ try {
+ return dP(O, P, Attributes);
+ } catch (e) {
+ /* empty */
+ }
+ if ("get" in Attributes || "set" in Attributes) throw TypeError("Accessors not supported!");
+ if ("value" in Attributes) O[P] = Attributes.value;
+ return O;
+ };
+ },
+ {
+ "./_an-object": 9,
+ "./_descriptors": 12,
+ "./_ie8-dom-define": 18,
+ "./_to-primitive": 22,
+ },
+ ],
+ 21: [
+ function (require, module, exports) {
+ module.exports = function (bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value: value,
+ };
+ };
+ },
+ {},
+ ],
+ 22: [
+ function (require, module, exports) {
+ // 7.1.1 ToPrimitive(input [, PreferredType])
+ var isObject = require("./_is-object");
+ // instead of the ES6 spec version, we didn't implement @@toPrimitive case
+ // and the second argument - flag - preferred type is a string
+ module.exports = function (it, S) {
+ if (!isObject(it)) return it;
+ var fn, val;
+ if (S && typeof (fn = it.toString) == "function" && !isObject((val = fn.call(it)))) return val;
+ if (typeof (fn = it.valueOf) == "function" && !isObject((val = fn.call(it)))) return val;
+ if (!S && typeof (fn = it.toString) == "function" && !isObject((val = fn.call(it)))) return val;
+ throw TypeError("Can't convert object to primitive value");
+ };
+ },
+ { "./_is-object": 19 },
+ ],
+ 23: [
+ function (require, module, exports) {
+ var $export = require("./_export");
+ // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+ $export($export.S + $export.F * !require("./_descriptors"), "Object", { defineProperty: require("./_object-dp").f });
+ },
+ {
+ "./_descriptors": 12,
+ "./_export": 14,
+ "./_object-dp": 20,
+ },
+ ],
+ 24: [
+ function (require, module, exports) {
+ function getRelocatable(re) {
+ // In the future, this could use a WeakMap instead of an expando.
+ if (!re.__matchAtRelocatable) {
+ // Disjunctions are the lowest-precedence operator, so we can make any
+ // pattern match the empty string by appending `|()` to it:
+ // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-patterns
+ var source = re.source + "|()";
+
+ // We always make the new regex global.
+ var flags = "g" + (re.ignoreCase ? "i" : "") + (re.multiline ? "m" : "") + (re.unicode ? "u" : "");
+ // sticky (/.../y) doesn't make sense in conjunction with our relocation
+ // logic, so we ignore it here.
+ re.__matchAtRelocatable = new RegExp(source, flags);
+ }
+ return re.__matchAtRelocatable;
+ }
+
+ function matchAt(re, str, pos) {
+ if (re.global || re.sticky) {
+ throw new Error("matchAt(...): Only non-global regexes are supported");
+ }
+ var reloc = getRelocatable(re);
+ reloc.lastIndex = pos;
+ var match = reloc.exec(str);
+ // Last capturing group is our sentinel that indicates whether the regex
+ // matched at the given location.
+ if (match[match.length - 1] == null) {
+ // Original regex matched.
+ match.length = match.length - 1;
+ return match;
+ } else {
+ return null;
+ }
+ }
+
+ module.exports = matchAt;
+ },
+ {},
+ ],
+ 25: [
+ function (require, module, exports) {
+ /* eslint-disable no-unused-vars */
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ var propIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+ function toObject(val) {
+ if (val === null || val === undefined) {
+ throw new TypeError("Object.assign cannot be called with null or undefined");
+ }
+
+ return Object(val);
+ }
+
+ function shouldUseNative() {
+ try {
+ if (!Object.assign) {
+ return false;
+ }
+
+ // Detect buggy property enumeration order in older V8 versions.
+
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4118
+ var test1 = new String("abc"); // eslint-disable-line
+ test1[5] = "de";
+ if (Object.getOwnPropertyNames(test1)[0] === "5") {
+ return false;
+ }
+
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
+ var test2 = {};
+ for (var i = 0; i < 10; i++) {
+ test2["_" + String.fromCharCode(i)] = i;
+ }
+ var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
+ return test2[n];
+ });
+ if (order2.join("") !== "0123456789") {
+ return false;
+ }
+
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
+ var test3 = {};
+ "abcdefghijklmnopqrst".split("").forEach(function (letter) {
+ test3[letter] = letter;
+ });
+ if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") {
+ return false;
+ }
+
+ return true;
+ } catch (e) {
+ // We don't expect any of the above to throw, but better to be safe.
+ return false;
+ }
+ }
+
+ module.exports = shouldUseNative()
+ ? Object.assign
+ : function (target, source) {
+ var from;
+ var to = toObject(target);
+ var symbols;
+
+ for (var s = 1; s < arguments.length; s++) {
+ from = Object(arguments[s]);
+
+ for (var key in from) {
+ if (hasOwnProperty.call(from, key)) {
+ to[key] = from[key];
+ }
+ }
+
+ if (Object.getOwnPropertySymbols) {
+ symbols = Object.getOwnPropertySymbols(from);
+ for (var i = 0; i < symbols.length; i++) {
+ if (propIsEnumerable.call(from, symbols[i])) {
+ to[symbols[i]] = from[symbols[i]];
+ }
+ }
+ }
+ }
+
+ return to;
+ };
+ },
+ {},
+ ],
+ 26: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _createClass2 = require("babel-runtime/helpers/createClass");
+
+ var _createClass3 = _interopRequireDefault(_createClass2);
+
+ var _matchAt = require("match-at");
+
+ var _matchAt2 = _interopRequireDefault(_matchAt);
+
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * The resulting token returned from `lex`.
+ *
+ * It consists of the token text plus some position information.
+ * The position information is essentially a range in an input string,
+ * but instead of referencing the bare input string, we refer to the lexer.
+ * That way it is possible to attach extra metadata to the input string,
+ * like for example a file name or similar.
+ *
+ * The position information (all three parameters) is optional,
+ * so it is OK to construct synthetic tokens if appropriate.
+ * Not providing available position information may lead to
+ * degraded error reporting, though.
+ *
+ * @param {string} text the text of this token
+ * @param {number=} start the start offset, zero-based inclusive
+ * @param {number=} end the end offset, zero-based exclusive
+ * @param {Lexer=} lexer the lexer which in turn holds the input string
+ */
+ /**
+ * The Lexer class handles tokenizing the input in various ways. Since our
+ * parser expects us to be able to backtrack, the lexer allows lexing from any
+ * given starting point.
+ *
+ * Its main exposed function is the `lex` function, which takes a position to
+ * lex from and a type of token to lex. It defers to the appropriate `_innerLex`
+ * function.
+ *
+ * The various `_innerLex` functions perform the actual lexing of different
+ * kinds.
+ */
+
+ var Token = (function () {
+ function Token(text, start, end, lexer) {
+ (0, _classCallCheck3.default)(this, Token);
+
+ this.text = text;
+ this.start = start;
+ this.end = end;
+ this.lexer = lexer;
+ }
+
+ /**
+ * Given a pair of tokens (this and endToken), compute a “Token” encompassing
+ * the whole input range enclosed by these two.
+ *
+ * @param {Token} endToken last token of the range, inclusive
+ * @param {string} text the text of the newly constructed token
+ */
+
+ (0, _createClass3.default)(Token, [
+ {
+ key: "range",
+ value: function range(endToken, text) {
+ if (endToken.lexer !== this.lexer) {
+ return new Token(text); // sorry, no position information available
+ }
+ return new Token(text, this.start, endToken.end, this.lexer);
+ },
+ },
+ ]);
+ return Token;
+ })();
+
+ /* The following tokenRegex
+ * - matches typical whitespace (but not NBSP etc.) using its first group
+ * - does not match any control character \x00-\x1f except whitespace
+ * - does not match a bare backslash
+ * - matches any ASCII character except those just mentioned
+ * - does not match the BMP private use area \uE000-\uF8FF
+ * - does not match bare surrogate code units
+ * - matches any BMP character except for those just described
+ * - matches any valid Unicode surrogate pair
+ * - matches a backslash followed by one or more letters
+ * - matches a backslash followed by any BMP character, including newline
+ * Just because the Lexer matches something doesn't mean it's valid input:
+ * If there is no matching function or symbol definition, the Parser will
+ * still reject the input.
+ */
+
+ var tokenRegex = new RegExp(
+ "([ \r\n\t]+)|" + // whitespace
+ "([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint
+ "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair
+ "|\\\\(?:[a-zA-Z]+|[^\uD800-\uDFFF])" + // function name
+ ")"
+ );
+
+ /*
+ * Main Lexer class
+ */
+
+ var Lexer = (function () {
+ function Lexer(input) {
+ (0, _classCallCheck3.default)(this, Lexer);
+
+ this.input = input;
+ this.pos = 0;
+ }
+
+ /**
+ * This function lexes a single token.
+ */
+
+ (0, _createClass3.default)(Lexer, [
+ {
+ key: "lex",
+ value: function lex() {
+ var input = this.input;
+ var pos = this.pos;
+ if (pos === input.length) {
+ return new Token("EOF", pos, pos, this);
+ }
+ var match = (0, _matchAt2.default)(tokenRegex, input, pos);
+ if (match === null) {
+ throw new _ParseError2.default("Unexpected character: '" + input[pos] + "'", new Token(input[pos], pos, pos + 1, this));
+ }
+ var text = match[2] || " ";
+ var start = this.pos;
+ this.pos += match[0].length;
+ var end = this.pos;
+ return new Token(text, start, end, this);
+ },
+ },
+ ]);
+ return Lexer;
+ })();
+
+ module.exports = Lexer;
+ },
+ {
+ "./ParseError": 29,
+ "babel-runtime/helpers/classCallCheck": 4,
+ "babel-runtime/helpers/createClass": 5,
+ "match-at": 24,
+ },
+ ],
+ 27: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _createClass2 = require("babel-runtime/helpers/createClass");
+
+ var _createClass3 = _interopRequireDefault(_createClass2);
+
+ var _Lexer = require("./Lexer");
+
+ var _Lexer2 = _interopRequireDefault(_Lexer);
+
+ var _macros = require("./macros");
+
+ var _macros2 = _interopRequireDefault(_macros);
+
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ var _objectAssign = require("object-assign");
+
+ var _objectAssign2 = _interopRequireDefault(_objectAssign);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * This file contains the “gullet” where macros are expanded
+ * until only non-macro tokens remain.
+ */
+
+ var MacroExpander = (function () {
+ function MacroExpander(input, macros) {
+ (0, _classCallCheck3.default)(this, MacroExpander);
+
+ this.lexer = new _Lexer2.default(input);
+ this.macros = (0, _objectAssign2.default)({}, _macros2.default, macros);
+ this.stack = []; // contains tokens in REVERSE order
+ this.discardedWhiteSpace = [];
+ }
+
+ /**
+ * Recursively expand first token, then return first non-expandable token.
+ *
+ * At the moment, macro expansion doesn't handle delimited macros,
+ * i.e. things like those defined by \def\foo#1\end{…}.
+ * See the TeX book page 202ff. for details on how those should behave.
+ */
+
+ (0, _createClass3.default)(MacroExpander, [
+ {
+ key: "nextToken",
+ value: function nextToken() {
+ for (;;) {
+ if (this.stack.length === 0) {
+ this.stack.push(this.lexer.lex());
+ }
+ var topToken = this.stack.pop();
+ var name = topToken.text;
+ if (!(name.charAt(0) === "\\" && this.macros.hasOwnProperty(name))) {
+ return topToken;
+ }
+ var tok = void 0;
+ var expansion = this.macros[name];
+ if (typeof expansion === "string") {
+ var numArgs = 0;
+ if (expansion.indexOf("#") !== -1) {
+ var stripped = expansion.replace(/##/g, "");
+ while (stripped.indexOf("#" + (numArgs + 1)) !== -1) {
+ ++numArgs;
+ }
+ }
+ var bodyLexer = new _Lexer2.default(expansion);
+ expansion = [];
+ tok = bodyLexer.lex();
+ while (tok.text !== "EOF") {
+ expansion.push(tok);
+ tok = bodyLexer.lex();
+ }
+ expansion.reverse(); // to fit in with stack using push and pop
+ expansion.numArgs = numArgs;
+ this.macros[name] = expansion;
+ }
+ if (expansion.numArgs) {
+ var args = [];
+ var i = void 0;
+ // obtain arguments, either single token or balanced {…} group
+ for (i = 0; i < expansion.numArgs; ++i) {
+ var startOfArg = this.get(true);
+ if (startOfArg.text === "{") {
+ var arg = [];
+ var depth = 1;
+ while (depth !== 0) {
+ tok = this.get(false);
+ arg.push(tok);
+ if (tok.text === "{") {
+ ++depth;
+ } else if (tok.text === "}") {
+ --depth;
+ } else if (tok.text === "EOF") {
+ throw new _ParseError2.default("End of input in macro argument", startOfArg);
+ }
+ }
+ arg.pop(); // remove last }
+ arg.reverse(); // like above, to fit in with stack order
+ args[i] = arg;
+ } else if (startOfArg.text === "EOF") {
+ throw new _ParseError2.default("End of input expecting macro argument", topToken);
+ } else {
+ args[i] = [startOfArg];
+ }
+ }
+ // paste arguments in place of the placeholders
+ expansion = expansion.slice(); // make a shallow copy
+ for (i = expansion.length - 1; i >= 0; --i) {
+ tok = expansion[i];
+ if (tok.text === "#") {
+ if (i === 0) {
+ throw new _ParseError2.default("Incomplete placeholder at end of macro body", tok);
+ }
+ tok = expansion[--i]; // next token on stack
+ if (tok.text === "#") {
+ // ## → #
+ expansion.splice(i + 1, 1); // drop first #
+ } else if (/^[1-9]$/.test(tok.text)) {
+ // expansion.splice(i, 2, arg[0], arg[1], …)
+ // to replace placeholder with the indicated argument.
+ // TODO: use spread once we move to ES2015
+ expansion.splice.apply(expansion, [i, 2].concat(args[tok.text - 1]));
+ } else {
+ throw new _ParseError2.default("Not a valid argument number", tok);
+ }
+ }
+ }
+ }
+ this.stack = this.stack.concat(expansion);
+ }
+ },
+ },
+ {
+ key: "get",
+ value: function get(ignoreSpace) {
+ this.discardedWhiteSpace = [];
+ var token = this.nextToken();
+ if (ignoreSpace) {
+ while (token.text === " ") {
+ this.discardedWhiteSpace.push(token);
+ token = this.nextToken();
+ }
+ }
+ return token;
+ },
+
+ /**
+ * Undo the effect of the preceding call to the get method.
+ * A call to this method MUST be immediately preceded and immediately followed
+ * by a call to get. Only used during mode switching, i.e. after one token
+ * was got in the old mode but should get got again in a new mode
+ * with possibly different whitespace handling.
+ */
+ },
+ {
+ key: "unget",
+ value: function unget(token) {
+ this.stack.push(token);
+ while (this.discardedWhiteSpace.length !== 0) {
+ this.stack.push(this.discardedWhiteSpace.pop());
+ }
+ },
+ },
+ ]);
+ return MacroExpander;
+ })();
+
+ module.exports = MacroExpander;
+ },
+ {
+ "./Lexer": 26,
+ "./ParseError": 29,
+ "./macros": 44,
+ "babel-runtime/helpers/classCallCheck": 4,
+ "babel-runtime/helpers/createClass": 5,
+ "object-assign": 25,
+ },
+ ],
+ 28: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _createClass2 = require("babel-runtime/helpers/createClass");
+
+ var _createClass3 = _interopRequireDefault(_createClass2);
+
+ var _fontMetrics2 = require("./fontMetrics");
+
+ var _fontMetrics3 = _interopRequireDefault(_fontMetrics2);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ var BASESIZE = 6; /**
+ * This file contains information about the options that the Parser carries
+ * around with it while parsing. Data is held in an `Options` object, and when
+ * recursing, a new `Options` object can be created with the `.with*` and
+ * `.reset` functions.
+ */
+
+ var sizeStyleMap = [
+ // Each element contains [textsize, scriptsize, scriptscriptsize].
+ // The size mappings are taken from TeX with \normalsize=10pt.
+ [1, 1, 1], // size1: [5, 5, 5] \tiny
+ [2, 1, 1], // size2: [6, 5, 5]
+ [3, 1, 1], // size3: [7, 5, 5] \scriptsize
+ [4, 2, 1], // size4: [8, 6, 5] \footnotesize
+ [5, 2, 1], // size5: [9, 6, 5] \small
+ [6, 3, 1], // size6: [10, 7, 5] \normalsize
+ [7, 4, 2], // size7: [12, 8, 6] \large
+ [8, 6, 3], // size8: [14.4, 10, 7] \Large
+ [9, 7, 6], // size9: [17.28, 12, 10] \LARGE
+ [10, 8, 7], // size10: [20.74, 14.4, 12] \huge
+ [11, 10, 9],
+ ];
+
+ var sizeMultipliers = [
+ // fontMetrics.js:getFontMetrics also uses size indexes, so if
+ // you change size indexes, change that function.
+ 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488,
+ ];
+
+ var sizeAtStyle = function sizeAtStyle(size, style) {
+ return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];
+ };
+
+ /**
+ * This is the main options class. It contains the current style, size, color,
+ * and font.
+ *
+ * Options objects should not be modified. To create a new Options with
+ * different properties, call a `.having*` method.
+ */
+
+ var Options = (function () {
+ function Options(data) {
+ (0, _classCallCheck3.default)(this, Options);
+
+ this.style = data.style;
+ this.color = data.color;
+ this.size = data.size || BASESIZE;
+ this.textSize = data.textSize || this.size;
+ this.phantom = data.phantom;
+ this.font = data.font;
+ this.sizeMultiplier = sizeMultipliers[this.size - 1];
+ this._fontMetrics = null;
+ }
+
+ /**
+ * Returns a new options object with the same properties as "this". Properties
+ * from "extension" will be copied to the new options object.
+ */
+
+ (0, _createClass3.default)(Options, [
+ {
+ key: "extend",
+ value: function extend(extension) {
+ var data = {
+ style: this.style,
+ size: this.size,
+ textSize: this.textSize,
+ color: this.color,
+ phantom: this.phantom,
+ font: this.font,
+ };
+
+ for (var key in extension) {
+ if (extension.hasOwnProperty(key)) {
+ data[key] = extension[key];
+ }
+ }
+
+ return new Options(data);
+ },
+
+ /**
+ * Return an options object with the given style. If `this.style === style`,
+ * returns `this`.
+ */
+ },
+ {
+ key: "havingStyle",
+ value: function havingStyle(style) {
+ if (this.style === style) {
+ return this;
+ } else {
+ return this.extend({
+ style: style,
+ size: sizeAtStyle(this.textSize, style),
+ });
+ }
+ },
+
+ /**
+ * Return an options object with a cramped version of the current style. If
+ * the current style is cramped, returns `this`.
+ */
+ },
+ {
+ key: "havingCrampedStyle",
+ value: function havingCrampedStyle() {
+ return this.havingStyle(this.style.cramp());
+ },
+
+ /**
+ * Return an options object with the given size and in at least `\textstyle`.
+ * Returns `this` if appropriate.
+ */
+ },
+ {
+ key: "havingSize",
+ value: function havingSize(size) {
+ if (this.size === size && this.textSize === size) {
+ return this;
+ } else {
+ return this.extend({
+ style: this.style.text(),
+ size: size,
+ textSize: size,
+ });
+ }
+ },
+
+ /**
+ * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
+ * changes to at least `\textstyle`.
+ */
+ },
+ {
+ key: "havingBaseStyle",
+ value: function havingBaseStyle(style) {
+ style = style || this.style.text();
+ var wantSize = sizeAtStyle(BASESIZE, style);
+ if (this.size === wantSize && this.textSize === BASESIZE && this.style === style) {
+ return this;
+ } else {
+ return this.extend({
+ style: style,
+ size: wantSize,
+ baseSize: BASESIZE,
+ });
+ }
+ },
+
+ /**
+ * Create a new options object with the given color.
+ */
+ },
+ {
+ key: "withColor",
+ value: function withColor(color) {
+ return this.extend({
+ color: color,
+ });
+ },
+
+ /**
+ * Create a new options object with "phantom" set to true.
+ */
+ },
+ {
+ key: "withPhantom",
+ value: function withPhantom() {
+ return this.extend({
+ phantom: true,
+ });
+ },
+
+ /**
+ * Create a new options objects with the give font.
+ */
+ },
+ {
+ key: "withFont",
+ value: function withFont(font) {
+ return this.extend({
+ font: font || this.font,
+ });
+ },
+
+ /**
+ * Return the CSS sizing classes required to switch from enclosing options
+ * `oldOptions` to `this`. Returns an array of classes.
+ */
+ },
+ {
+ key: "sizingClasses",
+ value: function sizingClasses(oldOptions) {
+ if (oldOptions.size !== this.size) {
+ return ["sizing", "reset-size" + oldOptions.size, "size" + this.size];
+ } else {
+ return [];
+ }
+ },
+
+ /**
+ * Return the CSS sizing classes required to switch to the base size. Like
+ * `this.havingSize(BASESIZE).sizingClasses(this)`.
+ */
+ },
+ {
+ key: "baseSizingClasses",
+ value: function baseSizingClasses() {
+ if (this.size !== BASESIZE) {
+ return ["sizing", "reset-size" + this.size, "size" + BASESIZE];
+ } else {
+ return [];
+ }
+ },
+
+ /**
+ * Return the font metrics for this size.
+ */
+ },
+ {
+ key: "fontMetrics",
+ value: function fontMetrics() {
+ if (!this._fontMetrics) {
+ this._fontMetrics = _fontMetrics3.default.getFontMetrics(this.size);
+ }
+ return this._fontMetrics;
+ },
+
+ /**
+ * A map of color names to CSS colors.
+ * TODO(emily): Remove this when we have real macros
+ */
+ },
+ {
+ key: "getColor",
+
+ /**
+ * Gets the CSS color of the current options object, accounting for the
+ * `colorMap`.
+ */
+ value: function getColor() {
+ if (this.phantom) {
+ return "transparent";
+ } else {
+ return Options.colorMap[this.color] || this.color;
+ }
+ },
+ },
+ ]);
+ return Options;
+ })();
+
+ /**
+ * The base size index.
+ */
+
+ Options.colorMap = {
+ "katex-blue": "#6495ed",
+ "katex-orange": "#ffa500",
+ "katex-pink": "#ff00af",
+ "katex-red": "#df0030",
+ "katex-green": "#28ae7b",
+ "katex-gray": "gray",
+ "katex-purple": "#9d38bd",
+ "katex-blueA": "#ccfaff",
+ "katex-blueB": "#80f6ff",
+ "katex-blueC": "#63d9ea",
+ "katex-blueD": "#11accd",
+ "katex-blueE": "#0c7f99",
+ "katex-tealA": "#94fff5",
+ "katex-tealB": "#26edd5",
+ "katex-tealC": "#01d1c1",
+ "katex-tealD": "#01a995",
+ "katex-tealE": "#208170",
+ "katex-greenA": "#b6ffb0",
+ "katex-greenB": "#8af281",
+ "katex-greenC": "#74cf70",
+ "katex-greenD": "#1fab54",
+ "katex-greenE": "#0d923f",
+ "katex-goldA": "#ffd0a9",
+ "katex-goldB": "#ffbb71",
+ "katex-goldC": "#ff9c39",
+ "katex-goldD": "#e07d10",
+ "katex-goldE": "#a75a05",
+ "katex-redA": "#fca9a9",
+ "katex-redB": "#ff8482",
+ "katex-redC": "#f9685d",
+ "katex-redD": "#e84d39",
+ "katex-redE": "#bc2612",
+ "katex-maroonA": "#ffbde0",
+ "katex-maroonB": "#ff92c6",
+ "katex-maroonC": "#ed5fa6",
+ "katex-maroonD": "#ca337c",
+ "katex-maroonE": "#9e034e",
+ "katex-purpleA": "#ddd7ff",
+ "katex-purpleB": "#c6b9fc",
+ "katex-purpleC": "#aa87ff",
+ "katex-purpleD": "#7854ab",
+ "katex-purpleE": "#543b78",
+ "katex-mintA": "#f5f9e8",
+ "katex-mintB": "#edf2df",
+ "katex-mintC": "#e0e5cc",
+ "katex-grayA": "#f6f7f7",
+ "katex-grayB": "#f0f1f2",
+ "katex-grayC": "#e3e5e6",
+ "katex-grayD": "#d6d8da",
+ "katex-grayE": "#babec2",
+ "katex-grayF": "#888d93",
+ "katex-grayG": "#626569",
+ "katex-grayH": "#3b3e40",
+ "katex-grayI": "#21242c",
+ "katex-kaBlue": "#314453",
+ "katex-kaGreen": "#71B307",
+ };
+ Options.BASESIZE = BASESIZE;
+
+ module.exports = Options;
+ },
+ {
+ "./fontMetrics": 41,
+ "babel-runtime/helpers/classCallCheck": 4,
+ "babel-runtime/helpers/createClass": 5,
+ },
+ ],
+ 29: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * This is the ParseError class, which is the main error thrown by KaTeX
+ * functions when something has gone wrong. This is used to distinguish internal
+ * errors from errors in the expression that the user provided.
+ *
+ * If possible, a caller should provide a Token or ParseNode with information
+ * about where in the source string the problem occurred.
+ *
+ * @param {string} message The error message
+ * @param {(Token|ParseNode)=} token An object providing position information
+ */
+ var ParseError = function ParseError(message, token) {
+ (0, _classCallCheck3.default)(this, ParseError);
+
+ var error = "KaTeX parse error: " + message;
+ var start = void 0;
+ var end = void 0;
+
+ if (token && token.lexer && token.start <= token.end) {
+ // If we have the input and a position, make the error a bit fancier
+
+ // Get the input
+ var input = token.lexer.input;
+
+ // Prepend some information
+ start = token.start;
+ end = token.end;
+ if (start === input.length) {
+ error += " at end of input: ";
+ } else {
+ error += " at position " + (start + 1) + ": ";
+ }
+
+ // Underline token in question using combining underscores
+ var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332");
+
+ // Extract some context from the input and add it to the error
+ var left = void 0;
+ if (start > 15) {
+ left = "…" + input.slice(start - 15, start);
+ } else {
+ left = input.slice(0, start);
+ }
+ var right = void 0;
+ if (end + 15 < input.length) {
+ right = input.slice(end, end + 15) + "…";
+ } else {
+ right = input.slice(end);
+ }
+ error += left + underlined + right;
+ }
+
+ // Some hackery to make ParseError a prototype of Error
+ // See http://stackoverflow.com/a/8460753
+ var self = new Error(error);
+ self.name = "ParseError";
+ self.__proto__ = ParseError.prototype;
+
+ self.position = start;
+ return self;
+ };
+
+ // More hackery
+
+ ParseError.prototype.__proto__ = Error.prototype;
+
+ module.exports = ParseError;
+ },
+ { "babel-runtime/helpers/classCallCheck": 4 },
+ ],
+ 30: [
+ function (require, module, exports) {
+ Object.defineProperty(exports, "__esModule", {
+ value: true,
+ });
+
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * The resulting parse tree nodes of the parse tree.
+ *
+ * It is possible to provide position information, so that a ParseNode can
+ * fulfil a role similar to a Token in error reporting.
+ * For details on the corresponding properties see Token constructor.
+ * Providing such information can lead to better error reporting.
+ *
+ * @param {string} type type of node, like e.g. "ordgroup"
+ * @param {?object} value type-specific representation of the node
+ * @param {string} mode parse mode in action for this node,
+ * "math" or "text"
+ * @param {Token=} firstToken first token of the input for this node,
+ * will omit position information if unset
+ * @param {Token=} lastToken last token of the input for this node,
+ * will default to firstToken if unset
+ */
+ var ParseNode = function ParseNode(type, value, mode, firstToken, lastToken) {
+ (0, _classCallCheck3.default)(this, ParseNode);
+
+ this.type = type;
+ this.value = value;
+ this.mode = mode;
+ if (firstToken && (!lastToken || lastToken.lexer === firstToken.lexer)) {
+ this.lexer = firstToken.lexer;
+ this.start = firstToken.start;
+ this.end = (lastToken || firstToken).end;
+ }
+ };
+
+ exports.default = ParseNode;
+ },
+ { "babel-runtime/helpers/classCallCheck": 4 },
+ ],
+ 31: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _createClass2 = require("babel-runtime/helpers/createClass");
+
+ var _createClass3 = _interopRequireDefault(_createClass2);
+
+ var _functions = require("./functions");
+
+ var _functions2 = _interopRequireDefault(_functions);
+
+ var _environments = require("./environments");
+
+ var _environments2 = _interopRequireDefault(_environments);
+
+ var _MacroExpander = require("./MacroExpander");
+
+ var _MacroExpander2 = _interopRequireDefault(_MacroExpander);
+
+ var _symbols = require("./symbols");
+
+ var _symbols2 = _interopRequireDefault(_symbols);
+
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ var _units = require("./units");
+
+ var _units2 = _interopRequireDefault(_units);
+
+ var _unicodeRegexes = require("./unicodeRegexes");
+
+ var _ParseNode = require("./ParseNode");
+
+ var _ParseNode2 = _interopRequireDefault(_ParseNode);
+
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * This file contains the parser used to parse out a TeX expression from the
+ * input. Since TeX isn't context-free, standard parsers don't work particularly
+ * well.
+ *
+ * The strategy of this parser is as such:
+ *
+ * The main functions (the `.parse...` ones) take a position in the current
+ * parse string to parse tokens from. The lexer (found in Lexer.js, stored at
+ * this.lexer) also supports pulling out tokens at arbitrary places. When
+ * individual tokens are needed at a position, the lexer is called to pull out a
+ * token, which is then used.
+ *
+ * The parser has a property called "mode" indicating the mode that
+ * the parser is currently in. Currently it has to be one of "math" or
+ * "text", which denotes whether the current environment is a math-y
+ * one or a text-y one (e.g. inside \text). Currently, this serves to
+ * limit the functions which can be used in text mode.
+ *
+ * The main functions then return an object which contains the useful data that
+ * was parsed at its given point, and a new position at the end of the parsed
+ * data. The main functions can call each other and continue the parsing by
+ * using the returned position as a new starting point.
+ *
+ * There are also extra `.handle...` functions, which pull out some reused
+ * functionality into self-contained functions.
+ *
+ * The earlier functions return ParseNodes.
+ * The later functions (which are called deeper in the parse) sometimes return
+ * ParseFuncOrArgument, which contain a ParseNode as well as some data about
+ * whether the parsed object is a function which is missing some arguments, or a
+ * standalone object which can be used as an argument to another function.
+ */
+
+ /**
+ * An initial function (without its arguments), or an argument to a function.
+ * The `result` argument should be a ParseNode.
+ */
+ function ParseFuncOrArgument(result, isFunction, token) {
+ this.result = result;
+ // Is this a function (i.e. is it something defined in functions.js)?
+ this.isFunction = isFunction;
+ this.token = token;
+ } /* eslint no-constant-condition:0 */
+
+ var Parser = (function () {
+ function Parser(input, settings) {
+ (0, _classCallCheck3.default)(this, Parser);
+
+ // Create a new macro expander (gullet) and (indirectly via that) also a
+ // new lexer (mouth) for this parser (stomach, in the language of TeX)
+ this.gullet = new _MacroExpander2.default(input, settings.macros);
+ // Use old \color behavior (same as LaTeX's \textcolor) if requested.
+ // We do this after the macros object has been copied by MacroExpander.
+ if (settings.colorIsTextColor) {
+ this.gullet.macros["\\color"] = "\\textcolor";
+ }
+ // Store the settings for use in parsing
+ this.settings = settings;
+ // Count leftright depth (for \middle errors)
+ this.leftrightDepth = 0;
+ }
+
+ /**
+ * Checks a result to make sure it has the right type, and throws an
+ * appropriate error otherwise.
+ *
+ * @param {boolean=} consume whether to consume the expected token,
+ * defaults to true
+ */
+
+ (0, _createClass3.default)(Parser, [
+ {
+ key: "expect",
+ value: function expect(text, consume) {
+ if (this.nextToken.text !== text) {
+ throw new _ParseError2.default("Expected '" + text + "', got '" + this.nextToken.text + "'", this.nextToken);
+ }
+ if (consume !== false) {
+ this.consume();
+ }
+ },
+
+ /**
+ * Considers the current look ahead token as consumed,
+ * and fetches the one after that as the new look ahead.
+ */
+ },
+ {
+ key: "consume",
+ value: function consume() {
+ this.nextToken = this.gullet.get(this.mode === "math");
+ },
+ },
+ {
+ key: "switchMode",
+ value: function switchMode(newMode) {
+ this.gullet.unget(this.nextToken);
+ this.mode = newMode;
+ this.consume();
+ },
+
+ /**
+ * Main parsing function, which parses an entire input.
+ *
+ * @return {?Array.}
+ */
+ },
+ {
+ key: "parse",
+ value: function parse() {
+ // Try to parse the input
+ this.mode = "math";
+ this.consume();
+ var parse = this.parseInput();
+ return parse;
+ },
+
+ /**
+ * Parses an entire input tree.
+ */
+ },
+ {
+ key: "parseInput",
+ value: function parseInput() {
+ // Parse an expression
+ var expression = this.parseExpression(false);
+ // If we succeeded, make sure there's an EOF at the end
+ this.expect("EOF", false);
+ return expression;
+ },
+ },
+ {
+ key: "parseExpression",
+
+ /**
+ * Parses an "expression", which is a list of atoms.
+ *
+ * @param {boolean} breakOnInfix Should the parsing stop when we hit infix
+ * nodes? This happens when functions have higher precendence
+ * than infix nodes in implicit parses.
+ *
+ * @param {?string} breakOnTokenText The text of the token that the expression
+ * should end with, or `null` if something else should end the
+ * expression.
+ *
+ * @return {ParseNode}
+ */
+ value: function parseExpression(breakOnInfix, breakOnTokenText) {
+ var body = [];
+ // Keep adding atoms to the body until we can't parse any more atoms (either
+ // we reached the end, a }, or a \right)
+ while (true) {
+ var lex = this.nextToken;
+ if (Parser.endOfExpression.indexOf(lex.text) !== -1) {
+ break;
+ }
+ if (breakOnTokenText && lex.text === breakOnTokenText) {
+ break;
+ }
+ if (breakOnInfix && _functions2.default[lex.text] && _functions2.default[lex.text].infix) {
+ break;
+ }
+ var atom = this.parseAtom();
+ if (!atom) {
+ if (!this.settings.throwOnError && lex.text[0] === "\\") {
+ var errorNode = this.handleUnsupportedCmd();
+ body.push(errorNode);
+ continue;
+ }
+
+ break;
+ }
+ body.push(atom);
+ }
+ return this.handleInfixNodes(body);
+ },
+
+ /**
+ * Rewrites infix operators such as \over with corresponding commands such
+ * as \frac.
+ *
+ * There can only be one infix operator per group. If there's more than one
+ * then the expression is ambiguous. This can be resolved by adding {}.
+ *
+ * @returns {Array}
+ */
+ },
+ {
+ key: "handleInfixNodes",
+ value: function handleInfixNodes(body) {
+ var overIndex = -1;
+ var funcName = void 0;
+
+ for (var i = 0; i < body.length; i++) {
+ var node = body[i];
+ if (node.type === "infix") {
+ if (overIndex !== -1) {
+ throw new _ParseError2.default("only one infix operator per group", node.value.token);
+ }
+ overIndex = i;
+ funcName = node.value.replaceWith;
+ }
+ }
+
+ if (overIndex !== -1) {
+ var numerNode = void 0;
+ var denomNode = void 0;
+
+ var numerBody = body.slice(0, overIndex);
+ var denomBody = body.slice(overIndex + 1);
+
+ if (numerBody.length === 1 && numerBody[0].type === "ordgroup") {
+ numerNode = numerBody[0];
+ } else {
+ numerNode = new _ParseNode2.default("ordgroup", numerBody, this.mode);
+ }
+
+ if (denomBody.length === 1 && denomBody[0].type === "ordgroup") {
+ denomNode = denomBody[0];
+ } else {
+ denomNode = new _ParseNode2.default("ordgroup", denomBody, this.mode);
+ }
+
+ var value = this.callFunction(funcName, [numerNode, denomNode], null);
+ return [new _ParseNode2.default(value.type, value, this.mode)];
+ } else {
+ return body;
+ }
+ },
+
+ // The greediness of a superscript or subscript
+ },
+ {
+ key: "handleSupSubscript",
+
+ /**
+ * Handle a subscript or superscript with nice errors.
+ */
+ value: function handleSupSubscript(name) {
+ var symbolToken = this.nextToken;
+ var symbol = symbolToken.text;
+ this.consume();
+ var group = this.parseGroup();
+
+ if (!group) {
+ if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") {
+ return this.handleUnsupportedCmd();
+ } else {
+ throw new _ParseError2.default("Expected group after '" + symbol + "'", symbolToken);
+ }
+ } else if (group.isFunction) {
+ // ^ and _ have a greediness, so handle interactions with functions'
+ // greediness
+ var funcGreediness = _functions2.default[group.result].greediness;
+ if (funcGreediness > Parser.SUPSUB_GREEDINESS) {
+ return this.parseFunction(group);
+ } else {
+ throw new _ParseError2.default("Got function '" + group.result + "' with no arguments " + "as " + name, symbolToken);
+ }
+ } else {
+ return group.result;
+ }
+ },
+
+ /**
+ * Converts the textual input of an unsupported command into a text node
+ * contained within a color node whose color is determined by errorColor
+ */
+ },
+ {
+ key: "handleUnsupportedCmd",
+ value: function handleUnsupportedCmd() {
+ var text = this.nextToken.text;
+ var textordArray = [];
+
+ for (var i = 0; i < text.length; i++) {
+ textordArray.push(new _ParseNode2.default("textord", text[i], "text"));
+ }
+
+ var textNode = new _ParseNode2.default(
+ "text",
+ {
+ body: textordArray,
+ type: "text",
+ },
+ this.mode
+ );
+
+ var colorNode = new _ParseNode2.default(
+ "color",
+ {
+ color: this.settings.errorColor,
+ value: [textNode],
+ type: "color",
+ },
+ this.mode
+ );
+
+ this.consume();
+ return colorNode;
+ },
+
+ /**
+ * Parses a group with optional super/subscripts.
+ *
+ * @return {?ParseNode}
+ */
+ },
+ {
+ key: "parseAtom",
+ value: function parseAtom() {
+ // The body of an atom is an implicit group, so that things like
+ // \left(x\right)^2 work correctly.
+ var base = this.parseImplicitGroup();
+
+ // In text mode, we don't have superscripts or subscripts
+ if (this.mode === "text") {
+ return base;
+ }
+
+ // Note that base may be empty (i.e. null) at this point.
+
+ var superscript = void 0;
+ var subscript = void 0;
+ while (true) {
+ // Lex the first token
+ var lex = this.nextToken;
+
+ if (lex.text === "\\limits" || lex.text === "\\nolimits") {
+ // We got a limit control
+ if (!base || base.type !== "op") {
+ throw new _ParseError2.default("Limit controls must follow a math operator", lex);
+ } else {
+ var limits = lex.text === "\\limits";
+ base.value.limits = limits;
+ base.value.alwaysHandleSupSub = true;
+ }
+ this.consume();
+ } else if (lex.text === "^") {
+ // We got a superscript start
+ if (superscript) {
+ throw new _ParseError2.default("Double superscript", lex);
+ }
+ superscript = this.handleSupSubscript("superscript");
+ } else if (lex.text === "_") {
+ // We got a subscript start
+ if (subscript) {
+ throw new _ParseError2.default("Double subscript", lex);
+ }
+ subscript = this.handleSupSubscript("subscript");
+ } else if (lex.text === "'") {
+ // We got a prime
+ if (superscript) {
+ throw new _ParseError2.default("Double superscript", lex);
+ }
+ var prime = new _ParseNode2.default("textord", "\\prime", this.mode);
+
+ // Many primes can be grouped together, so we handle this here
+ var primes = [prime];
+ this.consume();
+ // Keep lexing tokens until we get something that's not a prime
+ while (this.nextToken.text === "'") {
+ // For each one, add another prime to the list
+ primes.push(prime);
+ this.consume();
+ }
+ // If there's a superscript following the primes, combine that
+ // superscript in with the primes.
+ if (this.nextToken.text === "^") {
+ primes.push(this.handleSupSubscript("superscript"));
+ }
+ // Put everything into an ordgroup as the superscript
+ superscript = new _ParseNode2.default("ordgroup", primes, this.mode);
+ } else {
+ // If it wasn't ^, _, or ', stop parsing super/subscripts
+ break;
+ }
+ }
+
+ if (superscript || subscript) {
+ // If we got either a superscript or subscript, create a supsub
+ return new _ParseNode2.default(
+ "supsub",
+ {
+ base: base,
+ sup: superscript,
+ sub: subscript,
+ },
+ this.mode
+ );
+ } else {
+ // Otherwise return the original body
+ return base;
+ }
+ },
+
+ // A list of the size-changing functions, for use in parseImplicitGroup
+
+ // A list of the style-changing functions, for use in parseImplicitGroup
+
+ // Old font functions
+ },
+ {
+ key: "parseImplicitGroup",
+
+ /**
+ * Parses an implicit group, which is a group that starts at the end of a
+ * specified, and ends right before a higher explicit group ends, or at EOL. It
+ * is used for functions that appear to affect the current style, like \Large or
+ * \textrm, where instead of keeping a style we just pretend that there is an
+ * implicit grouping after it until the end of the group. E.g.
+ * small text {\Large large text} small text again
+ * It is also used for \left and \right to get the correct grouping.
+ *
+ * @return {?ParseNode}
+ */
+ value: function parseImplicitGroup() {
+ var start = this.parseSymbol();
+
+ if (start == null) {
+ // If we didn't get anything we handle, fall back to parseFunction
+ return this.parseFunction();
+ }
+
+ var func = start.result;
+
+ if (func === "\\left") {
+ // If we see a left:
+ // Parse the entire left function (including the delimiter)
+ var left = this.parseFunction(start);
+ // Parse out the implicit body
+ ++this.leftrightDepth;
+ var body = this.parseExpression(false);
+ --this.leftrightDepth;
+ // Check the next token
+ this.expect("\\right", false);
+ var right = this.parseFunction();
+ return new _ParseNode2.default(
+ "leftright",
+ {
+ body: body,
+ left: left.value.value,
+ right: right.value.value,
+ },
+ this.mode
+ );
+ } else if (func === "\\begin") {
+ // begin...end is similar to left...right
+ var begin = this.parseFunction(start);
+ var envName = begin.value.name;
+ if (!_environments2.default.hasOwnProperty(envName)) {
+ throw new _ParseError2.default("No such environment: " + envName, begin.value.nameGroup);
+ }
+ // Build the environment object. Arguments and other information will
+ // be made available to the begin and end methods using properties.
+ var env = _environments2.default[envName];
+ var args = this.parseArguments("\\begin{" + envName + "}", env);
+ var context = {
+ mode: this.mode,
+ envName: envName,
+ parser: this,
+ positions: args.pop(),
+ };
+ var result = env.handler(context, args);
+ this.expect("\\end", false);
+ var endNameToken = this.nextToken;
+ var end = this.parseFunction();
+ if (end.value.name !== envName) {
+ throw new _ParseError2.default(
+ "Mismatch: \\begin{" + envName + "} matched " + "by \\end{" + end.value.name + "}",
+ endNameToken
+ );
+ }
+ result.position = end.position;
+ return result;
+ } else if (_utils2.default.contains(Parser.sizeFuncs, func)) {
+ // If we see a sizing function, parse out the implicit body
+ this.consumeSpaces();
+ var _body = this.parseExpression(false);
+ return new _ParseNode2.default(
+ "sizing",
+ {
+ // Figure out what size to use based on the list of functions above
+ size: _utils2.default.indexOf(Parser.sizeFuncs, func) + 1,
+ value: _body,
+ },
+ this.mode
+ );
+ } else if (_utils2.default.contains(Parser.styleFuncs, func)) {
+ // If we see a styling function, parse out the implicit body
+ this.consumeSpaces();
+ var _body2 = this.parseExpression(true);
+ return new _ParseNode2.default(
+ "styling",
+ {
+ // Figure out what style to use by pulling out the style from
+ // the function name
+ style: func.slice(1, func.length - 5),
+ value: _body2,
+ },
+ this.mode
+ );
+ } else if (func in Parser.oldFontFuncs) {
+ var style = Parser.oldFontFuncs[func];
+ // If we see an old font function, parse out the implicit body
+ this.consumeSpaces();
+ var _body3 = this.parseExpression(true);
+ if (style.slice(0, 4) === "text") {
+ return new _ParseNode2.default(
+ "text",
+ {
+ style: style,
+ body: new _ParseNode2.default("ordgroup", _body3, this.mode),
+ },
+ this.mode
+ );
+ } else {
+ return new _ParseNode2.default(
+ "font",
+ {
+ font: style,
+ body: new _ParseNode2.default("ordgroup", _body3, this.mode),
+ },
+ this.mode
+ );
+ }
+ } else if (func === "\\color") {
+ // If we see a styling function, parse out the implicit body
+ var color = this.parseColorGroup(false);
+ if (!color) {
+ throw new _ParseError2.default("\\color not followed by color");
+ }
+ var _body4 = this.parseExpression(true);
+ return new _ParseNode2.default(
+ "color",
+ {
+ type: "color",
+ color: color.result.value,
+ value: _body4,
+ },
+ this.mode
+ );
+ } else if (func === "$") {
+ if (this.mode === "math") {
+ throw new _ParseError2.default("$ within math mode");
+ }
+ this.consume();
+ var outerMode = this.mode;
+ this.switchMode("math");
+ var _body5 = this.parseExpression(false, "$");
+ this.expect("$", true);
+ this.switchMode(outerMode);
+ return new _ParseNode2.default(
+ "styling",
+ {
+ style: "text",
+ value: _body5,
+ },
+ "math"
+ );
+ } else {
+ // Defer to parseFunction if it's not a function we handle
+ return this.parseFunction(start);
+ }
+ },
+
+ /**
+ * Parses an entire function, including its base and all of its arguments.
+ * The base might either have been parsed already, in which case
+ * it is provided as an argument, or it's the next group in the input.
+ *
+ * @param {ParseFuncOrArgument=} baseGroup optional as described above
+ * @return {?ParseNode}
+ */
+ },
+ {
+ key: "parseFunction",
+ value: function parseFunction(baseGroup) {
+ if (!baseGroup) {
+ baseGroup = this.parseGroup();
+ }
+
+ if (baseGroup) {
+ if (baseGroup.isFunction) {
+ var func = baseGroup.result;
+ var funcData = _functions2.default[func];
+ if (this.mode === "text" && !funcData.allowedInText) {
+ throw new _ParseError2.default("Can't use function '" + func + "' in text mode", baseGroup.token);
+ } else if (this.mode === "math" && funcData.allowedInMath === false) {
+ throw new _ParseError2.default("Can't use function '" + func + "' in math mode", baseGroup.token);
+ }
+
+ var args = this.parseArguments(func, funcData);
+ var token = baseGroup.token;
+ var result = this.callFunction(func, args, args.pop(), token);
+ return new _ParseNode2.default(result.type, result, this.mode);
+ } else {
+ return baseGroup.result;
+ }
+ } else {
+ return null;
+ }
+ },
+
+ /**
+ * Call a function handler with a suitable context and arguments.
+ */
+ },
+ {
+ key: "callFunction",
+ value: function callFunction(name, args, positions, token) {
+ var context = {
+ funcName: name,
+ parser: this,
+ positions: positions,
+ token: token,
+ };
+ return _functions2.default[name].handler(context, args);
+ },
+
+ /**
+ * Parses the arguments of a function or environment
+ *
+ * @param {string} func "\name" or "\begin{name}"
+ * @param {{numArgs:number,numOptionalArgs:number|undefined}} funcData
+ * @return the array of arguments, with the list of positions as last element
+ */
+ },
+ {
+ key: "parseArguments",
+ value: function parseArguments(func, funcData) {
+ var totalArgs = funcData.numArgs + funcData.numOptionalArgs;
+ if (totalArgs === 0) {
+ return [[this.pos]];
+ }
+
+ var baseGreediness = funcData.greediness;
+ var positions = [this.pos];
+ var args = [];
+
+ for (var i = 0; i < totalArgs; i++) {
+ var nextToken = this.nextToken;
+ var argType = funcData.argTypes && funcData.argTypes[i];
+ var arg = void 0;
+ if (i < funcData.numOptionalArgs) {
+ if (argType) {
+ arg = this.parseGroupOfType(argType, true);
+ } else {
+ arg = this.parseGroup(true);
+ }
+ if (!arg) {
+ args.push(null);
+ positions.push(this.pos);
+ continue;
+ }
+ } else {
+ if (argType) {
+ arg = this.parseGroupOfType(argType);
+ } else {
+ arg = this.parseGroup();
+ }
+ if (!arg) {
+ if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") {
+ arg = new ParseFuncOrArgument(this.handleUnsupportedCmd(this.nextToken.text), false);
+ } else {
+ throw new _ParseError2.default("Expected group after '" + func + "'", nextToken);
+ }
+ }
+ }
+ var argNode = void 0;
+ if (arg.isFunction) {
+ var argGreediness = _functions2.default[arg.result].greediness;
+ if (argGreediness > baseGreediness) {
+ argNode = this.parseFunction(arg);
+ } else {
+ throw new _ParseError2.default("Got function '" + arg.result + "' as " + "argument to '" + func + "'", nextToken);
+ }
+ } else {
+ argNode = arg.result;
+ }
+ args.push(argNode);
+ positions.push(this.pos);
+ }
+
+ args.push(positions);
+
+ return args;
+ },
+
+ /**
+ * Parses a group when the mode is changing.
+ *
+ * @return {?ParseFuncOrArgument}
+ */
+ },
+ {
+ key: "parseGroupOfType",
+ value: function parseGroupOfType(innerMode, optional) {
+ var outerMode = this.mode;
+ // Handle `original` argTypes
+ if (innerMode === "original") {
+ innerMode = outerMode;
+ }
+
+ if (innerMode === "color") {
+ return this.parseColorGroup(optional);
+ }
+ if (innerMode === "size") {
+ return this.parseSizeGroup(optional);
+ }
+
+ this.switchMode(innerMode);
+ if (innerMode === "text") {
+ // text mode is special because it should ignore the whitespace before
+ // it
+ this.consumeSpaces();
+ }
+ // By the time we get here, innerMode is one of "text" or "math".
+ // We switch the mode of the parser, recurse, then restore the old mode.
+ var res = this.parseGroup(optional);
+ this.switchMode(outerMode);
+ return res;
+ },
+ },
+ {
+ key: "consumeSpaces",
+ value: function consumeSpaces() {
+ while (this.nextToken.text === " ") {
+ this.consume();
+ }
+ },
+
+ /**
+ * Parses a group, essentially returning the string formed by the
+ * brace-enclosed tokens plus some position information.
+ *
+ * @param {string} modeName Used to describe the mode in error messages
+ * @param {boolean=} optional Whether the group is optional or required
+ */
+ },
+ {
+ key: "parseStringGroup",
+ value: function parseStringGroup(modeName, optional) {
+ if (optional && this.nextToken.text !== "[") {
+ return null;
+ }
+ var outerMode = this.mode;
+ this.mode = "text";
+ this.expect(optional ? "[" : "{");
+ var str = "";
+ var firstToken = this.nextToken;
+ var lastToken = firstToken;
+ while (this.nextToken.text !== (optional ? "]" : "}")) {
+ if (this.nextToken.text === "EOF") {
+ throw new _ParseError2.default("Unexpected end of input in " + modeName, firstToken.range(this.nextToken, str));
+ }
+ lastToken = this.nextToken;
+ str += lastToken.text;
+ this.consume();
+ }
+ this.mode = outerMode;
+ this.expect(optional ? "]" : "}");
+ return firstToken.range(lastToken, str);
+ },
+
+ /**
+ * Parses a regex-delimited group: the largest sequence of tokens
+ * whose concatenated strings match `regex`. Returns the string
+ * formed by the tokens plus some position information.
+ *
+ * @param {RegExp} regex
+ * @param {string} modeName Used to describe the mode in error messages
+ */
+ },
+ {
+ key: "parseRegexGroup",
+ value: function parseRegexGroup(regex, modeName) {
+ var outerMode = this.mode;
+ this.mode = "text";
+ var firstToken = this.nextToken;
+ var lastToken = firstToken;
+ var str = "";
+ while (this.nextToken.text !== "EOF" && regex.test(str + this.nextToken.text)) {
+ lastToken = this.nextToken;
+ str += lastToken.text;
+ this.consume();
+ }
+ if (str === "") {
+ throw new _ParseError2.default("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken);
+ }
+ this.mode = outerMode;
+ return firstToken.range(lastToken, str);
+ },
+
+ /**
+ * Parses a color description.
+ */
+ },
+ {
+ key: "parseColorGroup",
+ value: function parseColorGroup(optional) {
+ var res = this.parseStringGroup("color", optional);
+ if (!res) {
+ return null;
+ }
+ var match = /^(#[a-z0-9]+|[a-z]+)$/i.exec(res.text);
+ if (!match) {
+ throw new _ParseError2.default("Invalid color: '" + res.text + "'", res);
+ }
+ return new ParseFuncOrArgument(new _ParseNode2.default("color", match[0], this.mode), false);
+ },
+
+ /**
+ * Parses a size specification, consisting of magnitude and unit.
+ */
+ },
+ {
+ key: "parseSizeGroup",
+ value: function parseSizeGroup(optional) {
+ var res = void 0;
+ if (!optional && this.nextToken.text !== "{") {
+ res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size");
+ } else {
+ res = this.parseStringGroup("size", optional);
+ }
+ if (!res) {
+ return null;
+ }
+ var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text);
+ if (!match) {
+ throw new _ParseError2.default("Invalid size: '" + res.text + "'", res);
+ }
+ var data = {
+ number: +(match[1] + match[2]), // sign + magnitude, cast to number
+ unit: match[3],
+ };
+ if (!_units2.default.validUnit(data)) {
+ throw new _ParseError2.default("Invalid unit: '" + data.unit + "'", res);
+ }
+ return new ParseFuncOrArgument(new _ParseNode2.default("size", data, this.mode), false);
+ },
+
+ /**
+ * If the argument is false or absent, this parses an ordinary group,
+ * which is either a single nucleus (like "x") or an expression
+ * in braces (like "{x+y}").
+ * If the argument is true, it parses either a bracket-delimited expression
+ * (like "[x+y]") or returns null to indicate the absence of a
+ * bracket-enclosed group.
+ *
+ * @param {boolean=} optional Whether the group is optional or required
+ * @return {?ParseFuncOrArgument}
+ */
+ },
+ {
+ key: "parseGroup",
+ value: function parseGroup(optional) {
+ var firstToken = this.nextToken;
+ // Try to parse an open brace
+ if (this.nextToken.text === (optional ? "[" : "{")) {
+ // If we get a brace, parse an expression
+ this.consume();
+ var expression = this.parseExpression(false, optional ? "]" : null);
+ var lastToken = this.nextToken;
+ // Make sure we get a close brace
+ this.expect(optional ? "]" : "}");
+ if (this.mode === "text") {
+ this.formLigatures(expression);
+ }
+ return new ParseFuncOrArgument(new _ParseNode2.default("ordgroup", expression, this.mode, firstToken, lastToken), false);
+ } else {
+ // Otherwise, just return a nucleus, or nothing for an optional group
+ return optional ? null : this.parseSymbol();
+ }
+ },
+
+ /**
+ * Form ligature-like combinations of characters for text mode.
+ * This includes inputs like "--", "---", "``" and "''".
+ * The result will simply replace multiple textord nodes with a single
+ * character in each value by a single textord node having multiple
+ * characters in its value. The representation is still ASCII source.
+ *
+ * @param {Array.} group the nodes of this group,
+ * list will be moified in place
+ */
+ },
+ {
+ key: "formLigatures",
+ value: function formLigatures(group) {
+ var n = group.length - 1;
+ for (var i = 0; i < n; ++i) {
+ var a = group[i];
+ var v = a.value;
+ if (v === "-" && group[i + 1].value === "-") {
+ if (i + 1 < n && group[i + 2].value === "-") {
+ group.splice(i, 3, new _ParseNode2.default("textord", "---", "text", a, group[i + 2]));
+ n -= 2;
+ } else {
+ group.splice(i, 2, new _ParseNode2.default("textord", "--", "text", a, group[i + 1]));
+ n -= 1;
+ }
+ }
+ if ((v === "'" || v === "`") && group[i + 1].value === v) {
+ group.splice(i, 2, new _ParseNode2.default("textord", v + v, "text", a, group[i + 1]));
+ n -= 1;
+ }
+ }
+ },
+
+ /**
+ * Parse a single symbol out of the string. Here, we handle both the functions
+ * we have defined, as well as the single character symbols
+ *
+ * @return {?ParseFuncOrArgument}
+ */
+ },
+ {
+ key: "parseSymbol",
+ value: function parseSymbol() {
+ var nucleus = this.nextToken;
+
+ if (_functions2.default[nucleus.text]) {
+ this.consume();
+ // If there exists a function with this name, we return the function and
+ // say that it is a function.
+ return new ParseFuncOrArgument(nucleus.text, true, nucleus);
+ } else if (_symbols2.default[this.mode][nucleus.text]) {
+ this.consume();
+ // Otherwise if this is a no-argument function, find the type it
+ // corresponds to in the symbols map
+ return new ParseFuncOrArgument(
+ new _ParseNode2.default(_symbols2.default[this.mode][nucleus.text].group, nucleus.text, this.mode, nucleus),
+ false,
+ nucleus
+ );
+ } else if (this.mode === "text" && _unicodeRegexes.cjkRegex.test(nucleus.text)) {
+ this.consume();
+ return new ParseFuncOrArgument(new _ParseNode2.default("textord", nucleus.text, this.mode, nucleus), false, nucleus);
+ } else if (nucleus.text === "$") {
+ return new ParseFuncOrArgument(nucleus.text, false, nucleus);
+ } else {
+ return null;
+ }
+ },
+ },
+ ]);
+ return Parser;
+ })();
+
+ Parser.endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"];
+ Parser.SUPSUB_GREEDINESS = 1;
+ Parser.sizeFuncs = [
+ "\\tiny",
+ "\\sixptsize",
+ "\\scriptsize",
+ "\\footnotesize",
+ "\\small",
+ "\\normalsize",
+ "\\large",
+ "\\Large",
+ "\\LARGE",
+ "\\huge",
+ "\\Huge",
+ ];
+ Parser.styleFuncs = ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"];
+ Parser.oldFontFuncs = {
+ "\\rm": "mathrm",
+ "\\sf": "mathsf",
+ "\\tt": "mathtt",
+ "\\bf": "mathbf",
+ "\\it": "mathit",
+ };
+
+ Parser.prototype.ParseNode = _ParseNode2.default;
+
+ module.exports = Parser;
+ },
+ {
+ "./MacroExpander": 27,
+ "./ParseError": 29,
+ "./ParseNode": 30,
+ "./environments": 40,
+ "./functions": 43,
+ "./symbols": 48,
+ "./unicodeRegexes": 49,
+ "./units": 50,
+ "./utils": 51,
+ "babel-runtime/helpers/classCallCheck": 4,
+ "babel-runtime/helpers/createClass": 5,
+ },
+ ],
+ 32: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * The main Settings object
+ *
+ * The current options stored are:
+ * - displayMode: Whether the expression should be typeset as inline math
+ * (false, the default), meaning that the math starts in
+ * \textstyle and is placed in an inline-block); or as display
+ * math (true), meaning that the math starts in \displaystyle
+ * and is placed in a block with vertical margin.
+ */
+ var Settings = function Settings(options) {
+ (0, _classCallCheck3.default)(this, Settings);
+
+ // allow null options
+ options = options || {};
+ this.displayMode = _utils2.default.deflt(options.displayMode, false);
+ this.throwOnError = _utils2.default.deflt(options.throwOnError, true);
+ this.errorColor = _utils2.default.deflt(options.errorColor, "#cc0000");
+ this.macros = options.macros || {};
+ this.colorIsTextColor = _utils2.default.deflt(options.colorIsTextColor, false);
+ }; /**
+ * This is a module for storing settings passed into KaTeX. It correctly handles
+ * default settings.
+ */
+
+ module.exports = Settings;
+ },
+ {
+ "./utils": 51,
+ "babel-runtime/helpers/classCallCheck": 4,
+ },
+ ],
+ 33: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _createClass2 = require("babel-runtime/helpers/createClass");
+
+ var _createClass3 = _interopRequireDefault(_createClass2);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * This file contains information and classes for the various kinds of styles
+ * used in TeX. It provides a generic `Style` class, which holds information
+ * about a specific style. It then provides instances of all the different kinds
+ * of styles possible, and provides functions to move between them and get
+ * information about them.
+ */
+
+ /**
+ * The main style class. Contains a unique id for the style, a size (which is
+ * the same for cramped and uncramped version of a style), and a cramped flag.
+ */
+ var Style = (function () {
+ function Style(id, size, cramped) {
+ (0, _classCallCheck3.default)(this, Style);
+
+ this.id = id;
+ this.size = size;
+ this.cramped = cramped;
+ }
+
+ /**
+ * Get the style of a superscript given a base in the current style.
+ */
+
+ (0, _createClass3.default)(Style, [
+ {
+ key: "sup",
+ value: function sup() {
+ return styles[_sup[this.id]];
+ },
+
+ /**
+ * Get the style of a subscript given a base in the current style.
+ */
+ },
+ {
+ key: "sub",
+ value: function sub() {
+ return styles[_sub[this.id]];
+ },
+
+ /**
+ * Get the style of a fraction numerator given the fraction in the current
+ * style.
+ */
+ },
+ {
+ key: "fracNum",
+ value: function fracNum() {
+ return styles[_fracNum[this.id]];
+ },
+
+ /**
+ * Get the style of a fraction denominator given the fraction in the current
+ * style.
+ */
+ },
+ {
+ key: "fracDen",
+ value: function fracDen() {
+ return styles[_fracDen[this.id]];
+ },
+
+ /**
+ * Get the cramped version of a style (in particular, cramping a cramped style
+ * doesn't change the style).
+ */
+ },
+ {
+ key: "cramp",
+ value: function cramp() {
+ return styles[_cramp[this.id]];
+ },
+
+ /**
+ * Get a text or display version of this style.
+ */
+ },
+ {
+ key: "text",
+ value: function text() {
+ return styles[_text[this.id]];
+ },
+
+ /**
+ * Return if this style is tightly spaced (scriptstyle/scriptscriptstyle)
+ */
+ },
+ {
+ key: "isTight",
+ value: function isTight() {
+ return this.size >= 2;
+ },
+ },
+ ]);
+ return Style;
+ })();
+
+ // IDs of the different styles
+
+ var D = 0;
+ var Dc = 1;
+ var T = 2;
+ var Tc = 3;
+ var S = 4;
+ var Sc = 5;
+ var SS = 6;
+ var SSc = 7;
+
+ // Instances of the different styles
+ var styles = [
+ new Style(D, 0, false),
+ new Style(Dc, 0, true),
+ new Style(T, 1, false),
+ new Style(Tc, 1, true),
+ new Style(S, 2, false),
+ new Style(Sc, 2, true),
+ new Style(SS, 3, false),
+ new Style(SSc, 3, true),
+ ];
+
+ // Lookup tables for switching from one style to another
+ var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];
+ var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];
+ var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];
+ var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];
+ var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];
+ var _text = [D, Dc, T, Tc, T, Tc, T, Tc];
+
+ // We only export some of the styles. Also, we don't export the `Style` class so
+ // no more styles can be generated.
+ module.exports = {
+ DISPLAY: styles[D],
+ TEXT: styles[T],
+ SCRIPT: styles[S],
+ SCRIPTSCRIPT: styles[SS],
+ };
+ },
+ {
+ "babel-runtime/helpers/classCallCheck": 4,
+ "babel-runtime/helpers/createClass": 5,
+ },
+ ],
+ 34: [
+ function (require, module, exports) {
+ var _domTree = require("./domTree");
+
+ var _domTree2 = _interopRequireDefault(_domTree);
+
+ var _fontMetrics = require("./fontMetrics");
+
+ var _fontMetrics2 = _interopRequireDefault(_fontMetrics);
+
+ var _symbols = require("./symbols");
+
+ var _symbols2 = _interopRequireDefault(_symbols);
+
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ // The following have to be loaded from Main-Italic font, using class mainit
+ /* eslint no-console:0 */
+ /**
+ * This module contains general functions that can be used for building
+ * different kinds of domTree nodes in a consistent manner.
+ */
+
+ var mainitLetters = [
+ "\\imath", // dotless i
+ "\\jmath", // dotless j
+ "\\pounds",
+ ];
+
+ /**
+ * Looks up the given symbol in fontMetrics, after applying any symbol
+ * replacements defined in symbol.js
+ */
+ var lookupSymbol = function lookupSymbol(value, fontFamily, mode) {
+ // Replace the value with its replaced value from symbol.js
+ if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) {
+ value = _symbols2.default[mode][value].replace;
+ }
+ return {
+ value: value,
+ metrics: _fontMetrics2.default.getCharacterMetrics(value, fontFamily),
+ };
+ };
+
+ /**
+ * Makes a symbolNode after translation via the list of symbols in symbols.js.
+ * Correctly pulls out metrics for the character, and optionally takes a list of
+ * classes to be attached to the node.
+ *
+ * TODO: make argument order closer to makeSpan
+ * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
+ * should if present come first in `classes`.
+ */
+ var makeSymbol = function makeSymbol(value, fontFamily, mode, options, classes) {
+ var lookup = lookupSymbol(value, fontFamily, mode);
+ var metrics = lookup.metrics;
+ value = lookup.value;
+
+ var symbolNode = void 0;
+ if (metrics) {
+ var italic = metrics.italic;
+ if (mode === "text") {
+ italic = 0;
+ }
+ symbolNode = new _domTree2.default.symbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, classes);
+ } else {
+ // TODO(emily): Figure out a good way to only print this in development
+ typeof console !== "undefined" && console.warn("No character metrics for '" + value + "' in style '" + fontFamily + "'");
+ symbolNode = new _domTree2.default.symbolNode(value, 0, 0, 0, 0, classes);
+ }
+
+ if (options) {
+ symbolNode.maxFontSize = options.sizeMultiplier;
+ if (options.style.isTight()) {
+ symbolNode.classes.push("mtight");
+ }
+ if (options.getColor()) {
+ symbolNode.style.color = options.getColor();
+ }
+ }
+
+ return symbolNode;
+ };
+
+ /**
+ * Makes a symbol in Main-Regular or AMS-Regular.
+ * Used for rel, bin, open, close, inner, and punct.
+ */
+ var mathsym = function mathsym(value, mode, options, classes) {
+ // Decide what font to render the symbol in by its entry in the symbols
+ // table.
+ // Have a special case for when the value = \ because the \ is used as a
+ // textord in unsupported command errors but cannot be parsed as a regular
+ // text ordinal and is therefore not present as a symbol in the symbols
+ // table for text
+ if (value === "\\" || _symbols2.default[mode][value].font === "main") {
+ return makeSymbol(value, "Main-Regular", mode, options, classes);
+ } else {
+ return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
+ }
+ };
+
+ /**
+ * Makes a symbol in the default font for mathords and textords.
+ */
+ var mathDefault = function mathDefault(value, mode, options, classes, type) {
+ if (type === "mathord") {
+ var fontLookup = mathit(value);
+ return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass]));
+ } else if (type === "textord") {
+ var font = _symbols2.default[mode][value] && _symbols2.default[mode][value].font;
+ if (font === "ams") {
+ return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"]));
+ } else {
+ // if (font === "main") {
+ return makeSymbol(value, "Main-Regular", mode, options, classes.concat(["mathrm"]));
+ }
+ } else {
+ throw new Error("unexpected type: " + type + " in mathDefault");
+ }
+ };
+
+ /**
+ * Determines which of the two font names (Main-Italic and Math-Italic) and
+ * corresponding style tags (mainit or mathit) to use for font "mathit",
+ * depending on the symbol. Use this function instead of fontMap for font
+ * "mathit".
+ */
+ var mathit = function mathit(value, mode, options, classes) {
+ if (
+ /[0-9]/.test(value.charAt(0)) ||
+ // glyphs for \imath and \jmath do not exist in Math-Italic so we
+ // need to use Main-Italic instead
+ _utils2.default.contains(mainitLetters, value)
+ ) {
+ return {
+ fontName: "Main-Italic",
+ fontClass: "mainit",
+ };
+ } else {
+ return {
+ fontName: "Math-Italic",
+ fontClass: "mathit",
+ };
+ }
+ };
+
+ /**
+ * Makes either a mathord or textord in the correct font and color.
+ */
+ var makeOrd = function makeOrd(group, options, type) {
+ var mode = group.mode;
+ var value = group.value;
+
+ var classes = ["mord"];
+
+ var font = options.font;
+ if (font) {
+ var fontLookup = void 0;
+ if (font === "mathit" || _utils2.default.contains(mainitLetters, value)) {
+ fontLookup = mathit(value);
+ } else {
+ fontLookup = fontMap[font];
+ }
+ if (lookupSymbol(value, fontLookup.fontName, mode).metrics) {
+ return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass || font]));
+ } else {
+ return mathDefault(value, mode, options, classes, type);
+ }
+ } else {
+ return mathDefault(value, mode, options, classes, type);
+ }
+ };
+
+ /**
+ * Calculate the height, depth, and maxFontSize of an element based on its
+ * children.
+ */
+ var sizeElementFromChildren = function sizeElementFromChildren(elem) {
+ var height = 0;
+ var depth = 0;
+ var maxFontSize = 0;
+
+ if (elem.children) {
+ for (var i = 0; i < elem.children.length; i++) {
+ if (elem.children[i].height > height) {
+ height = elem.children[i].height;
+ }
+ if (elem.children[i].depth > depth) {
+ depth = elem.children[i].depth;
+ }
+ if (elem.children[i].maxFontSize > maxFontSize) {
+ maxFontSize = elem.children[i].maxFontSize;
+ }
+ }
+ }
+
+ elem.height = height;
+ elem.depth = depth;
+ elem.maxFontSize = maxFontSize;
+ };
+
+ /**
+ * Makes a span with the given list of classes, list of children, and options.
+ *
+ * TODO: Ensure that `options` is always provided (currently some call sites
+ * don't pass it).
+ * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which
+ * should if present come first in `classes`.
+ */
+ var makeSpan = function makeSpan(classes, children, options) {
+ var span = new _domTree2.default.span(classes, children, options);
+
+ sizeElementFromChildren(span);
+
+ return span;
+ };
+
+ /**
+ * Prepends the given children to the given span, updating height, depth, and
+ * maxFontSize.
+ */
+ var prependChildren = function prependChildren(span, children) {
+ span.children = children.concat(span.children);
+
+ sizeElementFromChildren(span);
+ };
+
+ /**
+ * Makes a document fragment with the given list of children.
+ */
+ var makeFragment = function makeFragment(children) {
+ var fragment = new _domTree2.default.documentFragment(children);
+
+ sizeElementFromChildren(fragment);
+
+ return fragment;
+ };
+
+ /**
+ * Makes a vertical list by stacking elements and kerns on top of each other.
+ * Allows for many different ways of specifying the positioning method.
+ *
+ * Arguments:
+ * - children: A list of child or kern nodes to be stacked on top of each other
+ * (i.e. the first element will be at the bottom, and the last at
+ * the top). Element nodes are specified as
+ * {type: "elem", elem: node}
+ * while kern nodes are specified as
+ * {type: "kern", size: size}
+ * - positionType: The method by which the vlist should be positioned. Valid
+ * values are:
+ * - "individualShift": The children list only contains elem
+ * nodes, and each node contains an extra
+ * "shift" value of how much it should be
+ * shifted (note that shifting is always
+ * moving downwards). positionData is
+ * ignored.
+ * - "top": The positionData specifies the topmost point of
+ * the vlist (note this is expected to be a height,
+ * so positive values move up)
+ * - "bottom": The positionData specifies the bottommost point
+ * of the vlist (note this is expected to be a
+ * depth, so positive values move down
+ * - "shift": The vlist will be positioned such that its
+ * baseline is positionData away from the baseline
+ * of the first child. Positive values move
+ * downwards.
+ * - "firstBaseline": The vlist will be positioned such that
+ * its baseline is aligned with the
+ * baseline of the first child.
+ * positionData is ignored. (this is
+ * equivalent to "shift" with
+ * positionData=0)
+ * - positionData: Data used in different ways depending on positionType
+ * - options: An Options object
+ *
+ */
+ var makeVList = function makeVList(children, positionType, positionData, options) {
+ var depth = void 0;
+ var currPos = void 0;
+ var i = void 0;
+ if (positionType === "individualShift") {
+ var oldChildren = children;
+ children = [oldChildren[0]];
+
+ // Add in kerns to the list of children to get each element to be
+ // shifted to the correct specified shift
+ depth = -oldChildren[0].shift - oldChildren[0].elem.depth;
+ currPos = depth;
+ for (i = 1; i < oldChildren.length; i++) {
+ var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;
+ var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);
+
+ currPos = currPos + diff;
+
+ children.push({
+ type: "kern",
+ size: size,
+ });
+ children.push(oldChildren[i]);
+ }
+ } else if (positionType === "top") {
+ // We always start at the bottom, so calculate the bottom by adding up
+ // all the sizes
+ var bottom = positionData;
+ for (i = 0; i < children.length; i++) {
+ if (children[i].type === "kern") {
+ bottom -= children[i].size;
+ } else {
+ bottom -= children[i].elem.height + children[i].elem.depth;
+ }
+ }
+ depth = bottom;
+ } else if (positionType === "bottom") {
+ depth = -positionData;
+ } else if (positionType === "shift") {
+ depth = -children[0].elem.depth - positionData;
+ } else if (positionType === "firstBaseline") {
+ depth = -children[0].elem.depth;
+ } else {
+ depth = 0;
+ }
+
+ // Create a strut that is taller than any list item. The strut is added to
+ // each item, where it will determine the item's baseline. Since it has
+ // `overflow:hidden`, the strut's top edge will sit on the item's line box's
+ // top edge and the strut's bottom edge will sit on the item's baseline,
+ // with no additional line-height spacing. This allows the item baseline to
+ // be positioned precisely without worrying about font ascent and
+ // line-height.
+ var pstrutSize = 0;
+ for (i = 0; i < children.length; i++) {
+ if (children[i].type === "elem") {
+ var child = children[i].elem;
+ pstrutSize = Math.max(pstrutSize, child.maxFontSize, child.height);
+ }
+ }
+ pstrutSize += 2;
+ var pstrut = makeSpan(["pstrut"], []);
+ pstrut.style.height = pstrutSize + "em";
+
+ // Create a new list of actual children at the correct offsets
+ var realChildren = [];
+ var minPos = depth;
+ var maxPos = depth;
+ currPos = depth;
+ for (i = 0; i < children.length; i++) {
+ if (children[i].type === "kern") {
+ currPos += children[i].size;
+ } else {
+ var _child = children[i].elem;
+
+ var childWrap = makeSpan([], [pstrut, _child]);
+ childWrap.style.top = -pstrutSize - currPos - _child.depth + "em";
+ if (children[i].marginLeft) {
+ childWrap.style.marginLeft = children[i].marginLeft;
+ }
+ if (children[i].marginRight) {
+ childWrap.style.marginRight = children[i].marginRight;
+ }
+
+ realChildren.push(childWrap);
+ currPos += _child.height + _child.depth;
+ }
+ minPos = Math.min(minPos, currPos);
+ maxPos = Math.max(maxPos, currPos);
+ }
+
+ // The vlist contents go in a table-cell with `vertical-align:bottom`.
+ // This cell's bottom edge will determine the containing table's baseline
+ // without overly expanding the containing line-box.
+ var vlist = makeSpan(["vlist"], realChildren);
+ vlist.style.height = maxPos + "em";
+
+ // A second row is used if necessary to represent the vlist's depth.
+ var rows = void 0;
+ if (minPos < 0) {
+ var depthStrut = makeSpan(["vlist"], []);
+ depthStrut.style.height = -minPos + "em";
+
+ // Safari wants the first row to have inline content; otherwise it
+ // puts the bottom of the *second* row on the baseline.
+ var topStrut = makeSpan(["vlist-s"], [new _domTree2.default.symbolNode("\u200B")]);
+
+ rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])];
+ } else {
+ rows = [makeSpan(["vlist-r"], [vlist])];
+ }
+
+ var vtable = makeSpan(["vlist-t"], rows);
+ if (rows.length === 2) {
+ vtable.classes.push("vlist-t2");
+ }
+ vtable.height = maxPos;
+ vtable.depth = -minPos;
+ return vtable;
+ };
+
+ // A map of spacing functions to their attributes, like size and corresponding
+ // CSS class
+ var spacingFunctions = {
+ "\\qquad": {
+ size: "2em",
+ className: "qquad",
+ },
+ "\\quad": {
+ size: "1em",
+ className: "quad",
+ },
+ "\\enspace": {
+ size: "0.5em",
+ className: "enspace",
+ },
+ "\\;": {
+ size: "0.277778em",
+ className: "thickspace",
+ },
+ "\\:": {
+ size: "0.22222em",
+ className: "mediumspace",
+ },
+ "\\,": {
+ size: "0.16667em",
+ className: "thinspace",
+ },
+ "\\!": {
+ size: "-0.16667em",
+ className: "negativethinspace",
+ },
+ };
+
+ /**
+ * Maps TeX font commands to objects containing:
+ * - variant: string used for "mathvariant" attribute in buildMathML.js
+ * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics
+ */
+ // A map between tex font commands an MathML mathvariant attribute values
+ var fontMap = {
+ // styles
+ mathbf: {
+ variant: "bold",
+ fontName: "Main-Bold",
+ },
+ mathrm: {
+ variant: "normal",
+ fontName: "Main-Regular",
+ },
+ textit: {
+ variant: "italic",
+ fontName: "Main-Italic",
+ },
+
+ // "mathit" is missing because it requires the use of two fonts: Main-Italic
+ // and Math-Italic. This is handled by a special case in makeOrd which ends
+ // up calling mathit.
+
+ // families
+ mathbb: {
+ variant: "double-struck",
+ fontName: "AMS-Regular",
+ },
+ mathcal: {
+ variant: "script",
+ fontName: "Caligraphic-Regular",
+ },
+ mathfrak: {
+ variant: "fraktur",
+ fontName: "Fraktur-Regular",
+ },
+ mathscr: {
+ variant: "script",
+ fontName: "Script-Regular",
+ },
+ mathsf: {
+ variant: "sans-serif",
+ fontName: "SansSerif-Regular",
+ },
+ mathtt: {
+ variant: "monospace",
+ fontName: "Typewriter-Regular",
+ },
+ };
+
+ module.exports = {
+ fontMap: fontMap,
+ makeSymbol: makeSymbol,
+ mathsym: mathsym,
+ makeSpan: makeSpan,
+ makeFragment: makeFragment,
+ makeVList: makeVList,
+ makeOrd: makeOrd,
+ prependChildren: prependChildren,
+ spacingFunctions: spacingFunctions,
+ };
+ },
+ {
+ "./domTree": 39,
+ "./fontMetrics": 41,
+ "./symbols": 48,
+ "./utils": 51,
+ },
+ ],
+ 35: [
+ function (require, module, exports) {
+ var _stringify = require("babel-runtime/core-js/json/stringify");
+
+ var _stringify2 = _interopRequireDefault(_stringify);
+
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ var _Style = require("./Style");
+
+ var _Style2 = _interopRequireDefault(_Style);
+
+ var _buildCommon = require("./buildCommon");
+
+ var _buildCommon2 = _interopRequireDefault(_buildCommon);
+
+ var _delimiter = require("./delimiter");
+
+ var _delimiter2 = _interopRequireDefault(_delimiter);
+
+ var _domTree = require("./domTree");
+
+ var _domTree2 = _interopRequireDefault(_domTree);
+
+ var _units = require("./units");
+
+ var _units2 = _interopRequireDefault(_units);
+
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ var _stretchy = require("./stretchy");
+
+ var _stretchy2 = _interopRequireDefault(_stretchy);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /* eslint no-console:0 */
+ /**
+ * This file does the main work of building a domTree structure from a parse
+ * tree. The entry point is the `buildHTML` function, which takes a parse tree.
+ * Then, the buildExpression, buildGroup, and various groupTypes functions are
+ * called, to produce a final HTML tree.
+ */
+
+ var isSpace = function isSpace(node) {
+ return node instanceof _domTree2.default.span && node.classes[0] === "mspace";
+ };
+
+ // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)
+ // depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,
+ // and the text before Rule 19.
+ var isBin = function isBin(node) {
+ return node && node.classes[0] === "mbin";
+ };
+
+ var isBinLeftCanceller = function isBinLeftCanceller(node, isRealGroup) {
+ // TODO: This code assumes that a node's math class is the first element
+ // of its `classes` array. A later cleanup should ensure this, for
+ // instance by changing the signature of `makeSpan`.
+ if (node) {
+ return _utils2.default.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], node.classes[0]);
+ } else {
+ return isRealGroup;
+ }
+ };
+
+ var isBinRightCanceller = function isBinRightCanceller(node, isRealGroup) {
+ if (node) {
+ return _utils2.default.contains(["mrel", "mclose", "mpunct"], node.classes[0]);
+ } else {
+ return isRealGroup;
+ }
+ };
+
+ /**
+ * Splice out any spaces from `children` starting at position `i`, and return
+ * the spliced-out array. Returns null if `children[i]` does not exist or is not
+ * a space.
+ */
+ var spliceSpaces = function spliceSpaces(children, i) {
+ var j = i;
+ while (j < children.length && isSpace(children[j])) {
+ j++;
+ }
+ if (j === i) {
+ return null;
+ } else {
+ return children.splice(i, j - i);
+ }
+ };
+
+ /**
+ * Take a list of nodes, build them in order, and return a list of the built
+ * nodes. documentFragments are flattened into their contents, so the
+ * returned list contains no fragments. `isRealGroup` is true if `expression`
+ * is a real group (no atoms will be added on either side), as opposed to
+ * a partial group (e.g. one created by \color).
+ */
+ var buildExpression = function buildExpression(expression, options, isRealGroup) {
+ // Parse expressions into `groups`.
+ var groups = [];
+ for (var i = 0; i < expression.length; i++) {
+ var group = expression[i];
+ var output = buildGroup(group, options);
+ if (output instanceof _domTree2.default.documentFragment) {
+ Array.prototype.push.apply(groups, output.children);
+ } else {
+ groups.push(output);
+ }
+ }
+ // At this point `groups` consists entirely of `symbolNode`s and `span`s.
+
+ // Explicit spaces (e.g., \;, \,) should be ignored with respect to atom
+ // spacing (e.g., "add thick space between mord and mrel"). Since CSS
+ // adjacency rules implement atom spacing, spaces should be invisible to
+ // CSS. So we splice them out of `groups` and into the atoms themselves.
+ for (var _i = 0; _i < groups.length; _i++) {
+ var spaces = spliceSpaces(groups, _i);
+ if (spaces) {
+ // Splicing of spaces may have removed all remaining groups.
+ if (_i < groups.length) {
+ // If there is a following group, move space within it.
+ if (groups[_i] instanceof _domTree2.default.symbolNode) {
+ groups[_i] = (0, _buildCommon.makeSpan)([].concat(groups[_i].classes), [groups[_i]]);
+ }
+ _buildCommon2.default.prependChildren(groups[_i], spaces);
+ } else {
+ // Otherwise, put any spaces back at the end of the groups.
+ Array.prototype.push.apply(groups, spaces);
+ break;
+ }
+ }
+ }
+
+ // Binary operators change to ordinary symbols in some contexts.
+ for (var _i2 = 0; _i2 < groups.length; _i2++) {
+ if (isBin(groups[_i2]) && (isBinLeftCanceller(groups[_i2 - 1], isRealGroup) || isBinRightCanceller(groups[_i2 + 1], isRealGroup))) {
+ groups[_i2].classes[0] = "mord";
+ }
+ }
+
+ // Process \\not commands within the group.
+ // TODO(kevinb): Handle multiple \\not commands in a row.
+ // TODO(kevinb): Handle \\not{abc} correctly. The \\not should appear over
+ // the 'a' instead of the 'c'.
+ for (var _i3 = 0; _i3 < groups.length; _i3++) {
+ if (groups[_i3].value === "\u0338" && _i3 + 1 < groups.length) {
+ var children = groups.slice(_i3, _i3 + 2);
+
+ children[0].classes = ["mainrm"];
+ // \u0338 is a combining glyph so we could reorder the children so
+ // that it comes after the other glyph. This works correctly on
+ // most browsers except for Safari. Instead we absolutely position
+ // the glyph and set its right side to match that of the other
+ // glyph which is visually equivalent.
+ children[0].style.position = "absolute";
+ children[0].style.right = "0";
+
+ // Copy the classes from the second glyph to the new container.
+ // This is so it behaves the same as though there was no \\not.
+ var classes = groups[_i3 + 1].classes;
+ var container = (0, _buildCommon.makeSpan)(classes, children);
+
+ // LaTeX adds a space between ords separated by a \\not.
+ if (classes.indexOf("mord") !== -1) {
+ // \glue(\thickmuskip) 2.77771 plus 2.77771
+ container.style.paddingLeft = "0.277771em";
+ }
+
+ // Ensure that the \u0338 is positioned relative to the container.
+ container.style.position = "relative";
+ groups.splice(_i3, 2, container);
+ }
+ }
+
+ return groups;
+ };
+
+ // Return math atom class (mclass) of a domTree.
+ var getTypeOfDomTree = function getTypeOfDomTree(node) {
+ if (node instanceof _domTree2.default.documentFragment) {
+ if (node.children.length) {
+ return getTypeOfDomTree(node.children[node.children.length - 1]);
+ }
+ } else {
+ if (_utils2.default.contains(["mord", "mop", "mbin", "mrel", "mopen", "mclose", "mpunct", "minner"], node.classes[0])) {
+ return node.classes[0];
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Sometimes, groups perform special rules when they have superscripts or
+ * subscripts attached to them. This function lets the `supsub` group know that
+ * its inner element should handle the superscripts and subscripts instead of
+ * handling them itself.
+ */
+ var shouldHandleSupSub = function shouldHandleSupSub(group, options) {
+ if (!group.value.base) {
+ return false;
+ } else {
+ var base = group.value.base;
+ if (base.type === "op") {
+ // Operators handle supsubs differently when they have limits
+ // (e.g. `\displaystyle\sum_2^3`)
+ return base.value.limits && (options.style.size === _Style2.default.DISPLAY.size || base.value.alwaysHandleSupSub);
+ } else if (base.type === "accent") {
+ return isCharacterBox(base.value.base);
+ } else if (base.type === "horizBrace") {
+ var isSup = group.value.sub ? false : true;
+ return isSup === base.value.isOver;
+ } else {
+ return null;
+ }
+ }
+ };
+
+ /**
+ * Sometimes we want to pull out the innermost element of a group. In most
+ * cases, this will just be the group itself, but when ordgroups and colors have
+ * a single element, we want to pull that out.
+ */
+ var getBaseElem = function getBaseElem(group) {
+ if (!group) {
+ return false;
+ } else if (group.type === "ordgroup") {
+ if (group.value.length === 1) {
+ return getBaseElem(group.value[0]);
+ } else {
+ return group;
+ }
+ } else if (group.type === "color") {
+ if (group.value.value.length === 1) {
+ return getBaseElem(group.value.value[0]);
+ } else {
+ return group;
+ }
+ } else if (group.type === "font") {
+ return getBaseElem(group.value.body);
+ } else {
+ return group;
+ }
+ };
+
+ /**
+ * TeXbook algorithms often reference "character boxes", which are simply groups
+ * with a single character in them. To decide if something is a character box,
+ * we find its innermost group, and see if it is a single character.
+ */
+ var isCharacterBox = function isCharacterBox(group) {
+ var baseElem = getBaseElem(group);
+
+ // These are all they types of groups which hold single characters
+ return (
+ baseElem.type === "mathord" ||
+ baseElem.type === "textord" ||
+ baseElem.type === "bin" ||
+ baseElem.type === "rel" ||
+ baseElem.type === "inner" ||
+ baseElem.type === "open" ||
+ baseElem.type === "close" ||
+ baseElem.type === "punct"
+ );
+ };
+
+ var makeNullDelimiter = function makeNullDelimiter(options, classes) {
+ var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses());
+ return (0, _buildCommon.makeSpan)(classes.concat(moreClasses));
+ };
+
+ /**
+ * This is a map of group types to the function used to handle that type.
+ * Simpler types come at the beginning, while complicated types come afterwards.
+ */
+ var groupTypes = {};
+
+ groupTypes.mathord = function (group, options) {
+ return _buildCommon2.default.makeOrd(group, options, "mathord");
+ };
+
+ groupTypes.textord = function (group, options) {
+ return _buildCommon2.default.makeOrd(group, options, "textord");
+ };
+
+ groupTypes.bin = function (group, options) {
+ return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mbin"]);
+ };
+
+ groupTypes.rel = function (group, options) {
+ return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mrel"]);
+ };
+
+ groupTypes.open = function (group, options) {
+ return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mopen"]);
+ };
+
+ groupTypes.close = function (group, options) {
+ return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mclose"]);
+ };
+
+ groupTypes.inner = function (group, options) {
+ return _buildCommon2.default.mathsym(group.value, group.mode, options, ["minner"]);
+ };
+
+ groupTypes.punct = function (group, options) {
+ return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mpunct"]);
+ };
+
+ groupTypes.ordgroup = function (group, options) {
+ return (0, _buildCommon.makeSpan)(["mord"], buildExpression(group.value, options, true), options);
+ };
+
+ groupTypes.text = function (group, options) {
+ var newOptions = options.withFont(group.value.style);
+ var inner = buildExpression(group.value.body, newOptions, true);
+ for (var i = 0; i < inner.length - 1; i++) {
+ if (inner[i].tryCombine(inner[i + 1])) {
+ inner.splice(i + 1, 1);
+ i--;
+ }
+ }
+ return (0, _buildCommon.makeSpan)(["mord", "text"], inner, newOptions);
+ };
+
+ groupTypes.color = function (group, options) {
+ var elements = buildExpression(group.value.value, options.withColor(group.value.color), false);
+
+ // \color isn't supposed to affect the type of the elements it contains.
+ // To accomplish this, we wrap the results in a fragment, so the inner
+ // elements will be able to directly interact with their neighbors. For
+ // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3`
+ return new _buildCommon2.default.makeFragment(elements);
+ };
+
+ groupTypes.supsub = function (group, options) {
+ // Superscript and subscripts are handled in the TeXbook on page
+ // 445-446, rules 18(a-f).
+
+ // Here is where we defer to the inner group if it should handle
+ // superscripts and subscripts itself.
+ if (shouldHandleSupSub(group, options)) {
+ return groupTypes[group.value.base.type](group, options);
+ }
+
+ var base = buildGroup(group.value.base, options);
+ var supm = void 0;
+ var subm = void 0;
+
+ var metrics = options.fontMetrics();
+ var newOptions = void 0;
+
+ // Rule 18a
+ var supShift = 0;
+ var subShift = 0;
+
+ if (group.value.sup) {
+ newOptions = options.havingStyle(options.style.sup());
+ supm = buildGroup(group.value.sup, newOptions, options);
+ if (!isCharacterBox(group.value.base)) {
+ supShift = base.height - (newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier) / options.sizeMultiplier;
+ }
+ }
+
+ if (group.value.sub) {
+ newOptions = options.havingStyle(options.style.sub());
+ subm = buildGroup(group.value.sub, newOptions, options);
+ if (!isCharacterBox(group.value.base)) {
+ subShift = base.depth + (newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier) / options.sizeMultiplier;
+ }
+ }
+
+ // Rule 18c
+ var minSupShift = void 0;
+ if (options.style === _Style2.default.DISPLAY) {
+ minSupShift = metrics.sup1;
+ } else if (options.style.cramped) {
+ minSupShift = metrics.sup3;
+ } else {
+ minSupShift = metrics.sup2;
+ }
+
+ // scriptspace is a font-size-independent size, so scale it
+ // appropriately
+ var multiplier = options.sizeMultiplier;
+ var scriptspace = 0.5 / metrics.ptPerEm / multiplier + "em";
+
+ var supsub = void 0;
+ if (!group.value.sup) {
+ // Rule 18b
+ subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);
+
+ var vlistElem = [
+ {
+ type: "elem",
+ elem: subm,
+ marginRight: scriptspace,
+ },
+ ];
+ // Subscripts shouldn't be shifted by the base's italic correction.
+ // Account for that by shifting the subscript back the appropriate
+ // amount. Note we only do this when the base is a single symbol.
+ if (base instanceof _domTree2.default.symbolNode) {
+ vlistElem[0].marginLeft = -base.italic + "em";
+ }
+
+ supsub = _buildCommon2.default.makeVList(vlistElem, "shift", subShift, options);
+ } else if (!group.value.sub) {
+ // Rule 18c, d
+ supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
+
+ supsub = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "elem",
+ elem: supm,
+ marginRight: scriptspace,
+ },
+ ],
+ "shift",
+ -supShift,
+ options
+ );
+ } else {
+ supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);
+ subShift = Math.max(subShift, metrics.sub2);
+
+ var ruleWidth = metrics.defaultRuleThickness;
+
+ // Rule 18e
+ if (supShift - supm.depth - (subm.height - subShift) < 4 * ruleWidth) {
+ subShift = 4 * ruleWidth - (supShift - supm.depth) + subm.height;
+ var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);
+ if (psi > 0) {
+ supShift += psi;
+ subShift -= psi;
+ }
+ }
+
+ var _vlistElem = [
+ {
+ type: "elem",
+ elem: subm,
+ shift: subShift,
+ marginRight: scriptspace,
+ },
+ {
+ type: "elem",
+ elem: supm,
+ shift: -supShift,
+ marginRight: scriptspace,
+ },
+ ];
+ // See comment above about subscripts not being shifted
+ if (base instanceof _domTree2.default.symbolNode) {
+ _vlistElem[0].marginLeft = -base.italic + "em";
+ }
+
+ supsub = _buildCommon2.default.makeVList(_vlistElem, "individualShift", null, options);
+ }
+
+ // We ensure to wrap the supsub vlist in a span.msupsub to reset text-align
+ var mclass = getTypeOfDomTree(base) || "mord";
+ return (0, _buildCommon.makeSpan)([mclass], [base, (0, _buildCommon.makeSpan)(["msupsub"], [supsub])], options);
+ };
+
+ groupTypes.genfrac = function (group, options) {
+ // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).
+ // Figure out what style this fraction should be in based on the
+ // function used
+ var style = options.style;
+ if (group.value.size === "display") {
+ style = _Style2.default.DISPLAY;
+ } else if (group.value.size === "text") {
+ style = _Style2.default.TEXT;
+ }
+
+ var nstyle = style.fracNum();
+ var dstyle = style.fracDen();
+ var newOptions = void 0;
+
+ newOptions = options.havingStyle(nstyle);
+ var numerm = buildGroup(group.value.numer, newOptions, options);
+
+ newOptions = options.havingStyle(dstyle);
+ var denomm = buildGroup(group.value.denom, newOptions, options);
+
+ var rule = void 0;
+ var ruleWidth = void 0;
+ var ruleSpacing = void 0;
+ if (group.value.hasBarLine) {
+ rule = makeLineSpan("frac-line", options);
+ ruleWidth = rule.height;
+ ruleSpacing = rule.height;
+ } else {
+ rule = null;
+ ruleWidth = 0;
+ ruleSpacing = options.fontMetrics().defaultRuleThickness;
+ }
+
+ // Rule 15b
+ var numShift = void 0;
+ var clearance = void 0;
+ var denomShift = void 0;
+ if (style.size === _Style2.default.DISPLAY.size) {
+ numShift = options.fontMetrics().num1;
+ if (ruleWidth > 0) {
+ clearance = 3 * ruleSpacing;
+ } else {
+ clearance = 7 * ruleSpacing;
+ }
+ denomShift = options.fontMetrics().denom1;
+ } else {
+ if (ruleWidth > 0) {
+ numShift = options.fontMetrics().num2;
+ clearance = ruleSpacing;
+ } else {
+ numShift = options.fontMetrics().num3;
+ clearance = 3 * ruleSpacing;
+ }
+ denomShift = options.fontMetrics().denom2;
+ }
+
+ var frac = void 0;
+ if (ruleWidth === 0) {
+ // Rule 15c
+ var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);
+ if (candidateClearance < clearance) {
+ numShift += 0.5 * (clearance - candidateClearance);
+ denomShift += 0.5 * (clearance - candidateClearance);
+ }
+
+ frac = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "elem",
+ elem: denomm,
+ shift: denomShift,
+ },
+ {
+ type: "elem",
+ elem: numerm,
+ shift: -numShift,
+ },
+ ],
+ "individualShift",
+ null,
+ options
+ );
+ } else {
+ // Rule 15d
+ var axisHeight = options.fontMetrics().axisHeight;
+
+ if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {
+ numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));
+ }
+
+ if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {
+ denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));
+ }
+
+ var midShift = -(axisHeight - 0.5 * ruleWidth);
+
+ frac = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "elem",
+ elem: denomm,
+ shift: denomShift,
+ },
+ {
+ type: "elem",
+ elem: rule,
+ shift: midShift,
+ },
+ {
+ type: "elem",
+ elem: numerm,
+ shift: -numShift,
+ },
+ ],
+ "individualShift",
+ null,
+ options
+ );
+ }
+
+ // Since we manually change the style sometimes (with \dfrac or \tfrac),
+ // account for the possible size change here.
+ newOptions = options.havingStyle(style);
+ frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;
+ frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier;
+
+ // Rule 15e
+ var delimSize = void 0;
+ if (style.size === _Style2.default.DISPLAY.size) {
+ delimSize = options.fontMetrics().delim1;
+ } else {
+ delimSize = options.fontMetrics().delim2;
+ }
+
+ var leftDelim = void 0;
+ var rightDelim = void 0;
+ if (group.value.leftDelim == null) {
+ leftDelim = makeNullDelimiter(options, ["mopen"]);
+ } else {
+ leftDelim = _delimiter2.default.customSizedDelim(group.value.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [
+ "mopen",
+ ]);
+ }
+ if (group.value.rightDelim == null) {
+ rightDelim = makeNullDelimiter(options, ["mclose"]);
+ } else {
+ rightDelim = _delimiter2.default.customSizedDelim(group.value.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [
+ "mclose",
+ ]);
+ }
+
+ return (0, _buildCommon.makeSpan)(
+ ["mord"].concat(newOptions.sizingClasses(options)),
+ [leftDelim, (0, _buildCommon.makeSpan)(["mfrac"], [frac]), rightDelim],
+ options
+ );
+ };
+
+ groupTypes.array = function (group, options) {
+ var r = void 0;
+ var c = void 0;
+ var nr = group.value.body.length;
+ var nc = 0;
+ var body = new Array(nr);
+
+ // Horizontal spacing
+ var pt = 1 / options.fontMetrics().ptPerEm;
+ var arraycolsep = 5 * pt; // \arraycolsep in article.cls
+
+ // Vertical spacing
+ var baselineskip = 12 * pt; // see size10.clo
+ // Default \jot from ltmath.dtx
+ // TODO(edemaine): allow overriding \jot via \setlength (#687)
+ var jot = 3 * pt;
+ // Default \arraystretch from lttab.dtx
+ // TODO(gagern): may get redefined once we have user-defined macros
+ var arraystretch = _utils2.default.deflt(group.value.arraystretch, 1);
+ var arrayskip = arraystretch * baselineskip;
+ var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and
+ var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx
+
+ var totalHeight = 0;
+ for (r = 0; r < group.value.body.length; ++r) {
+ var inrow = group.value.body[r];
+ var height = arstrutHeight; // \@array adds an \@arstrut
+ var depth = arstrutDepth; // to each tow (via the template)
+
+ if (nc < inrow.length) {
+ nc = inrow.length;
+ }
+
+ var outrow = new Array(inrow.length);
+ for (c = 0; c < inrow.length; ++c) {
+ var elt = buildGroup(inrow[c], options);
+ if (depth < elt.depth) {
+ depth = elt.depth;
+ }
+ if (height < elt.height) {
+ height = elt.height;
+ }
+ outrow[c] = elt;
+ }
+
+ var gap = 0;
+ if (group.value.rowGaps[r]) {
+ gap = _units2.default.calculateSize(group.value.rowGaps[r].value, options);
+ if (gap > 0) {
+ // \@argarraycr
+ gap += arstrutDepth;
+ if (depth < gap) {
+ depth = gap; // \@xargarraycr
+ }
+ gap = 0;
+ }
+ }
+ // In AMS multiline environments such as aligned and gathered, rows
+ // correspond to lines that have additional \jot added to the
+ // \baselineskip via \openup.
+ if (group.value.addJot) {
+ depth += jot;
+ }
+
+ outrow.height = height;
+ outrow.depth = depth;
+ totalHeight += height;
+ outrow.pos = totalHeight;
+ totalHeight += depth + gap; // \@yargarraycr
+ body[r] = outrow;
+ }
+
+ var offset = totalHeight / 2 + options.fontMetrics().axisHeight;
+ var colDescriptions = group.value.cols || [];
+ var cols = [];
+ var colSep = void 0;
+ var colDescrNum = void 0;
+ for (
+ c = 0, colDescrNum = 0;
+ // Continue while either there are more columns or more column
+ // descriptions, so trailing separators don't get lost.
+ c < nc || colDescrNum < colDescriptions.length;
+ ++c, ++colDescrNum
+ ) {
+ var colDescr = colDescriptions[colDescrNum] || {};
+
+ var firstSeparator = true;
+ while (colDescr.type === "separator") {
+ // If there is more than one separator in a row, add a space
+ // between them.
+ if (!firstSeparator) {
+ colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []);
+ colSep.style.width = options.fontMetrics().doubleRuleSep + "em";
+ cols.push(colSep);
+ }
+
+ if (colDescr.separator === "|") {
+ var separator = (0, _buildCommon.makeSpan)(["vertical-separator"], []);
+ separator.style.height = totalHeight + "em";
+ separator.style.verticalAlign = -(totalHeight - offset) + "em";
+
+ cols.push(separator);
+ } else {
+ throw new _ParseError2.default("Invalid separator type: " + colDescr.separator);
+ }
+
+ colDescrNum++;
+ colDescr = colDescriptions[colDescrNum] || {};
+ firstSeparator = false;
+ }
+
+ if (c >= nc) {
+ continue;
+ }
+
+ var sepwidth = void 0;
+ if (c > 0 || group.value.hskipBeforeAndAfter) {
+ sepwidth = _utils2.default.deflt(colDescr.pregap, arraycolsep);
+ if (sepwidth !== 0) {
+ colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []);
+ colSep.style.width = sepwidth + "em";
+ cols.push(colSep);
+ }
+ }
+
+ var col = [];
+ for (r = 0; r < nr; ++r) {
+ var row = body[r];
+ var elem = row[c];
+ if (!elem) {
+ continue;
+ }
+ var shift = row.pos - offset;
+ elem.depth = row.depth;
+ elem.height = row.height;
+ col.push({
+ type: "elem",
+ elem: elem,
+ shift: shift,
+ });
+ }
+
+ col = _buildCommon2.default.makeVList(col, "individualShift", null, options);
+ col = (0, _buildCommon.makeSpan)(["col-align-" + (colDescr.align || "c")], [col]);
+ cols.push(col);
+
+ if (c < nc - 1 || group.value.hskipBeforeAndAfter) {
+ sepwidth = _utils2.default.deflt(colDescr.postgap, arraycolsep);
+ if (sepwidth !== 0) {
+ colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []);
+ colSep.style.width = sepwidth + "em";
+ cols.push(colSep);
+ }
+ }
+ }
+ body = (0, _buildCommon.makeSpan)(["mtable"], cols);
+ return (0, _buildCommon.makeSpan)(["mord"], [body], options);
+ };
+
+ groupTypes.spacing = function (group, options) {
+ if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") {
+ // Spaces are generated by adding an actual space. Each of these
+ // things has an entry in the symbols table, so these will be turned
+ // into appropriate outputs.
+ if (group.mode === "text") {
+ return _buildCommon2.default.makeOrd(group, options, "textord");
+ } else {
+ return (0, _buildCommon.makeSpan)(["mspace"], [_buildCommon2.default.mathsym(group.value, group.mode, options)], options);
+ }
+ } else {
+ // Other kinds of spaces are of arbitrary width. We use CSS to
+ // generate these.
+ return (0, _buildCommon.makeSpan)(["mspace", _buildCommon2.default.spacingFunctions[group.value].className], [], options);
+ }
+ };
+
+ groupTypes.llap = function (group, options) {
+ var inner = (0, _buildCommon.makeSpan)(["inner"], [buildGroup(group.value.body, options)]);
+ var fix = (0, _buildCommon.makeSpan)(["fix"], []);
+ return (0, _buildCommon.makeSpan)(["mord", "llap"], [inner, fix], options);
+ };
+
+ groupTypes.rlap = function (group, options) {
+ var inner = (0, _buildCommon.makeSpan)(["inner"], [buildGroup(group.value.body, options)]);
+ var fix = (0, _buildCommon.makeSpan)(["fix"], []);
+ return (0, _buildCommon.makeSpan)(["mord", "rlap"], [inner, fix], options);
+ };
+
+ groupTypes.op = function (group, options) {
+ // Operators are handled in the TeXbook pg. 443-444, rule 13(a).
+ var supGroup = void 0;
+ var subGroup = void 0;
+ var hasLimits = false;
+ if (group.type === "supsub") {
+ // If we have limits, supsub will pass us its group to handle. Pull
+ // out the superscript and subscript and set the group to the op in
+ // its base.
+ supGroup = group.value.sup;
+ subGroup = group.value.sub;
+ group = group.value.base;
+ hasLimits = true;
+ }
+
+ var style = options.style;
+
+ // Most operators have a large successor symbol, but these don't.
+ var noSuccessor = ["\\smallint"];
+
+ var large = false;
+ if (style.size === _Style2.default.DISPLAY.size && group.value.symbol && !_utils2.default.contains(noSuccessor, group.value.body)) {
+ // Most symbol operators get larger in displaystyle (rule 13)
+ large = true;
+ }
+
+ var base = void 0;
+ if (group.value.symbol) {
+ // If this is a symbol, create the symbol.
+ var fontName = large ? "Size2-Regular" : "Size1-Regular";
+ base = _buildCommon2.default.makeSymbol(group.value.body, fontName, "math", options, [
+ "mop",
+ "op-symbol",
+ large ? "large-op" : "small-op",
+ ]);
+ } else if (group.value.value) {
+ // If this is a list, compose that list.
+ var inner = buildExpression(group.value.value, options, true);
+ if (inner.length === 1 && inner[0] instanceof _domTree2.default.symbolNode) {
+ base = inner[0];
+ base.classes[0] = "mop"; // replace old mclass
+ } else {
+ base = (0, _buildCommon.makeSpan)(["mop"], inner, options);
+ }
+ } else {
+ // Otherwise, this is a text operator. Build the text from the
+ // operator's name.
+ // TODO(emily): Add a space in the middle of some of these
+ // operators, like \limsup
+ var output = [];
+ for (var i = 1; i < group.value.body.length; i++) {
+ output.push(_buildCommon2.default.mathsym(group.value.body[i], group.mode));
+ }
+ base = (0, _buildCommon.makeSpan)(["mop"], output, options);
+ }
+
+ // If content of op is a single symbol, shift it vertically.
+ var baseShift = 0;
+ var slant = 0;
+ if (base instanceof _domTree2.default.symbolNode) {
+ // Shift the symbol so its center lies on the axis (rule 13). It
+ // appears that our fonts have the centers of the symbols already
+ // almost on the axis, so these numbers are very small. Note we
+ // don't actually apply this here, but instead it is used either in
+ // the vlist creation or separately when there are no limits.
+ baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight;
+
+ // The slant of the symbol is just its italic correction.
+ slant = base.italic;
+ }
+
+ if (hasLimits) {
+ // IE 8 clips \int if it is in a display: inline-block. We wrap it
+ // in a new span so it is an inline, and works.
+ base = (0, _buildCommon.makeSpan)([], [base]);
+
+ var supm = void 0;
+ var supKern = void 0;
+ var subm = void 0;
+ var subKern = void 0;
+ var newOptions = void 0;
+ // We manually have to handle the superscripts and subscripts. This,
+ // aside from the kern calculations, is copied from supsub.
+ if (supGroup) {
+ newOptions = options.havingStyle(style.sup());
+ supm = buildGroup(supGroup, newOptions, options);
+
+ supKern = Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - supm.depth);
+ }
+
+ if (subGroup) {
+ newOptions = options.havingStyle(style.sub());
+ subm = buildGroup(subGroup, newOptions, options);
+
+ subKern = Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - subm.height);
+ }
+
+ // Build the final group as a vlist of the possible subscript, base,
+ // and possible superscript.
+ var finalGroup = void 0;
+ var top = void 0;
+ var bottom = void 0;
+ if (!supGroup) {
+ top = base.height - baseShift;
+
+ // Shift the limits by the slant of the symbol. Note
+ // that we are supposed to shift the limits by 1/2 of the slant,
+ // but since we are centering the limits adding a full slant of
+ // margin will shift by 1/2 that.
+ finalGroup = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "kern",
+ size: options.fontMetrics().bigOpSpacing5,
+ },
+ {
+ type: "elem",
+ elem: subm,
+ marginLeft: -slant + "em",
+ },
+ {
+ type: "kern",
+ size: subKern,
+ },
+ {
+ type: "elem",
+ elem: base,
+ },
+ ],
+ "top",
+ top,
+ options
+ );
+ } else if (!subGroup) {
+ bottom = base.depth + baseShift;
+
+ finalGroup = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "elem",
+ elem: base,
+ },
+ {
+ type: "kern",
+ size: supKern,
+ },
+ {
+ type: "elem",
+ elem: supm,
+ marginLeft: slant + "em",
+ },
+ {
+ type: "kern",
+ size: options.fontMetrics().bigOpSpacing5,
+ },
+ ],
+ "bottom",
+ bottom,
+ options
+ );
+ } else if (!supGroup && !subGroup) {
+ // This case probably shouldn't occur (this would mean the
+ // supsub was sending us a group with no superscript or
+ // subscript) but be safe.
+ return base;
+ } else {
+ bottom = options.fontMetrics().bigOpSpacing5 + subm.height + subm.depth + subKern + base.depth + baseShift;
+
+ finalGroup = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "kern",
+ size: options.fontMetrics().bigOpSpacing5,
+ },
+ {
+ type: "elem",
+ elem: subm,
+ marginLeft: -slant + "em",
+ },
+ {
+ type: "kern",
+ size: subKern,
+ },
+ {
+ type: "elem",
+ elem: base,
+ },
+ {
+ type: "kern",
+ size: supKern,
+ },
+ {
+ type: "elem",
+ elem: supm,
+ marginLeft: slant + "em",
+ },
+ {
+ type: "kern",
+ size: options.fontMetrics().bigOpSpacing5,
+ },
+ ],
+ "bottom",
+ bottom,
+ options
+ );
+ }
+
+ return (0, _buildCommon.makeSpan)(["mop", "op-limits"], [finalGroup], options);
+ } else {
+ if (baseShift) {
+ base.style.position = "relative";
+ base.style.top = baseShift + "em";
+ }
+
+ return base;
+ }
+ };
+
+ groupTypes.mod = function (group, options) {
+ var inner = [];
+
+ if (group.value.modType === "bmod") {
+ // “\nonscript\mskip-\medmuskip\mkern5mu”
+ if (!options.style.isTight()) {
+ inner.push((0, _buildCommon.makeSpan)(["mspace", "negativemediumspace"], [], options));
+ }
+ inner.push((0, _buildCommon.makeSpan)(["mspace", "thickspace"], [], options));
+ } else if (options.style.size === _Style2.default.DISPLAY.size) {
+ inner.push((0, _buildCommon.makeSpan)(["mspace", "quad"], [], options));
+ } else if (group.value.modType === "mod") {
+ inner.push((0, _buildCommon.makeSpan)(["mspace", "twelvemuspace"], [], options));
+ } else {
+ inner.push((0, _buildCommon.makeSpan)(["mspace", "eightmuspace"], [], options));
+ }
+
+ if (group.value.modType === "pod" || group.value.modType === "pmod") {
+ inner.push(_buildCommon2.default.mathsym("(", group.mode));
+ }
+
+ if (group.value.modType !== "pod") {
+ var modInner = [
+ _buildCommon2.default.mathsym("m", group.mode),
+ _buildCommon2.default.mathsym("o", group.mode),
+ _buildCommon2.default.mathsym("d", group.mode),
+ ];
+ if (group.value.modType === "bmod") {
+ inner.push((0, _buildCommon.makeSpan)(["mbin"], modInner, options));
+ // “\mkern5mu\nonscript\mskip-\medmuskip”
+ inner.push((0, _buildCommon.makeSpan)(["mspace", "thickspace"], [], options));
+ if (!options.style.isTight()) {
+ inner.push((0, _buildCommon.makeSpan)(["mspace", "negativemediumspace"], [], options));
+ }
+ } else {
+ Array.prototype.push.apply(inner, modInner);
+ inner.push((0, _buildCommon.makeSpan)(["mspace", "sixmuspace"], [], options));
+ }
+ }
+
+ if (group.value.value) {
+ Array.prototype.push.apply(inner, buildExpression(group.value.value, options, false));
+ }
+
+ if (group.value.modType === "pod" || group.value.modType === "pmod") {
+ inner.push(_buildCommon2.default.mathsym(")", group.mode));
+ }
+
+ return _buildCommon2.default.makeFragment(inner);
+ };
+
+ groupTypes.katex = function (group, options) {
+ // The KaTeX logo. The offsets for the K and a were chosen to look
+ // good, but the offsets for the T, E, and X were taken from the
+ // definition of \TeX in TeX (see TeXbook pg. 356)
+ var k = (0, _buildCommon.makeSpan)(["k"], [_buildCommon2.default.mathsym("K", group.mode)], options);
+ var a = (0, _buildCommon.makeSpan)(["a"], [_buildCommon2.default.mathsym("A", group.mode)], options);
+
+ a.height = (a.height + 0.2) * 0.75;
+ a.depth = (a.height - 0.2) * 0.75;
+
+ var t = (0, _buildCommon.makeSpan)(["t"], [_buildCommon2.default.mathsym("T", group.mode)], options);
+ var e = (0, _buildCommon.makeSpan)(["e"], [_buildCommon2.default.mathsym("E", group.mode)], options);
+
+ e.height = e.height - 0.2155;
+ e.depth = e.depth + 0.2155;
+
+ var x = (0, _buildCommon.makeSpan)(["x"], [_buildCommon2.default.mathsym("X", group.mode)], options);
+
+ return (0, _buildCommon.makeSpan)(["mord", "katex-logo"], [k, a, t, e, x], options);
+ };
+
+ var makeLineSpan = function makeLineSpan(className, options, thickness) {
+ var line = (0, _buildCommon.makeSpan)([className], [], options);
+ line.height = thickness || options.fontMetrics().defaultRuleThickness;
+ line.style.borderBottomWidth = line.height + "em";
+ line.maxFontSize = 1.0;
+ return line;
+ };
+
+ groupTypes.overline = function (group, options) {
+ // Overlines are handled in the TeXbook pg 443, Rule 9.
+
+ // Build the inner group in the cramped style.
+ var innerGroup = buildGroup(group.value.body, options.havingCrampedStyle());
+
+ // Create the line above the body
+ var line = makeLineSpan("overline-line", options);
+
+ // Generate the vlist, with the appropriate kerns
+ var vlist = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: innerGroup },
+ { type: "kern", size: 3 * line.height },
+ { type: "elem", elem: line },
+ { type: "kern", size: line.height },
+ ],
+ "firstBaseline",
+ null,
+ options
+ );
+
+ return (0, _buildCommon.makeSpan)(["mord", "overline"], [vlist], options);
+ };
+
+ groupTypes.underline = function (group, options) {
+ // Underlines are handled in the TeXbook pg 443, Rule 10.
+ // Build the inner group.
+ var innerGroup = buildGroup(group.value.body, options);
+
+ // Create the line above the body
+ var line = makeLineSpan("underline-line", options);
+
+ // Generate the vlist, with the appropriate kerns
+ var vlist = _buildCommon2.default.makeVList(
+ [
+ { type: "kern", size: line.height },
+ { type: "elem", elem: line },
+ { type: "kern", size: 3 * line.height },
+ { type: "elem", elem: innerGroup },
+ ],
+ "top",
+ innerGroup.height,
+ options
+ );
+
+ return (0, _buildCommon.makeSpan)(["mord", "underline"], [vlist], options);
+ };
+
+ groupTypes.sqrt = function (group, options) {
+ // Square roots are handled in the TeXbook pg. 443, Rule 11.
+
+ // First, we do the same steps as in overline to build the inner group
+ // and line
+ var inner = buildGroup(group.value.body, options.havingCrampedStyle());
+
+ // Some groups can return document fragments. Handle those by wrapping
+ // them in a span.
+ if (inner instanceof _domTree2.default.documentFragment) {
+ inner = (0, _buildCommon.makeSpan)([], [inner], options);
+ }
+
+ // Calculate the minimum size for the \surd delimiter
+ var metrics = options.fontMetrics();
+ var theta = metrics.defaultRuleThickness;
+
+ var phi = theta;
+ if (options.style.id < _Style2.default.TEXT.id) {
+ phi = options.fontMetrics().xHeight;
+ }
+
+ // Calculate the clearance between the body and line
+ var lineClearance = theta + phi / 4;
+
+ var minDelimiterHeight = (inner.height + inner.depth + lineClearance + theta) * options.sizeMultiplier;
+
+ // Create a sqrt SVG of the required minimum size
+ var img = _delimiter2.default.customSizedDelim("\\surd", minDelimiterHeight, false, options, group.mode);
+
+ // Calculate the actual line width.
+ // This actually should depend on the chosen font -- e.g. \boldmath
+ // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
+ // have thicker rules.
+ var ruleWidth = options.fontMetrics().sqrtRuleThickness * img.sizeMultiplier;
+
+ var delimDepth = img.height - ruleWidth;
+
+ // Adjust the clearance based on the delimiter size
+ if (delimDepth > inner.height + inner.depth + lineClearance) {
+ lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;
+ }
+
+ // Shift the sqrt image
+ var imgShift = img.height - inner.height - lineClearance - ruleWidth;
+
+ // We add a special case here, because even when `inner` is empty, we
+ // still get a line. So, we use a simple heuristic to decide if we
+ // should omit the body entirely. (note this doesn't work for something
+ // like `\sqrt{\rlap{x}}`, but if someone is doing that they deserve for
+ // it not to work.
+ var body = void 0;
+ if (inner.height === 0 && inner.depth === 0) {
+ body = (0, _buildCommon.makeSpan)();
+ } else {
+ inner.style.paddingLeft = img.surdWidth + "em";
+
+ // Overlay the image and the argument.
+ body = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: inner },
+ {
+ type: "kern",
+ size: -(inner.height + imgShift),
+ },
+ { type: "elem", elem: img },
+ { type: "kern", size: ruleWidth },
+ ],
+ "firstBaseline",
+ null,
+ options
+ );
+ body.children[0].children[0].classes.push("svg-align");
+ }
+
+ if (!group.value.index) {
+ return (0, _buildCommon.makeSpan)(["mord", "sqrt"], [body], options);
+ } else {
+ // Handle the optional root index
+
+ // The index is always in scriptscript style
+ var newOptions = options.havingStyle(_Style2.default.SCRIPTSCRIPT);
+ var rootm = buildGroup(group.value.index, newOptions, options);
+
+ // The amount the index is shifted by. This is taken from the TeX
+ // source, in the definition of `\r@@t`.
+ var toShift = 0.6 * (body.height - body.depth);
+
+ // Build a VList with the superscript shifted up correctly
+ var rootVList = _buildCommon2.default.makeVList([{ type: "elem", elem: rootm }], "shift", -toShift, options);
+ // Add a class surrounding it so we can add on the appropriate
+ // kerning
+ var rootVListWrap = (0, _buildCommon.makeSpan)(["root"], [rootVList]);
+
+ return (0, _buildCommon.makeSpan)(["mord", "sqrt"], [rootVListWrap, body], options);
+ }
+ };
+
+ function sizingGroup(value, options, baseOptions) {
+ var inner = buildExpression(value, options, false);
+ var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
+
+ // Add size-resetting classes to the inner list and set maxFontSize
+ // manually. Handle nested size changes.
+ for (var i = 0; i < inner.length; i++) {
+ var pos = _utils2.default.indexOf(inner[i].classes, "sizing");
+ if (pos < 0) {
+ Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));
+ } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) {
+ // This is a nested size change: e.g., inner[i] is the "b" in
+ // `\Huge a \small b`. Override the old size (the `reset-` class)
+ // but not the new size.
+ inner[i].classes[pos + 1] = "reset-size" + baseOptions.size;
+ }
+
+ inner[i].height *= multiplier;
+ inner[i].depth *= multiplier;
+ }
+
+ return _buildCommon2.default.makeFragment(inner);
+ }
+
+ groupTypes.sizing = function (group, options) {
+ // Handle sizing operators like \Huge. Real TeX doesn't actually allow
+ // these functions inside of math expressions, so we do some special
+ // handling.
+ var newOptions = options.havingSize(group.value.size);
+ return sizingGroup(group.value.value, newOptions, options);
+ };
+
+ groupTypes.styling = function (group, options) {
+ // Style changes are handled in the TeXbook on pg. 442, Rule 3.
+
+ // Figure out what style we're changing to.
+ var styleMap = {
+ display: _Style2.default.DISPLAY,
+ text: _Style2.default.TEXT,
+ script: _Style2.default.SCRIPT,
+ scriptscript: _Style2.default.SCRIPTSCRIPT,
+ };
+
+ var newStyle = styleMap[group.value.style];
+ var newOptions = options.havingStyle(newStyle);
+ return sizingGroup(group.value.value, newOptions, options);
+ };
+
+ groupTypes.font = function (group, options) {
+ var font = group.value.font;
+ return buildGroup(group.value.body, options.withFont(font));
+ };
+
+ groupTypes.delimsizing = function (group, options) {
+ var delim = group.value.value;
+
+ if (delim === ".") {
+ // Empty delimiters still count as elements, even though they don't
+ // show anything.
+ return (0, _buildCommon.makeSpan)([group.value.mclass]);
+ }
+
+ // Use delimiter.sizedDelim to generate the delimiter.
+ return _delimiter2.default.sizedDelim(delim, group.value.size, options, group.mode, [group.value.mclass]);
+ };
+
+ groupTypes.leftright = function (group, options) {
+ // Build the inner expression
+ var inner = buildExpression(group.value.body, options, true);
+
+ var innerHeight = 0;
+ var innerDepth = 0;
+ var hadMiddle = false;
+
+ // Calculate its height and depth
+ for (var i = 0; i < inner.length; i++) {
+ if (inner[i].isMiddle) {
+ hadMiddle = true;
+ } else {
+ innerHeight = Math.max(inner[i].height, innerHeight);
+ innerDepth = Math.max(inner[i].depth, innerDepth);
+ }
+ }
+
+ // The size of delimiters is the same, regardless of what style we are
+ // in. Thus, to correctly calculate the size of delimiter we need around
+ // a group, we scale down the inner size based on the size.
+ innerHeight *= options.sizeMultiplier;
+ innerDepth *= options.sizeMultiplier;
+
+ var leftDelim = void 0;
+ if (group.value.left === ".") {
+ // Empty delimiters in \left and \right make null delimiter spaces.
+ leftDelim = makeNullDelimiter(options, ["mopen"]);
+ } else {
+ // Otherwise, use leftRightDelim to generate the correct sized
+ // delimiter.
+ leftDelim = _delimiter2.default.leftRightDelim(group.value.left, innerHeight, innerDepth, options, group.mode, ["mopen"]);
+ }
+ // Add it to the beginning of the expression
+ inner.unshift(leftDelim);
+
+ // Handle middle delimiters
+ if (hadMiddle) {
+ for (var _i4 = 1; _i4 < inner.length; _i4++) {
+ var middleDelim = inner[_i4];
+ if (middleDelim.isMiddle) {
+ // Apply the options that were active when \middle was called
+ inner[_i4] = _delimiter2.default.leftRightDelim(
+ middleDelim.isMiddle.value,
+ innerHeight,
+ innerDepth,
+ middleDelim.isMiddle.options,
+ group.mode,
+ []
+ );
+ // Add back spaces shifted into the delimiter
+ var spaces = spliceSpaces(middleDelim.children, 0);
+ if (spaces) {
+ _buildCommon2.default.prependChildren(inner[_i4], spaces);
+ }
+ }
+ }
+ }
+
+ var rightDelim = void 0;
+ // Same for the right delimiter
+ if (group.value.right === ".") {
+ rightDelim = makeNullDelimiter(options, ["mclose"]);
+ } else {
+ rightDelim = _delimiter2.default.leftRightDelim(group.value.right, innerHeight, innerDepth, options, group.mode, ["mclose"]);
+ }
+ // Add it to the end of the expression.
+ inner.push(rightDelim);
+
+ return (0, _buildCommon.makeSpan)(["minner"], inner, options);
+ };
+
+ groupTypes.middle = function (group, options) {
+ var middleDelim = void 0;
+ if (group.value.value === ".") {
+ middleDelim = makeNullDelimiter(options, []);
+ } else {
+ middleDelim = _delimiter2.default.sizedDelim(group.value.value, 1, options, group.mode, []);
+ middleDelim.isMiddle = {
+ value: group.value.value,
+ options: options,
+ };
+ }
+ return middleDelim;
+ };
+
+ groupTypes.rule = function (group, options) {
+ // Make an empty span for the rule
+ var rule = (0, _buildCommon.makeSpan)(["mord", "rule"], [], options);
+
+ // Calculate the shift, width, and height of the rule, and account for units
+ var shift = 0;
+ if (group.value.shift) {
+ shift = _units2.default.calculateSize(group.value.shift, options);
+ }
+
+ var width = _units2.default.calculateSize(group.value.width, options);
+ var height = _units2.default.calculateSize(group.value.height, options);
+
+ // Style the rule to the right size
+ rule.style.borderRightWidth = width + "em";
+ rule.style.borderTopWidth = height + "em";
+ rule.style.bottom = shift + "em";
+
+ // Record the height and width
+ rule.width = width;
+ rule.height = height + shift;
+ rule.depth = -shift;
+ // Font size is the number large enough that the browser will
+ // reserve at least `absHeight` space above the baseline.
+ // The 1.125 factor was empirically determined
+ rule.maxFontSize = height * 1.125 * options.sizeMultiplier;
+
+ return rule;
+ };
+
+ groupTypes.kern = function (group, options) {
+ // Make an empty span for the rule
+ var rule = (0, _buildCommon.makeSpan)(["mord", "rule"], [], options);
+
+ if (group.value.dimension) {
+ var dimension = _units2.default.calculateSize(group.value.dimension, options);
+ rule.style.marginLeft = dimension + "em";
+ }
+
+ return rule;
+ };
+
+ groupTypes.accent = function (group, options) {
+ // Accents are handled in the TeXbook pg. 443, rule 12.
+ var base = group.value.base;
+
+ var supsubGroup = void 0;
+ if (group.type === "supsub") {
+ // If our base is a character box, and we have superscripts and
+ // subscripts, the supsub will defer to us. In particular, we want
+ // to attach the superscripts and subscripts to the inner body (so
+ // that the position of the superscripts and subscripts won't be
+ // affected by the height of the accent). We accomplish this by
+ // sticking the base of the accent into the base of the supsub, and
+ // rendering that, while keeping track of where the accent is.
+
+ // The supsub group is the group that was passed in
+ var supsub = group;
+ // The real accent group is the base of the supsub group
+ group = supsub.value.base;
+ // The character box is the base of the accent group
+ base = group.value.base;
+ // Stick the character box into the base of the supsub group
+ supsub.value.base = base;
+
+ // Rerender the supsub group with its new base, and store that
+ // result.
+ supsubGroup = buildGroup(supsub, options);
+ }
+
+ // Build the base group
+ var body = buildGroup(base, options.havingCrampedStyle());
+
+ // Does the accent need to shift for the skew of a character?
+ var mustShift = group.value.isShifty && isCharacterBox(base);
+
+ // Calculate the skew of the accent. This is based on the line "If the
+ // nucleus is not a single character, let s = 0; otherwise set s to the
+ // kern amount for the nucleus followed by the \skewchar of its font."
+ // Note that our skew metrics are just the kern between each character
+ // and the skewchar.
+ var skew = 0;
+ if (mustShift) {
+ // If the base is a character box, then we want the skew of the
+ // innermost character. To do that, we find the innermost character:
+ var baseChar = getBaseElem(base);
+ // Then, we render its group to get the symbol inside it
+ var baseGroup = buildGroup(baseChar, options.havingCrampedStyle());
+ // Finally, we pull the skew off of the symbol.
+ skew = baseGroup.skew;
+ // Note that we now throw away baseGroup, because the layers we
+ // removed with getBaseElem might contain things like \color which
+ // we can't get rid of.
+ // TODO(emily): Find a better way to get the skew
+ }
+
+ // calculate the amount of space between the body and the accent
+ var clearance = Math.min(body.height, options.fontMetrics().xHeight);
+
+ // Build the accent
+ var accentBody = void 0;
+ if (!group.value.isStretchy) {
+ var accent = _buildCommon2.default.makeSymbol(group.value.label, "Main-Regular", group.mode, options);
+ // Remove the italic correction of the accent, because it only serves to
+ // shift the accent over to a place we don't want.
+ accent.italic = 0;
+
+ // The \vec character that the fonts use is a combining character, and
+ // thus shows up much too far to the left. To account for this, we add a
+ // specific class which shifts the accent over to where we want it.
+ // TODO(emily): Fix this in a better way, like by changing the font
+ // Similarly, text accent \H is a combining character and
+ // requires a different adjustment.
+ var accentClass = null;
+ if (group.value.label === "\\vec") {
+ accentClass = "accent-vec";
+ } else if (group.value.label === "\\H") {
+ accentClass = "accent-hungarian";
+ }
+
+ accentBody = (0, _buildCommon.makeSpan)([], [accent]);
+ accentBody = (0, _buildCommon.makeSpan)(["accent-body", accentClass], [accentBody]);
+
+ // Shift the accent over by the skew. Note we shift by twice the skew
+ // because we are centering the accent, so by adding 2*skew to the left,
+ // we shift it to the right by 1*skew.
+ accentBody.style.marginLeft = 2 * skew + "em";
+
+ accentBody = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: body },
+ {
+ type: "kern",
+ size: -clearance,
+ },
+ {
+ type: "elem",
+ elem: accentBody,
+ },
+ ],
+ "firstBaseline",
+ null,
+ options
+ );
+ } else {
+ accentBody = _stretchy2.default.svgSpan(group, options);
+
+ accentBody = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: body },
+ {
+ type: "elem",
+ elem: accentBody,
+ },
+ ],
+ "firstBaseline",
+ null,
+ options
+ );
+
+ var styleSpan = accentBody.children[0].children[0].children[1];
+ styleSpan.classes.push("svg-align"); // text-align: left;
+ if (skew > 0) {
+ // Shorten the accent and nudge it to the right.
+ styleSpan.style.width = "calc(100% - " + 2 * skew + "em)";
+ styleSpan.style.marginLeft = 2 * skew + "em";
+ }
+ }
+
+ var accentWrap = (0, _buildCommon.makeSpan)(["mord", "accent"], [accentBody], options);
+
+ if (supsubGroup) {
+ // Here, we replace the "base" child of the supsub with our newly
+ // generated accent.
+ supsubGroup.children[0] = accentWrap;
+
+ // Since we don't rerun the height calculation after replacing the
+ // accent, we manually recalculate height.
+ supsubGroup.height = Math.max(accentWrap.height, supsubGroup.height);
+
+ // Accents should always be ords, even when their innards are not.
+ supsubGroup.classes[0] = "mord";
+
+ return supsubGroup;
+ } else {
+ return accentWrap;
+ }
+ };
+
+ groupTypes.horizBrace = function (group, options) {
+ var style = options.style;
+
+ var hasSupSub = group.type === "supsub";
+ var supSubGroup = void 0;
+ var newOptions = void 0;
+ if (hasSupSub) {
+ // Ref: LaTeX source2e: }}}}\limits}
+ // i.e. LaTeX treats the brace similar to an op and passes it
+ // with \limits, so we need to assign supsub style.
+ if (group.value.sup) {
+ newOptions = options.havingStyle(style.sup());
+ supSubGroup = buildGroup(group.value.sup, newOptions, options);
+ } else {
+ newOptions = options.havingStyle(style.sub());
+ supSubGroup = buildGroup(group.value.sub, newOptions, options);
+ }
+ group = group.value.base;
+ }
+
+ // Build the base group
+ var body = buildGroup(group.value.base, options.havingBaseStyle(_Style2.default.DISPLAY));
+
+ // Create the stretchy element
+ var braceBody = _stretchy2.default.svgSpan(group, options);
+
+ // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓
+ // This first vlist contains the subject matter and the brace: equation
+ var vlist = void 0;
+ if (group.value.isOver) {
+ vlist = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: body },
+ { type: "kern", size: 0.1 },
+ { type: "elem", elem: braceBody },
+ ],
+ "firstBaseline",
+ null,
+ options
+ );
+ vlist.children[0].children[0].children[1].classes.push("svg-align");
+ } else {
+ vlist = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: braceBody },
+ { type: "kern", size: 0.1 },
+ { type: "elem", elem: body },
+ ],
+ "bottom",
+ body.depth + 0.1 + braceBody.height,
+ options
+ );
+ vlist.children[0].children[0].children[0].classes.push("svg-align");
+ }
+
+ if (hasSupSub) {
+ // In order to write the supsub, wrap the first vlist in another vlist:
+ // They can't all go in the same vlist, because the note might be wider
+ // than the equation. We want the equation to control the brace width.
+
+ // note long note long note
+ // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓
+ // equation eqn eqn
+
+ var vSpan = (0, _buildCommon.makeSpan)(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options);
+
+ if (group.value.isOver) {
+ vlist = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: vSpan },
+ { type: "kern", size: 0.2 },
+ {
+ type: "elem",
+ elem: supSubGroup,
+ },
+ ],
+ "firstBaseline",
+ null,
+ options
+ );
+ } else {
+ vlist = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "elem",
+ elem: supSubGroup,
+ },
+ { type: "kern", size: 0.2 },
+ { type: "elem", elem: vSpan },
+ ],
+ "bottom",
+ vSpan.depth + 0.2 + supSubGroup.height,
+ options
+ );
+ }
+ }
+
+ return (0, _buildCommon.makeSpan)(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options);
+ };
+
+ groupTypes.accentUnder = function (group, options) {
+ // Treat under accents much like underlines.
+ var innerGroup = buildGroup(group.value.body, options);
+
+ var accentBody = _stretchy2.default.svgSpan(group, options);
+ var kern = /tilde/.test(group.value.label) ? 0.12 : 0;
+
+ // Generate the vlist, with the appropriate kerns
+ var vlist = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: accentBody },
+ { type: "kern", size: kern },
+ { type: "elem", elem: innerGroup },
+ ],
+ "bottom",
+ accentBody.height + kern,
+ options
+ );
+
+ vlist.children[0].children[0].children[0].classes.push("svg-align");
+
+ return (0, _buildCommon.makeSpan)(["mord", "accentunder"], [vlist], options);
+ };
+
+ groupTypes.enclose = function (group, options) {
+ // \cancel, \bcancel, \xcancel, \sout, \fbox
+ var inner = buildGroup(group.value.body, options);
+
+ var label = group.value.label.substr(1);
+ var scale = options.sizeMultiplier;
+ var img = void 0;
+ var pad = 0;
+ var imgShift = 0;
+
+ if (label === "sout") {
+ img = (0, _buildCommon.makeSpan)(["stretchy", "sout"]);
+ img.height = options.fontMetrics().defaultRuleThickness / scale;
+ imgShift = -0.5 * options.fontMetrics().xHeight;
+ } else {
+ // Add horizontal padding
+ inner.classes.push(label === "fbox" ? "boxpad" : "cancel-pad");
+
+ // Add vertical padding
+ var isCharBox = isCharacterBox(group.value.body);
+ // ref: LaTeX source2e: \fboxsep = 3pt; \fboxrule = .4pt
+ // ref: cancel package: \advance\totalheight2\p@ % "+2"
+ pad = label === "fbox" ? 0.34 : isCharBox ? 0.2 : 0;
+ imgShift = inner.depth + pad;
+
+ img = _stretchy2.default.encloseSpan(inner, label, pad, options);
+ }
+
+ var vlist = _buildCommon2.default.makeVList(
+ [
+ { type: "elem", elem: inner, shift: 0 },
+ {
+ type: "elem",
+ elem: img,
+ shift: imgShift,
+ },
+ ],
+ "individualShift",
+ null,
+ options
+ );
+
+ if (label !== "fbox") {
+ vlist.children[0].children[0].children[1].classes.push("svg-align");
+ }
+
+ if (/cancel/.test(label)) {
+ // cancel does not create horiz space for its line extension.
+ // That is, not when adjacent to a mord.
+ return (0, _buildCommon.makeSpan)(["mord", "cancel-lap"], [vlist], options);
+ } else {
+ return (0, _buildCommon.makeSpan)(["mord"], [vlist], options);
+ }
+ };
+
+ groupTypes.xArrow = function (group, options) {
+ var style = options.style;
+
+ // Build the argument groups in the appropriate style.
+ // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}%
+
+ var newOptions = options.havingStyle(style.sup());
+ var upperGroup = buildGroup(group.value.body, newOptions, options);
+ upperGroup.classes.push("x-arrow-pad");
+
+ var lowerGroup = void 0;
+ if (group.value.below) {
+ // Build the lower group
+ newOptions = options.havingStyle(style.sub());
+ lowerGroup = buildGroup(group.value.below, newOptions, options);
+ lowerGroup.classes.push("x-arrow-pad");
+ }
+
+ var arrowBody = _stretchy2.default.svgSpan(group, options);
+
+ var arrowShift = -options.fontMetrics().axisHeight + arrowBody.depth;
+ var upperShift = -options.fontMetrics().axisHeight - arrowBody.height - 0.111; // 2 mu. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi
+
+ // Generate the vlist
+ var vlist = void 0;
+ if (group.value.below) {
+ var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + arrowBody.height + 0.111;
+ vlist = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "elem",
+ elem: upperGroup,
+ shift: upperShift,
+ },
+ {
+ type: "elem",
+ elem: arrowBody,
+ shift: arrowShift,
+ },
+ {
+ type: "elem",
+ elem: lowerGroup,
+ shift: lowerShift,
+ },
+ ],
+ "individualShift",
+ null,
+ options
+ );
+ } else {
+ vlist = _buildCommon2.default.makeVList(
+ [
+ {
+ type: "elem",
+ elem: upperGroup,
+ shift: upperShift,
+ },
+ {
+ type: "elem",
+ elem: arrowBody,
+ shift: arrowShift,
+ },
+ ],
+ "individualShift",
+ null,
+ options
+ );
+ }
+
+ vlist.children[0].children[0].children[1].classes.push("svg-align");
+
+ return (0, _buildCommon.makeSpan)(["mrel", "x-arrow"], [vlist], options);
+ };
+
+ groupTypes.phantom = function (group, options) {
+ var elements = buildExpression(group.value.value, options.withPhantom(), false);
+
+ // \phantom isn't supposed to affect the elements it contains.
+ // See "color" for more details.
+ return new _buildCommon2.default.makeFragment(elements);
+ };
+
+ groupTypes.mclass = function (group, options) {
+ var elements = buildExpression(group.value.value, options, true);
+
+ return (0, _buildCommon.makeSpan)([group.value.mclass], elements, options);
+ };
+
+ /**
+ * buildGroup is the function that takes a group and calls the correct groupType
+ * function for it. It also handles the interaction of size and style changes
+ * between parents and children.
+ */
+ var buildGroup = function buildGroup(group, options, baseOptions) {
+ if (!group) {
+ return (0, _buildCommon.makeSpan)();
+ }
+
+ if (groupTypes[group.type]) {
+ // Call the groupTypes function
+ var groupNode = groupTypes[group.type](group, options);
+
+ // If the size changed between the parent and the current group, account
+ // for that size difference.
+ if (baseOptions && options.size !== baseOptions.size) {
+ groupNode = (0, _buildCommon.makeSpan)(options.sizingClasses(baseOptions), [groupNode], options);
+
+ var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;
+
+ groupNode.height *= multiplier;
+ groupNode.depth *= multiplier;
+ }
+
+ return groupNode;
+ } else {
+ throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'");
+ }
+ };
+
+ /**
+ * Take an entire parse tree, and build it into an appropriate set of HTML
+ * nodes.
+ */
+ var buildHTML = function buildHTML(tree, options) {
+ // buildExpression is destructive, so we need to make a clone
+ // of the incoming tree so that it isn't accidentally changed
+ tree = JSON.parse((0, _stringify2.default)(tree));
+
+ // Build the expression contained in the tree
+ var expression = buildExpression(tree, options, true);
+ var body = (0, _buildCommon.makeSpan)(["base"], expression, options);
+
+ // Add struts, which ensure that the top of the HTML element falls at the
+ // height of the expression, and the bottom of the HTML element falls at the
+ // depth of the expression.
+ var topStrut = (0, _buildCommon.makeSpan)(["strut"]);
+ var bottomStrut = (0, _buildCommon.makeSpan)(["strut", "bottom"]);
+
+ topStrut.style.height = body.height + "em";
+ bottomStrut.style.height = body.height + body.depth + "em";
+ // We'd like to use `vertical-align: top` but in IE 9 this lowers the
+ // baseline of the box to the bottom of this strut (instead staying in the
+ // normal place) so we use an absolute value for vertical-align instead
+ bottomStrut.style.verticalAlign = -body.depth + "em";
+
+ // Wrap the struts and body together
+ var htmlNode = (0, _buildCommon.makeSpan)(["katex-html"], [topStrut, bottomStrut, body]);
+
+ htmlNode.setAttribute("aria-hidden", "true");
+
+ return htmlNode;
+ };
+
+ module.exports = buildHTML;
+ },
+ {
+ "./ParseError": 29,
+ "./Style": 33,
+ "./buildCommon": 34,
+ "./delimiter": 38,
+ "./domTree": 39,
+ "./stretchy": 47,
+ "./units": 50,
+ "./utils": 51,
+ "babel-runtime/core-js/json/stringify": 2,
+ },
+ ],
+ 36: [
+ function (require, module, exports) {
+ var _buildCommon = require("./buildCommon");
+
+ var _buildCommon2 = _interopRequireDefault(_buildCommon);
+
+ var _fontMetrics = require("./fontMetrics");
+
+ var _fontMetrics2 = _interopRequireDefault(_fontMetrics);
+
+ var _mathMLTree = require("./mathMLTree");
+
+ var _mathMLTree2 = _interopRequireDefault(_mathMLTree);
+
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ var _Style = require("./Style");
+
+ var _Style2 = _interopRequireDefault(_Style);
+
+ var _symbols = require("./symbols");
+
+ var _symbols2 = _interopRequireDefault(_symbols);
+
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ var _stretchy = require("./stretchy");
+
+ var _stretchy2 = _interopRequireDefault(_stretchy);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * Takes a symbol and converts it into a MathML text node after performing
+ * optional replacement from symbols.js.
+ */
+ /**
+ * This file converts a parse tree into a cooresponding MathML tree. The main
+ * entry point is the `buildMathML` function, which takes a parse tree from the
+ * parser.
+ */
+
+ var makeText = function makeText(text, mode) {
+ if (_symbols2.default[mode][text] && _symbols2.default[mode][text].replace) {
+ text = _symbols2.default[mode][text].replace;
+ }
+
+ return new _mathMLTree2.default.TextNode(text);
+ };
+
+ /**
+ * Returns the math variant as a string or null if none is required.
+ */
+ var getVariant = function getVariant(group, options) {
+ var font = options.font;
+ if (!font) {
+ return null;
+ }
+
+ var mode = group.mode;
+ if (font === "mathit") {
+ return "italic";
+ }
+
+ var value = group.value;
+ if (_utils2.default.contains(["\\imath", "\\jmath"], value)) {
+ return null;
+ }
+
+ if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) {
+ value = _symbols2.default[mode][value].replace;
+ }
+
+ var fontName = _buildCommon.fontMap[font].fontName;
+ if (_fontMetrics2.default.getCharacterMetrics(value, fontName)) {
+ return _buildCommon.fontMap[options.font].variant;
+ }
+
+ return null;
+ };
+
+ /**
+ * Functions for handling the different types of groups found in the parse
+ * tree. Each function should take a parse group and return a MathML node.
+ */
+ var groupTypes = {};
+
+ var defaultVariant = {
+ mi: "italic",
+ mn: "normal",
+ mtext: "normal",
+ };
+
+ groupTypes.mathord = function (group, options) {
+ var node = new _mathMLTree2.default.MathNode("mi", [makeText(group.value, group.mode)]);
+
+ var variant = getVariant(group, options) || "italic";
+ if (variant !== defaultVariant[node.type]) {
+ node.setAttribute("mathvariant", variant);
+ }
+ return node;
+ };
+
+ groupTypes.textord = function (group, options) {
+ var text = makeText(group.value, group.mode);
+
+ var variant = getVariant(group, options) || "normal";
+
+ var node = void 0;
+ if (group.mode === "text") {
+ node = new _mathMLTree2.default.MathNode("mtext", [text]);
+ } else if (/[0-9]/.test(group.value)) {
+ // TODO(kevinb) merge adjacent nodes
+ // do it as a post processing step
+ node = new _mathMLTree2.default.MathNode("mn", [text]);
+ } else if (group.value === "\\prime") {
+ node = new _mathMLTree2.default.MathNode("mo", [text]);
+ } else {
+ node = new _mathMLTree2.default.MathNode("mi", [text]);
+ }
+ if (variant !== defaultVariant[node.type]) {
+ node.setAttribute("mathvariant", variant);
+ }
+
+ return node;
+ };
+
+ groupTypes.bin = function (group) {
+ var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
+
+ return node;
+ };
+
+ groupTypes.rel = function (group) {
+ var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
+
+ return node;
+ };
+
+ groupTypes.open = function (group) {
+ var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
+
+ return node;
+ };
+
+ groupTypes.close = function (group) {
+ var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
+
+ return node;
+ };
+
+ groupTypes.inner = function (group) {
+ var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
+
+ return node;
+ };
+
+ groupTypes.punct = function (group) {
+ var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]);
+
+ node.setAttribute("separator", "true");
+
+ return node;
+ };
+
+ groupTypes.ordgroup = function (group, options) {
+ var inner = buildExpression(group.value, options);
+
+ var node = new _mathMLTree2.default.MathNode("mrow", inner);
+
+ return node;
+ };
+
+ groupTypes.text = function (group, options) {
+ var body = group.value.body;
+
+ // Convert each element of the body into MathML, and combine consecutive
+ // outputs into a single tag. In this way, we don't
+ // nest non-text items (e.g., $nested-math$) within an .
+ var inner = [];
+ var currentText = null;
+ for (var i = 0; i < body.length; i++) {
+ var _group = buildGroup(body[i], options);
+ if (_group.type === "mtext" && currentText != null) {
+ Array.prototype.push.apply(currentText.children, _group.children);
+ } else {
+ inner.push(_group);
+ if (_group.type === "mtext") {
+ currentText = _group;
+ }
+ }
+ }
+
+ // If there is a single tag in the end (presumably ),
+ // just return it. Otherwise, wrap them in an .
+ if (inner.length === 1) {
+ return inner[0];
+ } else {
+ return new _mathMLTree2.default.MathNode("mrow", inner);
+ }
+ };
+
+ groupTypes.color = function (group, options) {
+ var inner = buildExpression(group.value.value, options);
+
+ var node = new _mathMLTree2.default.MathNode("mstyle", inner);
+
+ node.setAttribute("mathcolor", group.value.color);
+
+ return node;
+ };
+
+ groupTypes.supsub = function (group, options) {
+ // Is the inner group a relevant horizonal brace?
+ var isBrace = false;
+ var isOver = void 0;
+ var isSup = void 0;
+ if (group.value.base) {
+ if (group.value.base.value.type === "horizBrace") {
+ isSup = group.value.sup ? true : false;
+ if (isSup === group.value.base.value.isOver) {
+ isBrace = true;
+ isOver = group.value.base.value.isOver;
+ }
+ }
+ }
+
+ var removeUnnecessaryRow = true;
+ var children = [buildGroup(group.value.base, options, removeUnnecessaryRow)];
+
+ if (group.value.sub) {
+ children.push(buildGroup(group.value.sub, options, removeUnnecessaryRow));
+ }
+
+ if (group.value.sup) {
+ children.push(buildGroup(group.value.sup, options, removeUnnecessaryRow));
+ }
+
+ var nodeType = void 0;
+ if (isBrace) {
+ nodeType = isOver ? "mover" : "munder";
+ } else if (!group.value.sub) {
+ nodeType = "msup";
+ } else if (!group.value.sup) {
+ nodeType = "msub";
+ } else {
+ var base = group.value.base;
+ if (base && base.value.limits && options.style === _Style2.default.DISPLAY) {
+ nodeType = "munderover";
+ } else {
+ nodeType = "msubsup";
+ }
+ }
+
+ var node = new _mathMLTree2.default.MathNode(nodeType, children);
+
+ return node;
+ };
+
+ groupTypes.genfrac = function (group, options) {
+ var node = new _mathMLTree2.default.MathNode("mfrac", [
+ buildGroup(group.value.numer, options),
+ buildGroup(group.value.denom, options),
+ ]);
+
+ if (!group.value.hasBarLine) {
+ node.setAttribute("linethickness", "0px");
+ }
+
+ if (group.value.leftDelim != null || group.value.rightDelim != null) {
+ var withDelims = [];
+
+ if (group.value.leftDelim != null) {
+ var leftOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.leftDelim)]);
+
+ leftOp.setAttribute("fence", "true");
+
+ withDelims.push(leftOp);
+ }
+
+ withDelims.push(node);
+
+ if (group.value.rightDelim != null) {
+ var rightOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.rightDelim)]);
+
+ rightOp.setAttribute("fence", "true");
+
+ withDelims.push(rightOp);
+ }
+
+ var outerNode = new _mathMLTree2.default.MathNode("mrow", withDelims);
+
+ return outerNode;
+ }
+
+ return node;
+ };
+
+ groupTypes.array = function (group, options) {
+ return new _mathMLTree2.default.MathNode(
+ "mtable",
+ group.value.body.map(function (row) {
+ return new _mathMLTree2.default.MathNode(
+ "mtr",
+ row.map(function (cell) {
+ return new _mathMLTree2.default.MathNode("mtd", [buildGroup(cell, options)]);
+ })
+ );
+ })
+ );
+ };
+
+ groupTypes.sqrt = function (group, options) {
+ var node = void 0;
+ if (group.value.index) {
+ node = new _mathMLTree2.default.MathNode("mroot", [buildGroup(group.value.body, options), buildGroup(group.value.index, options)]);
+ } else {
+ node = new _mathMLTree2.default.MathNode("msqrt", [buildGroup(group.value.body, options)]);
+ }
+
+ return node;
+ };
+
+ groupTypes.leftright = function (group, options) {
+ var inner = buildExpression(group.value.body, options);
+
+ if (group.value.left !== ".") {
+ var leftNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.left, group.mode)]);
+
+ leftNode.setAttribute("fence", "true");
+
+ inner.unshift(leftNode);
+ }
+
+ if (group.value.right !== ".") {
+ var rightNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.right, group.mode)]);
+
+ rightNode.setAttribute("fence", "true");
+
+ inner.push(rightNode);
+ }
+
+ var outerNode = new _mathMLTree2.default.MathNode("mrow", inner);
+
+ return outerNode;
+ };
+
+ groupTypes.middle = function (group, options) {
+ var middleNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.middle, group.mode)]);
+ middleNode.setAttribute("fence", "true");
+ return middleNode;
+ };
+
+ groupTypes.accent = function (group, options) {
+ var accentNode = void 0;
+ if (group.value.isStretchy) {
+ accentNode = _stretchy2.default.mathMLnode(group.value.label);
+ } else {
+ accentNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.label, group.mode)]);
+ }
+
+ var node = new _mathMLTree2.default.MathNode("mover", [buildGroup(group.value.base, options), accentNode]);
+
+ node.setAttribute("accent", "true");
+
+ return node;
+ };
+
+ groupTypes.spacing = function (group) {
+ var node = void 0;
+
+ if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") {
+ node = new _mathMLTree2.default.MathNode("mtext", [new _mathMLTree2.default.TextNode("\xA0")]);
+ } else {
+ node = new _mathMLTree2.default.MathNode("mspace");
+
+ node.setAttribute("width", _buildCommon2.default.spacingFunctions[group.value].size);
+ }
+
+ return node;
+ };
+
+ groupTypes.op = function (group, options) {
+ var node = void 0;
+
+ // TODO(emily): handle big operators using the `largeop` attribute
+
+ if (group.value.symbol) {
+ // This is a symbol. Just add the symbol.
+ node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.body, group.mode)]);
+ } else if (group.value.value) {
+ // This is an operator with children. Add them.
+ node = new _mathMLTree2.default.MathNode("mo", buildExpression(group.value.value, options));
+ } else {
+ // This is a text operator. Add all of the characters from the
+ // operator's name.
+ // TODO(emily): Add a space in the middle of some of these
+ // operators, like \limsup.
+ node = new _mathMLTree2.default.MathNode("mi", [new _mathMLTree2.default.TextNode(group.value.body.slice(1))]);
+ }
+
+ return node;
+ };
+
+ groupTypes.mod = function (group, options) {
+ var inner = [];
+
+ if (group.value.modType === "pod" || group.value.modType === "pmod") {
+ inner.push(new _mathMLTree2.default.MathNode("mo", [makeText("(", group.mode)]));
+ }
+ if (group.value.modType !== "pod") {
+ inner.push(new _mathMLTree2.default.MathNode("mo", [makeText("mod", group.mode)]));
+ }
+ if (group.value.value) {
+ var space = new _mathMLTree2.default.MathNode("mspace");
+ space.setAttribute("width", "0.333333em");
+ inner.push(space);
+ inner = inner.concat(buildExpression(group.value.value, options));
+ }
+ if (group.value.modType === "pod" || group.value.modType === "pmod") {
+ inner.push(new _mathMLTree2.default.MathNode("mo", [makeText(")", group.mode)]));
+ }
+
+ return new _mathMLTree2.default.MathNode("mo", inner);
+ };
+
+ groupTypes.katex = function (group) {
+ var node = new _mathMLTree2.default.MathNode("mtext", [new _mathMLTree2.default.TextNode("KaTeX")]);
+
+ return node;
+ };
+
+ groupTypes.font = function (group, options) {
+ var font = group.value.font;
+ return buildGroup(group.value.body, options.withFont(font));
+ };
+
+ groupTypes.delimsizing = function (group) {
+ var children = [];
+
+ if (group.value.value !== ".") {
+ children.push(makeText(group.value.value, group.mode));
+ }
+
+ var node = new _mathMLTree2.default.MathNode("mo", children);
+
+ if (group.value.mclass === "mopen" || group.value.mclass === "mclose") {
+ // Only some of the delimsizing functions act as fences, and they
+ // return "mopen" or "mclose" mclass.
+ node.setAttribute("fence", "true");
+ } else {
+ // Explicitly disable fencing if it's not a fence, to override the
+ // defaults.
+ node.setAttribute("fence", "false");
+ }
+
+ return node;
+ };
+
+ groupTypes.styling = function (group, options) {
+ // Figure out what style we're changing to.
+ // TODO(kevinb): dedupe this with buildHTML.js
+ // This will be easier of handling of styling nodes is in the same file.
+ var styleMap = {
+ display: _Style2.default.DISPLAY,
+ text: _Style2.default.TEXT,
+ script: _Style2.default.SCRIPT,
+ scriptscript: _Style2.default.SCRIPTSCRIPT,
+ };
+
+ var newStyle = styleMap[group.value.style];
+ var newOptions = options.havingStyle(newStyle);
+
+ var inner = buildExpression(group.value.value, newOptions);
+
+ var node = new _mathMLTree2.default.MathNode("mstyle", inner);
+
+ var styleAttributes = {
+ display: ["0", "true"],
+ text: ["0", "false"],
+ script: ["1", "false"],
+ scriptscript: ["2", "false"],
+ };
+
+ var attr = styleAttributes[group.value.style];
+
+ node.setAttribute("scriptlevel", attr[0]);
+ node.setAttribute("displaystyle", attr[1]);
+
+ return node;
+ };
+
+ groupTypes.sizing = function (group, options) {
+ var newOptions = options.havingSize(group.value.size);
+ var inner = buildExpression(group.value.value, newOptions);
+
+ var node = new _mathMLTree2.default.MathNode("mstyle", inner);
+
+ // TODO(emily): This doesn't produce the correct size for nested size
+ // changes, because we don't keep state of what style we're currently
+ // in, so we can't reset the size to normal before changing it. Now
+ // that we're passing an options parameter we should be able to fix
+ // this.
+ node.setAttribute("mathsize", newOptions.sizeMultiplier + "em");
+
+ return node;
+ };
+
+ groupTypes.overline = function (group, options) {
+ var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]);
+ operator.setAttribute("stretchy", "true");
+
+ var node = new _mathMLTree2.default.MathNode("mover", [buildGroup(group.value.body, options), operator]);
+ node.setAttribute("accent", "true");
+
+ return node;
+ };
+
+ groupTypes.underline = function (group, options) {
+ var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]);
+ operator.setAttribute("stretchy", "true");
+
+ var node = new _mathMLTree2.default.MathNode("munder", [buildGroup(group.value.body, options), operator]);
+ node.setAttribute("accentunder", "true");
+
+ return node;
+ };
+
+ groupTypes.accentUnder = function (group, options) {
+ var accentNode = _stretchy2.default.mathMLnode(group.value.label);
+ var node = new _mathMLTree2.default.MathNode("munder", [buildGroup(group.value.body, options), accentNode]);
+ node.setAttribute("accentunder", "true");
+ return node;
+ };
+
+ groupTypes.enclose = function (group, options) {
+ var node = new _mathMLTree2.default.MathNode("menclose", [buildGroup(group.value.body, options)]);
+ var notation = "";
+ switch (group.value.label) {
+ case "\\bcancel":
+ notation = "downdiagonalstrike";
+ break;
+ case "\\sout":
+ notation = "horizontalstrike";
+ break;
+ case "\\fbox":
+ notation = "box";
+ break;
+ default:
+ notation = "updiagonalstrike";
+ }
+ node.setAttribute("notation", notation);
+ return node;
+ };
+
+ groupTypes.horizBrace = function (group, options) {
+ var accentNode = _stretchy2.default.mathMLnode(group.value.label);
+ return new _mathMLTree2.default.MathNode(group.value.isOver ? "mover" : "munder", [
+ buildGroup(group.value.base, options),
+ accentNode,
+ ]);
+ };
+
+ groupTypes.xArrow = function (group, options) {
+ var arrowNode = _stretchy2.default.mathMLnode(group.value.label);
+ var node = void 0;
+ var lowerNode = void 0;
+
+ if (group.value.body) {
+ var upperNode = buildGroup(group.value.body, options);
+ if (group.value.below) {
+ lowerNode = buildGroup(group.value.below, options);
+ node = new _mathMLTree2.default.MathNode("munderover", [arrowNode, lowerNode, upperNode]);
+ } else {
+ node = new _mathMLTree2.default.MathNode("mover", [arrowNode, upperNode]);
+ }
+ } else if (group.value.below) {
+ lowerNode = buildGroup(group.value.below, options);
+ node = new _mathMLTree2.default.MathNode("munder", [arrowNode, lowerNode]);
+ } else {
+ node = new _mathMLTree2.default.MathNode("mover", [arrowNode]);
+ }
+ return node;
+ };
+
+ groupTypes.rule = function (group) {
+ // TODO(emily): Figure out if there's an actual way to draw black boxes
+ // in MathML.
+ var node = new _mathMLTree2.default.MathNode("mrow");
+
+ return node;
+ };
+
+ groupTypes.kern = function (group) {
+ // TODO(kevin): Figure out if there's a way to add space in MathML
+ var node = new _mathMLTree2.default.MathNode("mrow");
+
+ return node;
+ };
+
+ groupTypes.llap = function (group, options) {
+ var node = new _mathMLTree2.default.MathNode("mpadded", [buildGroup(group.value.body, options)]);
+
+ node.setAttribute("lspace", "-1width");
+ node.setAttribute("width", "0px");
+
+ return node;
+ };
+
+ groupTypes.rlap = function (group, options) {
+ var node = new _mathMLTree2.default.MathNode("mpadded", [buildGroup(group.value.body, options)]);
+
+ node.setAttribute("width", "0px");
+
+ return node;
+ };
+
+ groupTypes.phantom = function (group, options) {
+ var inner = buildExpression(group.value.value, options);
+ return new _mathMLTree2.default.MathNode("mphantom", inner);
+ };
+
+ groupTypes.mclass = function (group, options) {
+ var inner = buildExpression(group.value.value, options);
+ return new _mathMLTree2.default.MathNode("mstyle", inner);
+ };
+
+ /**
+ * Takes a list of nodes, builds them, and returns a list of the generated
+ * MathML nodes. A little simpler than the HTML version because we don't do any
+ * previous-node handling.
+ */
+ var buildExpression = function buildExpression(expression, options) {
+ var groups = [];
+ for (var i = 0; i < expression.length; i++) {
+ var group = expression[i];
+ groups.push(buildGroup(group, options));
+ }
+
+ // TODO(kevinb): combine \\not with mrels and mords
+
+ return groups;
+ };
+
+ /**
+ * Takes a group from the parser and calls the appropriate groupTypes function
+ * on it to produce a MathML node.
+ */
+ // TODO(kevinb): determine if removeUnnecessaryRow should always be true
+ var buildGroup = function buildGroup(group, options) {
+ var removeUnnecessaryRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ if (!group) {
+ return new _mathMLTree2.default.MathNode("mrow");
+ }
+
+ if (groupTypes[group.type]) {
+ // Call the groupTypes function
+ var result = groupTypes[group.type](group, options);
+ if (removeUnnecessaryRow) {
+ if (result.type === "mrow" && result.children.length === 1) {
+ return result.children[0];
+ }
+ }
+ return result;
+ } else {
+ throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'");
+ }
+ };
+
+ /**
+ * Takes a full parse tree and settings and builds a MathML representation of
+ * it. In particular, we put the elements from building the parse tree into a
+ * tag so we can also include that TeX source as an annotation.
+ *
+ * Note that we actually return a domTree element with a `` inside it so
+ * we can do appropriate styling.
+ */
+ var buildMathML = function buildMathML(tree, texExpression, options) {
+ var expression = buildExpression(tree, options);
+
+ // Wrap up the expression in an mrow so it is presented in the semantics
+ // tag correctly.
+ var wrapper = new _mathMLTree2.default.MathNode("mrow", expression);
+
+ // Build a TeX annotation of the source
+ var annotation = new _mathMLTree2.default.MathNode("annotation", [new _mathMLTree2.default.TextNode(texExpression)]);
+
+ annotation.setAttribute("encoding", "application/x-tex");
+
+ var semantics = new _mathMLTree2.default.MathNode("semantics", [wrapper, annotation]);
+
+ var math = new _mathMLTree2.default.MathNode("math", [semantics]);
+
+ // You can't style nodes, so we wrap the node in a span.
+ return (0, _buildCommon.makeSpan)(["katex-mathml"], [math]);
+ };
+
+ module.exports = buildMathML;
+ },
+ {
+ "./ParseError": 29,
+ "./Style": 33,
+ "./buildCommon": 34,
+ "./fontMetrics": 41,
+ "./mathMLTree": 45,
+ "./stretchy": 47,
+ "./symbols": 48,
+ "./utils": 51,
+ },
+ ],
+ 37: [
+ function (require, module, exports) {
+ var _buildHTML = require("./buildHTML");
+
+ var _buildHTML2 = _interopRequireDefault(_buildHTML);
+
+ var _buildMathML = require("./buildMathML");
+
+ var _buildMathML2 = _interopRequireDefault(_buildMathML);
+
+ var _buildCommon = require("./buildCommon");
+
+ var _Options = require("./Options");
+
+ var _Options2 = _interopRequireDefault(_Options);
+
+ var _Settings = require("./Settings");
+
+ var _Settings2 = _interopRequireDefault(_Settings);
+
+ var _Style = require("./Style");
+
+ var _Style2 = _interopRequireDefault(_Style);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ var buildTree = function buildTree(tree, expression, settings) {
+ settings = settings || new _Settings2.default({});
+
+ var startStyle = _Style2.default.TEXT;
+ if (settings.displayMode) {
+ startStyle = _Style2.default.DISPLAY;
+ }
+
+ // Setup the default options
+ var options = new _Options2.default({
+ style: startStyle,
+ });
+
+ // `buildHTML` sometimes messes with the parse tree (like turning bins ->
+ // ords), so we build the MathML version first.
+ var mathMLNode = (0, _buildMathML2.default)(tree, expression, options);
+ var htmlNode = (0, _buildHTML2.default)(tree, options);
+
+ var katexNode = (0, _buildCommon.makeSpan)(["katex"], [mathMLNode, htmlNode]);
+
+ if (settings.displayMode) {
+ return (0, _buildCommon.makeSpan)(["katex-display"], [katexNode]);
+ } else {
+ return katexNode;
+ }
+ };
+
+ module.exports = buildTree;
+ },
+ {
+ "./Options": 28,
+ "./Settings": 32,
+ "./Style": 33,
+ "./buildCommon": 34,
+ "./buildHTML": 35,
+ "./buildMathML": 36,
+ },
+ ],
+ 38: [
+ function (require, module, exports) {
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ var _Style = require("./Style");
+
+ var _Style2 = _interopRequireDefault(_Style);
+
+ var _buildCommon = require("./buildCommon");
+
+ var _buildCommon2 = _interopRequireDefault(_buildCommon);
+
+ var _fontMetrics = require("./fontMetrics");
+
+ var _fontMetrics2 = _interopRequireDefault(_fontMetrics);
+
+ var _symbols = require("./symbols");
+
+ var _symbols2 = _interopRequireDefault(_symbols);
+
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * Get the metrics for a given symbol and font, after transformation (i.e.
+ * after following replacement from symbols.js)
+ */
+ /**
+ * This file deals with creating delimiters of various sizes. The TeXbook
+ * discusses these routines on page 441-442, in the "Another subroutine sets box
+ * x to a specified variable delimiter" paragraph.
+ *
+ * There are three main routines here. `makeSmallDelim` makes a delimiter in the
+ * normal font, but in either text, script, or scriptscript style.
+ * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,
+ * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of
+ * smaller pieces that are stacked on top of one another.
+ *
+ * The functions take a parameter `center`, which determines if the delimiter
+ * should be centered around the axis.
+ *
+ * Then, there are three exposed functions. `sizedDelim` makes a delimiter in
+ * one of the given sizes. This is used for things like `\bigl`.
+ * `customSizedDelim` makes a delimiter with a given total height+depth. It is
+ * called in places like `\sqrt`. `leftRightDelim` makes an appropriate
+ * delimiter which surrounds an expression of a given height an depth. It is
+ * used in `\left` and `\right`.
+ */
+
+ var getMetrics = function getMetrics(symbol, font) {
+ if (_symbols2.default.math[symbol] && _symbols2.default.math[symbol].replace) {
+ return _fontMetrics2.default.getCharacterMetrics(_symbols2.default.math[symbol].replace, font);
+ } else {
+ return _fontMetrics2.default.getCharacterMetrics(symbol, font);
+ }
+ };
+
+ /**
+ * Puts a delimiter span in a given style, and adds appropriate height, depth,
+ * and maxFontSizes.
+ */
+ var styleWrap = function styleWrap(delim, toStyle, options, classes) {
+ var newOptions = options.havingBaseStyle(toStyle);
+
+ var span = (0, _buildCommon.makeSpan)((classes || []).concat(newOptions.sizingClasses(options)), [delim], options);
+
+ span.delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;
+ span.height *= span.delimSizeMultiplier;
+ span.depth *= span.delimSizeMultiplier;
+ span.maxFontSize = newOptions.sizeMultiplier;
+
+ return span;
+ };
+
+ var centerSpan = function centerSpan(span, options, style) {
+ var newOptions = options.havingBaseStyle(style);
+ var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;
+
+ span.classes.push("delimcenter");
+ span.style.top = shift + "em";
+ span.height -= shift;
+ span.depth += shift;
+ };
+
+ /**
+ * Makes a small delimiter. This is a delimiter that comes in the Main-Regular
+ * font, but is restyled to either be in textstyle, scriptstyle, or
+ * scriptscriptstyle.
+ */
+ var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {
+ var text = _buildCommon2.default.makeSymbol(delim, "Main-Regular", mode, options);
+ var span = styleWrap(text, style, options, classes);
+ if (center) {
+ centerSpan(span, options, style);
+ }
+ return span;
+ };
+
+ /**
+ * Builds a symbol in the given font size (note size is an integer)
+ */
+ var mathrmSize = function mathrmSize(value, size, mode, options) {
+ return _buildCommon2.default.makeSymbol(value, "Size" + size + "-Regular", mode, options);
+ };
+
+ /**
+ * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,
+ * Size3, or Size4 fonts. It is always rendered in textstyle.
+ */
+ var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {
+ var inner = mathrmSize(delim, size, mode, options);
+ var span = styleWrap(
+ (0, _buildCommon.makeSpan)(["delimsizing", "size" + size], [inner], options),
+ _Style2.default.TEXT,
+ options,
+ classes
+ );
+ if (center) {
+ centerSpan(span, options, _Style2.default.TEXT);
+ }
+ return span;
+ };
+
+ /**
+ * Make an inner span with the given offset and in the given font. This is used
+ * in `makeStackedDelim` to make the stacking pieces for the delimiter.
+ */
+ var makeInner = function makeInner(symbol, font, mode) {
+ var sizeClass = void 0;
+ // Apply the correct CSS class to choose the right font.
+ if (font === "Size1-Regular") {
+ sizeClass = "delim-size1";
+ } else if (font === "Size4-Regular") {
+ sizeClass = "delim-size4";
+ }
+
+ var inner = (0, _buildCommon.makeSpan)(
+ ["delimsizinginner", sizeClass],
+ [(0, _buildCommon.makeSpan)([], [_buildCommon2.default.makeSymbol(symbol, font, mode)])]
+ );
+
+ // Since this will be passed into `makeVList` in the end, wrap the element
+ // in the appropriate tag that VList uses.
+ return { type: "elem", elem: inner };
+ };
+
+ /**
+ * Make a stacked delimiter out of a given delimiter, with the total height at
+ * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.
+ */
+ var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {
+ // There are four parts, the top, an optional middle, a repeated part, and a
+ // bottom.
+ var top = void 0;
+ var middle = void 0;
+ var repeat = void 0;
+ var bottom = void 0;
+ top = repeat = bottom = delim;
+ middle = null;
+ // Also keep track of what font the delimiters are in
+ var font = "Size1-Regular";
+
+ // We set the parts and font based on the symbol. Note that we use
+ // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the
+ // repeats of the arrows
+ if (delim === "\\uparrow") {
+ repeat = bottom = "\u23D0";
+ } else if (delim === "\\Uparrow") {
+ repeat = bottom = "\u2016";
+ } else if (delim === "\\downarrow") {
+ top = repeat = "\u23D0";
+ } else if (delim === "\\Downarrow") {
+ top = repeat = "\u2016";
+ } else if (delim === "\\updownarrow") {
+ top = "\\uparrow";
+ repeat = "\u23D0";
+ bottom = "\\downarrow";
+ } else if (delim === "\\Updownarrow") {
+ top = "\\Uparrow";
+ repeat = "\u2016";
+ bottom = "\\Downarrow";
+ } else if (delim === "[" || delim === "\\lbrack") {
+ top = "\u23A1";
+ repeat = "\u23A2";
+ bottom = "\u23A3";
+ font = "Size4-Regular";
+ } else if (delim === "]" || delim === "\\rbrack") {
+ top = "\u23A4";
+ repeat = "\u23A5";
+ bottom = "\u23A6";
+ font = "Size4-Regular";
+ } else if (delim === "\\lfloor") {
+ repeat = top = "\u23A2";
+ bottom = "\u23A3";
+ font = "Size4-Regular";
+ } else if (delim === "\\lceil") {
+ top = "\u23A1";
+ repeat = bottom = "\u23A2";
+ font = "Size4-Regular";
+ } else if (delim === "\\rfloor") {
+ repeat = top = "\u23A5";
+ bottom = "\u23A6";
+ font = "Size4-Regular";
+ } else if (delim === "\\rceil") {
+ top = "\u23A4";
+ repeat = bottom = "\u23A5";
+ font = "Size4-Regular";
+ } else if (delim === "(") {
+ top = "\u239B";
+ repeat = "\u239C";
+ bottom = "\u239D";
+ font = "Size4-Regular";
+ } else if (delim === ")") {
+ top = "\u239E";
+ repeat = "\u239F";
+ bottom = "\u23A0";
+ font = "Size4-Regular";
+ } else if (delim === "\\{" || delim === "\\lbrace") {
+ top = "\u23A7";
+ middle = "\u23A8";
+ bottom = "\u23A9";
+ repeat = "\u23AA";
+ font = "Size4-Regular";
+ } else if (delim === "\\}" || delim === "\\rbrace") {
+ top = "\u23AB";
+ middle = "\u23AC";
+ bottom = "\u23AD";
+ repeat = "\u23AA";
+ font = "Size4-Regular";
+ } else if (delim === "\\lgroup") {
+ top = "\u23A7";
+ bottom = "\u23A9";
+ repeat = "\u23AA";
+ font = "Size4-Regular";
+ } else if (delim === "\\rgroup") {
+ top = "\u23AB";
+ bottom = "\u23AD";
+ repeat = "\u23AA";
+ font = "Size4-Regular";
+ } else if (delim === "\\lmoustache") {
+ top = "\u23A7";
+ bottom = "\u23AD";
+ repeat = "\u23AA";
+ font = "Size4-Regular";
+ } else if (delim === "\\rmoustache") {
+ top = "\u23AB";
+ bottom = "\u23A9";
+ repeat = "\u23AA";
+ font = "Size4-Regular";
+ }
+
+ // Get the metrics of the four sections
+ var topMetrics = getMetrics(top, font);
+ var topHeightTotal = topMetrics.height + topMetrics.depth;
+ var repeatMetrics = getMetrics(repeat, font);
+ var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;
+ var bottomMetrics = getMetrics(bottom, font);
+ var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;
+ var middleHeightTotal = 0;
+ var middleFactor = 1;
+ if (middle !== null) {
+ var middleMetrics = getMetrics(middle, font);
+ middleHeightTotal = middleMetrics.height + middleMetrics.depth;
+ middleFactor = 2; // repeat symmetrically above and below middle
+ }
+
+ // Calcuate the minimal height that the delimiter can have.
+ // It is at least the size of the top, bottom, and optional middle combined.
+ var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal;
+
+ // Compute the number of copies of the repeat symbol we will need
+ var repeatCount = Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal));
+
+ // Compute the total height of the delimiter including all the symbols
+ var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal;
+
+ // The center of the delimiter is placed at the center of the axis. Note
+ // that in this context, "center" means that the delimiter should be
+ // centered around the axis in the current style, while normally it is
+ // centered around the axis in textstyle.
+ var axisHeight = options.fontMetrics().axisHeight;
+ if (center) {
+ axisHeight *= options.sizeMultiplier;
+ }
+ // Calculate the depth
+ var depth = realHeightTotal / 2 - axisHeight;
+
+ // Now, we start building the pieces that will go into the vlist
+
+ // Keep a list of the inner pieces
+ var inners = [];
+
+ // Add the bottom symbol
+ inners.push(makeInner(bottom, font, mode));
+
+ if (middle === null) {
+ // Add that many symbols
+ for (var i = 0; i < repeatCount; i++) {
+ inners.push(makeInner(repeat, font, mode));
+ }
+ } else {
+ // When there is a middle bit, we need the middle part and two repeated
+ // sections
+ for (var _i = 0; _i < repeatCount; _i++) {
+ inners.push(makeInner(repeat, font, mode));
+ }
+ inners.push(makeInner(middle, font, mode));
+ for (var _i2 = 0; _i2 < repeatCount; _i2++) {
+ inners.push(makeInner(repeat, font, mode));
+ }
+ }
+
+ // Add the top symbol
+ inners.push(makeInner(top, font, mode));
+
+ // Finally, build the vlist
+ var newOptions = options.havingBaseStyle(_Style2.default.TEXT);
+ var inner = _buildCommon2.default.makeVList(inners, "bottom", depth, newOptions);
+
+ return styleWrap((0, _buildCommon.makeSpan)(["delimsizing", "mult"], [inner], newOptions), _Style2.default.TEXT, options, classes);
+ };
+
+ var sqrtInnerSVG = {
+ // The main path geometry is from glyph U221A in the font KaTeX Main
+ main: " ",
+
+ // size1 is from glyph U221A in the font KaTeX_Size1-Regular
+ 1: " ",
+
+ // size2 is from glyph U221A in the font KaTeX_Size2-Regular
+ 2: " ",
+
+ // size3 is from glyph U221A in the font KaTeX_Size3-Regular
+ 3: " ",
+
+ // size4 is from glyph U221A in the font KaTeX_Size4-Regular
+ 4: " ",
+
+ // tall is from glyph U23B7 in the font KaTeX_Size4-Regular
+ tall: "l-4 4-4 4c-.667.667-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h\n-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170c-4-3.333-8.333\n-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 219 661 l218 661z\nM702 0H400000v40H742z'/> ",
+ };
+
+ var sqrtSpan = function sqrtSpan(height, delim, options) {
+ // Create a span containing an SVG image of a sqrt symbol.
+ var span = _buildCommon2.default.makeSpan([], [], options);
+ var sizeMultiplier = options.sizeMultiplier; // default
+
+ if (delim.type === "small") {
+ // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.
+ var newOptions = options.havingBaseStyle(delim.style);
+ sizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;
+
+ span.height = 1 * sizeMultiplier;
+ span.style.height = span.height + "em";
+ span.surdWidth = 0.833 * sizeMultiplier; // from the font.
+ //In the font, the glyph is 1000 units tall. The font scale is 1:1000.
+
+ span.innerHTML = "\n " + sqrtInnerSVG["main"] + " ";
+ } else if (delim.type === "large") {
+ // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.
+ // Get sqrt height from font data
+ span.height = sizeToMaxHeight[delim.size] / sizeMultiplier;
+ span.style.height = span.height + "em";
+ span.surdWidth = 1.0 / sizeMultiplier; // from the font
+
+ span.innerHTML = '\n ' + sqrtInnerSVG[delim.size] + " ";
+ } else {
+ // Tall sqrt. In TeX, this would be stacked using multiple glyphs.
+ // We'll use a single SVG to accomplish the same thing.
+ span.height = height / sizeMultiplier;
+ span.style.height = span.height + "em";
+ span.surdWidth = 1.056 / sizeMultiplier;
+ var viewBoxHeight = Math.floor(span.height * 1000); // scale = 1:1000
+ var vertSegment = viewBoxHeight - 54;
+
+ // This \sqrt is customized in both height and width. We set the
+ // height now. Then CSS will stretch the image to the correct width.
+ // This SVG path comes from glyph U+23B7, font KaTeX_Size4-Regular.
+ span.innerHTML =
+ "\n \n turn into \langle and \rangle in delimiters
+ if (delim === "<" || delim === "\\lt") {
+ delim = "\\langle";
+ } else if (delim === ">" || delim === "\\gt") {
+ delim = "\\rangle";
+ }
+
+ // Sized delimiters are never centered.
+ if (_utils2.default.contains(stackLargeDelimiters, delim) || _utils2.default.contains(stackNeverDelimiters, delim)) {
+ return makeLargeDelim(delim, size, false, options, mode, classes);
+ } else if (_utils2.default.contains(stackAlwaysDelimiters, delim)) {
+ return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);
+ } else {
+ throw new _ParseError2.default("Illegal delimiter: '" + delim + "'");
+ }
+ };
+
+ /**
+ * There are three different sequences of delimiter sizes that the delimiters
+ * follow depending on the kind of delimiter. This is used when creating custom
+ * sized delimiters to decide whether to create a small, large, or stacked
+ * delimiter.
+ *
+ * In real TeX, these sequences aren't explicitly defined, but are instead
+ * defined inside the font metrics. Since there are only three sequences that
+ * are possible for the delimiters that TeX defines, it is easier to just encode
+ * them explicitly here.
+ */
+
+ // Delimiters that never stack try small delimiters and large delimiters only
+ var stackNeverDelimiterSequence = [
+ {
+ type: "small",
+ style: _Style2.default.SCRIPTSCRIPT,
+ },
+ {
+ type: "small",
+ style: _Style2.default.SCRIPT,
+ },
+ { type: "small", style: _Style2.default.TEXT },
+ { type: "large", size: 1 },
+ { type: "large", size: 2 },
+ { type: "large", size: 3 },
+ { type: "large", size: 4 },
+ ];
+
+ // Delimiters that always stack try the small delimiters first, then stack
+ var stackAlwaysDelimiterSequence = [
+ {
+ type: "small",
+ style: _Style2.default.SCRIPTSCRIPT,
+ },
+ {
+ type: "small",
+ style: _Style2.default.SCRIPT,
+ },
+ { type: "small", style: _Style2.default.TEXT },
+ { type: "stack" },
+ ];
+
+ // Delimiters that stack when large try the small and then large delimiters, and
+ // stack afterwards
+ var stackLargeDelimiterSequence = [
+ {
+ type: "small",
+ style: _Style2.default.SCRIPTSCRIPT,
+ },
+ {
+ type: "small",
+ style: _Style2.default.SCRIPT,
+ },
+ { type: "small", style: _Style2.default.TEXT },
+ { type: "large", size: 1 },
+ { type: "large", size: 2 },
+ { type: "large", size: 3 },
+ { type: "large", size: 4 },
+ { type: "stack" },
+ ];
+
+ /**
+ * Get the font used in a delimiter based on what kind of delimiter it is.
+ */
+ var delimTypeToFont = function delimTypeToFont(type) {
+ if (type.type === "small") {
+ return "Main-Regular";
+ } else if (type.type === "large") {
+ return "Size" + type.size + "-Regular";
+ } else if (type.type === "stack") {
+ return "Size4-Regular";
+ }
+ };
+
+ /**
+ * Traverse a sequence of types of delimiters to decide what kind of delimiter
+ * should be used to create a delimiter of the given height+depth.
+ */
+ var traverseSequence = function traverseSequence(delim, height, sequence, options) {
+ // Here, we choose the index we should start at in the sequences. In smaller
+ // sizes (which correspond to larger numbers in style.size) we start earlier
+ // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts
+ // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2
+ var start = Math.min(2, 3 - options.style.size);
+ for (var i = start; i < sequence.length; i++) {
+ if (sequence[i].type === "stack") {
+ // This is always the last delimiter, so we just break the loop now.
+ break;
+ }
+
+ var metrics = getMetrics(delim, delimTypeToFont(sequence[i]));
+ var heightDepth = metrics.height + metrics.depth;
+
+ // Small delimiters are scaled down versions of the same font, so we
+ // account for the style change size.
+
+ if (sequence[i].type === "small") {
+ var newOptions = options.havingBaseStyle(sequence[i].style);
+ heightDepth *= newOptions.sizeMultiplier;
+ }
+
+ // Check if the delimiter at this size works for the given height.
+ if (heightDepth > height) {
+ return sequence[i];
+ }
+ }
+
+ // If we reached the end of the sequence, return the last sequence element.
+ return sequence[sequence.length - 1];
+ };
+
+ /**
+ * Make a delimiter of a given height+depth, with optional centering. Here, we
+ * traverse the sequences, and create a delimiter that the sequence tells us to.
+ */
+ var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {
+ if (delim === "<" || delim === "\\lt") {
+ delim = "\\langle";
+ } else if (delim === ">" || delim === "\\gt") {
+ delim = "\\rangle";
+ }
+
+ // Decide what sequence to use
+ var sequence = void 0;
+ if (_utils2.default.contains(stackNeverDelimiters, delim)) {
+ sequence = stackNeverDelimiterSequence;
+ } else if (_utils2.default.contains(stackLargeDelimiters, delim)) {
+ sequence = stackLargeDelimiterSequence;
+ } else {
+ sequence = stackAlwaysDelimiterSequence;
+ }
+
+ // Look through the sequence
+ var delimType = traverseSequence(delim, height, sequence, options);
+
+ if (delim === "\\surd") {
+ // Get an SVG image for
+ return sqrtSpan(height, delimType, options);
+ } else {
+ // Get the delimiter from font glyphs.
+ // Depending on the sequence element we decided on, call the
+ // appropriate function.
+ if (delimType.type === "small") {
+ return makeSmallDelim(delim, delimType.style, center, options, mode, classes);
+ } else if (delimType.type === "large") {
+ return makeLargeDelim(delim, delimType.size, center, options, mode, classes);
+ } else if (delimType.type === "stack") {
+ return makeStackedDelim(delim, height, center, options, mode, classes);
+ }
+ }
+ };
+
+ /**
+ * Make a delimiter for use with `\left` and `\right`, given a height and depth
+ * of an expression that the delimiters surround.
+ */
+ var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {
+ // We always center \left/\right delimiters, so the axis is always shifted
+ var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier;
+
+ // Taken from TeX source, tex.web, function make_left_right
+ var delimiterFactor = 901;
+ var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;
+
+ var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);
+
+ var totalHeight = Math.max(
+ // In real TeX, calculations are done using integral values which are
+ // 65536 per pt, or 655360 per em. So, the division here truncates in
+ // TeX but doesn't here, producing different results. If we wanted to
+ // exactly match TeX's calculation, we could do
+ // Math.floor(655360 * maxDistFromAxis / 500) *
+ // delimiterFactor / 655360
+ // (To see the difference, compare
+ // x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
+ // in TeX and KaTeX)
+ (maxDistFromAxis / 500) * delimiterFactor,
+ 2 * maxDistFromAxis - delimiterExtend
+ );
+
+ // Finally, we defer to `makeCustomSizedDelim` with our calculated total
+ // height
+ return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);
+ };
+
+ module.exports = {
+ sizedDelim: makeSizedDelim,
+ customSizedDelim: makeCustomSizedDelim,
+ leftRightDelim: makeLeftRightDelim,
+ };
+ },
+ {
+ "./ParseError": 29,
+ "./Style": 33,
+ "./buildCommon": 34,
+ "./fontMetrics": 41,
+ "./symbols": 48,
+ "./utils": 51,
+ },
+ ],
+ 39: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _createClass2 = require("babel-runtime/helpers/createClass");
+
+ var _createClass3 = _interopRequireDefault(_createClass2);
+
+ var _unicodeRegexes = require("./unicodeRegexes");
+
+ var _unicodeRegexes2 = _interopRequireDefault(_unicodeRegexes);
+
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * Create an HTML className based on a list of classes. In addition to joining
+ * with spaces, we also remove null or empty classes.
+ */
+ /**
+ * These objects store the data about the DOM nodes we create, as well as some
+ * extra data. They can then be transformed into real DOM nodes with the
+ * `toNode` function or HTML markup using `toMarkup`. They are useful for both
+ * storing extra properties on the nodes, as well as providing a way to easily
+ * work with the DOM.
+ *
+ * Similar functions for working with MathML nodes exist in mathMLTree.js.
+ */
+ var createClass = function createClass(classes) {
+ classes = classes.slice();
+ for (var i = classes.length - 1; i >= 0; i--) {
+ if (!classes[i]) {
+ classes.splice(i, 1);
+ }
+ }
+
+ return classes.join(" ");
+ };
+
+ /**
+ * This node represents a span node, with a className, a list of children, and
+ * an inline style. It also contains information about its height, depth, and
+ * maxFontSize.
+ */
+
+ var span = (function () {
+ function span(classes, children, options) {
+ (0, _classCallCheck3.default)(this, span);
+
+ this.classes = classes || [];
+ this.children = children || [];
+ this.height = 0;
+ this.depth = 0;
+ this.maxFontSize = 0;
+ this.style = {};
+ this.attributes = {};
+ this.innerHTML; // used for inline SVG code.
+ if (options) {
+ if (options.style.isTight()) {
+ this.classes.push("mtight");
+ }
+ if (options.getColor()) {
+ this.style.color = options.getColor();
+ }
+ }
+ }
+
+ /**
+ * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all
+ * browsers support attributes the same, and having too many custom attributes
+ * is probably bad.
+ */
+
+ (0, _createClass3.default)(span, [
+ {
+ key: "setAttribute",
+ value: function setAttribute(attribute, value) {
+ this.attributes[attribute] = value;
+ },
+ },
+ {
+ key: "tryCombine",
+ value: function tryCombine(sibling) {
+ return false;
+ },
+
+ /**
+ * Convert the span into an HTML node
+ */
+ },
+ {
+ key: "toNode",
+ value: function toNode() {
+ var span = document.createElement("span");
+
+ // Apply the class
+ span.className = createClass(this.classes);
+
+ // Apply inline styles
+ for (var style in this.style) {
+ if (Object.prototype.hasOwnProperty.call(this.style, style)) {
+ span.style[style] = this.style[style];
+ }
+ }
+
+ // Apply attributes
+ for (var attr in this.attributes) {
+ if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+ span.setAttribute(attr, this.attributes[attr]);
+ }
+ }
+
+ if (this.innerHTML) {
+ span.innerHTML = this.innerHTML;
+ }
+
+ // Append the children, also as HTML nodes
+ for (var i = 0; i < this.children.length; i++) {
+ span.appendChild(this.children[i].toNode());
+ }
+
+ return span;
+ },
+
+ /**
+ * Convert the span into an HTML markup string
+ */
+ },
+ {
+ key: "toMarkup",
+ value: function toMarkup() {
+ var markup = "";
+
+ if (this.innerHTML) {
+ markup += this.innerHTML;
+ }
+
+ // Add the markup of the children, also as markup
+ for (var i = 0; i < this.children.length; i++) {
+ markup += this.children[i].toMarkup();
+ }
+
+ markup += " ";
+
+ return markup;
+ },
+ },
+ ]);
+ return span;
+ })();
+
+ /**
+ * This node represents a document fragment, which contains elements, but when
+ * placed into the DOM doesn't have any representation itself. Thus, it only
+ * contains children and doesn't have any HTML properties. It also keeps track
+ * of a height, depth, and maxFontSize.
+ */
+
+ var documentFragment = (function () {
+ function documentFragment(children) {
+ (0, _classCallCheck3.default)(this, documentFragment);
+
+ this.children = children || [];
+ this.height = 0;
+ this.depth = 0;
+ this.maxFontSize = 0;
+ }
+
+ /**
+ * Convert the fragment into a node
+ */
+
+ (0, _createClass3.default)(documentFragment, [
+ {
+ key: "toNode",
+ value: function toNode() {
+ // Create a fragment
+ var frag = document.createDocumentFragment();
+
+ // Append the children
+ for (var i = 0; i < this.children.length; i++) {
+ frag.appendChild(this.children[i].toNode());
+ }
+
+ return frag;
+ },
+
+ /**
+ * Convert the fragment into HTML markup
+ */
+ },
+ {
+ key: "toMarkup",
+ value: function toMarkup() {
+ var markup = "";
+
+ // Simply concatenate the markup for the children together
+ for (var i = 0; i < this.children.length; i++) {
+ markup += this.children[i].toMarkup();
+ }
+
+ return markup;
+ },
+ },
+ ]);
+ return documentFragment;
+ })();
+
+ var iCombinations = {
+ î: "\u0131\u0302",
+ ï: "\u0131\u0308",
+ í: "\u0131\u0301",
+ // 'ī': '\u0131\u0304', // enable when we add Extended Latin
+ ì: "\u0131\u0300",
+ };
+
+ /**
+ * A symbol node contains information about a single symbol. It either renders
+ * to a single text node, or a span with a single text node in it, depending on
+ * whether it has CSS classes, styles, or needs italic correction.
+ */
+
+ var symbolNode = (function () {
+ function symbolNode(value, height, depth, italic, skew, classes, style) {
+ (0, _classCallCheck3.default)(this, symbolNode);
+
+ this.value = value || "";
+ this.height = height || 0;
+ this.depth = depth || 0;
+ this.italic = italic || 0;
+ this.skew = skew || 0;
+ this.classes = classes || [];
+ this.style = style || {};
+ this.maxFontSize = 0;
+
+ // Mark CJK characters with specific classes so that we can specify which
+ // fonts to use. This allows us to render these characters with a serif
+ // font in situations where the browser would either default to a sans serif
+ // or render a placeholder character.
+ if (_unicodeRegexes2.default.cjkRegex.test(value)) {
+ // I couldn't find any fonts that contained Hangul as well as all of
+ // the other characters we wanted to test there for it gets its own
+ // CSS class.
+ if (_unicodeRegexes2.default.hangulRegex.test(value)) {
+ this.classes.push("hangul_fallback");
+ } else {
+ this.classes.push("cjk_fallback");
+ }
+ }
+
+ if (/[îïíì]/.test(this.value)) {
+ // add ī when we add Extended Latin
+ this.value = iCombinations[this.value];
+ }
+ }
+
+ (0, _createClass3.default)(symbolNode, [
+ {
+ key: "tryCombine",
+ value: function tryCombine(sibling) {
+ if (
+ !sibling ||
+ !(sibling instanceof symbolNode) ||
+ this.italic > 0 ||
+ createClass(this.classes) !== createClass(sibling.classes) ||
+ this.skew !== sibling.skew ||
+ this.maxFontSize !== sibling.maxFontSize
+ ) {
+ return false;
+ }
+ for (var style in this.style) {
+ if (this.style.hasOwnProperty(style) && this.style[style] !== sibling.style[style]) {
+ return false;
+ }
+ }
+ for (var _style in sibling.style) {
+ if (sibling.style.hasOwnProperty(_style) && this.style[_style] !== sibling.style[_style]) {
+ return false;
+ }
+ }
+ this.value += sibling.value;
+ this.height = Math.max(this.height, sibling.height);
+ this.depth = Math.max(this.depth, sibling.depth);
+ this.italic = sibling.italic;
+ return true;
+ },
+
+ /**
+ * Creates a text node or span from a symbol node. Note that a span is only
+ * created if it is needed.
+ */
+ },
+ {
+ key: "toNode",
+ value: function toNode() {
+ var node = document.createTextNode(this.value);
+ var span = null;
+
+ if (this.italic > 0) {
+ span = document.createElement("span");
+ span.style.marginRight = this.italic + "em";
+ }
+
+ if (this.classes.length > 0) {
+ span = span || document.createElement("span");
+ span.className = createClass(this.classes);
+ }
+
+ for (var style in this.style) {
+ if (this.style.hasOwnProperty(style)) {
+ span = span || document.createElement("span");
+ span.style[style] = this.style[style];
+ }
+ }
+
+ if (span) {
+ span.appendChild(node);
+ return span;
+ } else {
+ return node;
+ }
+ },
+
+ /**
+ * Creates markup for a symbol node.
+ */
+ },
+ {
+ key: "toMarkup",
+ value: function toMarkup() {
+ // TODO(alpert): More duplication than I'd like from
+ // span.prototype.toMarkup and symbolNode.prototype.toNode...
+ var needsSpan = false;
+
+ var markup = " 0) {
+ styles += "margin-right:" + this.italic + "em;";
+ }
+ for (var style in this.style) {
+ if (this.style.hasOwnProperty(style)) {
+ styles += _utils2.default.hyphenate(style) + ":" + this.style[style] + ";";
+ }
+ }
+
+ if (styles) {
+ needsSpan = true;
+ markup += ' style="' + _utils2.default.escape(styles) + '"';
+ }
+
+ var escaped = _utils2.default.escape(this.value);
+ if (needsSpan) {
+ markup += ">";
+ markup += escaped;
+ markup += " ";
+ return markup;
+ } else {
+ return escaped;
+ }
+ },
+ },
+ ]);
+ return symbolNode;
+ })();
+
+ module.exports = {
+ span: span,
+ documentFragment: documentFragment,
+ symbolNode: symbolNode,
+ };
+ },
+ {
+ "./unicodeRegexes": 49,
+ "./utils": 51,
+ "babel-runtime/helpers/classCallCheck": 4,
+ "babel-runtime/helpers/createClass": 5,
+ },
+ ],
+ 40: [
+ function (require, module, exports) {
+ var _ParseNode = require("./ParseNode");
+
+ var _ParseNode2 = _interopRequireDefault(_ParseNode);
+
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * Parse the body of the environment, with rows delimited by \\ and
+ * columns delimited by &, and create a nested list in row-major order
+ * with one group per cell. If given an optional argument style
+ * ("text", "display", etc.), then each cell is cast into that style.
+ */
+ /* eslint no-constant-condition:0 */
+ function parseArray(parser, result, style) {
+ var row = [];
+ var body = [row];
+ var rowGaps = [];
+ while (true) {
+ var cell = parser.parseExpression(false, null);
+ cell = new _ParseNode2.default("ordgroup", cell, parser.mode);
+ if (style) {
+ cell = new _ParseNode2.default(
+ "styling",
+ {
+ style: style,
+ value: [cell],
+ },
+ parser.mode
+ );
+ }
+ row.push(cell);
+ var next = parser.nextToken.text;
+ if (next === "&") {
+ parser.consume();
+ } else if (next === "\\end") {
+ break;
+ } else if (next === "\\\\" || next === "\\cr") {
+ var cr = parser.parseFunction();
+ rowGaps.push(cr.value.size);
+ row = [];
+ body.push(row);
+ } else {
+ throw new _ParseError2.default("Expected & or \\\\ or \\end", parser.nextToken);
+ }
+ }
+ result.body = body;
+ result.rowGaps = rowGaps;
+ return new _ParseNode2.default(result.type, result, parser.mode);
+ }
+
+ /*
+ * An environment definition is very similar to a function definition:
+ * it is declared with a name or a list of names, a set of properties
+ * and a handler containing the actual implementation.
+ *
+ * The properties include:
+ * - numArgs: The number of arguments after the \begin{name} function.
+ * - argTypes: (optional) Just like for a function
+ * - allowedInText: (optional) Whether or not the environment is allowed inside
+ * text mode (default false) (not enforced yet)
+ * - numOptionalArgs: (optional) Just like for a function
+ * A bare number instead of that object indicates the numArgs value.
+ *
+ * The handler function will receive two arguments
+ * - context: information and references provided by the parser
+ * - args: an array of arguments passed to \begin{name}
+ * The context contains the following properties:
+ * - envName: the name of the environment, one of the listed names.
+ * - parser: the parser object
+ * - lexer: the lexer object
+ * - positions: the positions associated with these arguments from args.
+ * The handler must return a ParseResult.
+ */
+ function defineEnvironment(names, props, handler) {
+ if (typeof names === "string") {
+ names = [names];
+ }
+ if (typeof props === "number") {
+ props = { numArgs: props };
+ }
+ // Set default values of environments
+ var data = {
+ numArgs: props.numArgs || 0,
+ argTypes: props.argTypes,
+ greediness: 1,
+ allowedInText: !!props.allowedInText,
+ numOptionalArgs: props.numOptionalArgs || 0,
+ handler: handler,
+ };
+ for (var i = 0; i < names.length; ++i) {
+ module.exports[names[i]] = data;
+ }
+ }
+
+ // Decides on a style for cells in an array according to whether the given
+ // environment name starts with the letter 'd'.
+ function dCellStyle(envName) {
+ if (envName.substr(0, 1) === "d") {
+ return "display";
+ } else {
+ return "text";
+ }
+ }
+
+ // Arrays are part of LaTeX, defined in lttab.dtx so its documentation
+ // is part of the source2e.pdf file of LaTeX2e source documentation.
+ // {darray} is an {array} environment where cells are set in \displaystyle,
+ // as defined in nccmath.sty.
+ defineEnvironment(
+ ["array", "darray"],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var colalign = args[0];
+ colalign = colalign.value.map ? colalign.value : [colalign];
+ var cols = colalign.map(function (node) {
+ var ca = node.value;
+ if ("lcr".indexOf(ca) !== -1) {
+ return {
+ type: "align",
+ align: ca,
+ };
+ } else if (ca === "|") {
+ return {
+ type: "separator",
+ separator: "|",
+ };
+ }
+ throw new _ParseError2.default("Unknown column alignment: " + node.value, node);
+ });
+ var res = {
+ type: "array",
+ cols: cols,
+ hskipBeforeAndAfter: true,
+ };
+ res = parseArray(context.parser, res, dCellStyle(context.envName));
+ return res;
+ }
+ );
+
+ // The matrix environments of amsmath builds on the array environment
+ // of LaTeX, which is discussed above.
+ defineEnvironment(["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"], {}, function (context) {
+ var delimiters = {
+ matrix: null,
+ pmatrix: ["(", ")"],
+ bmatrix: ["[", "]"],
+ Bmatrix: ["\\{", "\\}"],
+ vmatrix: ["|", "|"],
+ Vmatrix: ["\\Vert", "\\Vert"],
+ }[context.envName];
+ var res = {
+ type: "array",
+ hskipBeforeAndAfter: false,
+ };
+ res = parseArray(context.parser, res, dCellStyle(context.envName));
+ if (delimiters) {
+ res = new _ParseNode2.default(
+ "leftright",
+ {
+ body: [res],
+ left: delimiters[0],
+ right: delimiters[1],
+ },
+ context.mode
+ );
+ }
+ return res;
+ });
+
+ // A cases environment (in amsmath.sty) is almost equivalent to
+ // \def\arraystretch{1.2}%
+ // \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right.
+ // {dcases} is a {cases} environment where cells are set in \displaystyle,
+ // as defined in mathtools.sty.
+ defineEnvironment(["cases", "dcases"], {}, function (context) {
+ var res = {
+ type: "array",
+ arraystretch: 1.2,
+ cols: [
+ {
+ type: "align",
+ align: "l",
+ pregap: 0,
+ // TODO(kevinb) get the current style.
+ // For now we use the metrics for TEXT style which is what we were
+ // doing before. Before attempting to get the current style we
+ // should look at TeX's behavior especially for \over and matrices.
+ postgap: 1.0,
+ },
+ {
+ type: "align",
+ align: "l",
+ pregap: 0,
+ postgap: 0,
+ },
+ ],
+ };
+ res = parseArray(context.parser, res, dCellStyle(context.envName));
+ res = new _ParseNode2.default(
+ "leftright",
+ {
+ body: [res],
+ left: "\\{",
+ right: ".",
+ },
+ context.mode
+ );
+ return res;
+ });
+
+ // An aligned environment is like the align* environment
+ // except it operates within math mode.
+ // Note that we assume \nomallineskiplimit to be zero,
+ // so that \strut@ is the same as \strut.
+ defineEnvironment("aligned", {}, function (context) {
+ var res = {
+ type: "array",
+ cols: [],
+ addJot: true,
+ };
+ res = parseArray(context.parser, res, "display");
+ // Count number of columns = maximum number of cells in each row.
+ // At the same time, prepend empty group {} at beginning of every second
+ // cell in each row (starting with second cell) so that operators become
+ // binary. This behavior is implemented in amsmath's \start@aligned.
+ var emptyGroup = new _ParseNode2.default("ordgroup", [], context.mode);
+ var numCols = 0;
+ res.value.body.forEach(function (row) {
+ for (var i = 1; i < row.length; i += 2) {
+ // Modify ordgroup node within styling node
+ var ordgroup = row[i].value.value[0];
+ ordgroup.value.unshift(emptyGroup);
+ }
+ if (numCols < row.length) {
+ numCols = row.length;
+ }
+ });
+ for (var i = 0; i < numCols; ++i) {
+ var align = "r";
+ var pregap = 0;
+ if (i % 2 === 1) {
+ align = "l";
+ } else if (i > 0) {
+ pregap = 2; // one \qquad between columns
+ }
+ res.value.cols[i] = {
+ type: "align",
+ align: align,
+ pregap: pregap,
+ postgap: 0,
+ };
+ }
+ return res;
+ });
+
+ // A gathered environment is like an array environment with one centered
+ // column, but where rows are considered lines so get \jot line spacing
+ // and contents are set in \displaystyle.
+ defineEnvironment("gathered", {}, function (context) {
+ var res = {
+ type: "array",
+ cols: [
+ {
+ type: "align",
+ align: "c",
+ },
+ ],
+ addJot: true,
+ };
+ res = parseArray(context.parser, res, "display");
+ return res;
+ });
+ },
+ { "./ParseError": 29, "./ParseNode": 30 },
+ ],
+ 41: [
+ function (require, module, exports) {
+ var _unicodeRegexes = require("./unicodeRegexes");
+
+ var _fontMetricsData = require("./fontMetricsData");
+
+ var _fontMetricsData2 = _interopRequireDefault(_fontMetricsData);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * This file contains metrics regarding fonts and individual symbols. The sigma
+ * and xi variables, as well as the metricMap map contain data extracted from
+ * TeX, TeX font metrics, and the TTF files. These data are then exposed via the
+ * `metrics` variable and the getCharacterMetrics function.
+ */
+
+ // In TeX, there are actually three sets of dimensions, one for each of
+ // textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:
+ // 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are
+ // provided in the the arrays below, in that order.
+ //
+ // The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively.
+ // This was determined by running the following script:
+ //
+ // latex -interaction=nonstopmode \
+ // '\documentclass{article}\usepackage{amsmath}\begin{document}' \
+ // '$a$ \expandafter\show\the\textfont2' \
+ // '\expandafter\show\the\scriptfont2' \
+ // '\expandafter\show\the\scriptscriptfont2' \
+ // '\stop'
+ //
+ // The metrics themselves were retreived using the following commands:
+ //
+ // tftopl cmsy10
+ // tftopl cmsy7
+ // tftopl cmsy5
+ //
+ // The output of each of these commands is quite lengthy. The only part we
+ // care about is the FONTDIMEN section. Each value is measured in EMs.
+ var sigmasAndXis = {
+ slant: [0.25, 0.25, 0.25], // sigma1
+ space: [0.0, 0.0, 0.0], // sigma2
+ stretch: [0.0, 0.0, 0.0], // sigma3
+ shrink: [0.0, 0.0, 0.0], // sigma4
+ xHeight: [0.431, 0.431, 0.431], // sigma5
+ quad: [1.0, 1.171, 1.472], // sigma6
+ extraSpace: [0.0, 0.0, 0.0], // sigma7
+ num1: [0.677, 0.732, 0.925], // sigma8
+ num2: [0.394, 0.384, 0.387], // sigma9
+ num3: [0.444, 0.471, 0.504], // sigma10
+ denom1: [0.686, 0.752, 1.025], // sigma11
+ denom2: [0.345, 0.344, 0.532], // sigma12
+ sup1: [0.413, 0.503, 0.504], // sigma13
+ sup2: [0.363, 0.431, 0.404], // sigma14
+ sup3: [0.289, 0.286, 0.294], // sigma15
+ sub1: [0.15, 0.143, 0.2], // sigma16
+ sub2: [0.247, 0.286, 0.4], // sigma17
+ supDrop: [0.386, 0.353, 0.494], // sigma18
+ subDrop: [0.05, 0.071, 0.1], // sigma19
+ delim1: [2.39, 1.7, 1.98], // sigma20
+ delim2: [1.01, 1.157, 1.42], // sigma21
+ axisHeight: [0.25, 0.25, 0.25], // sigma22
+
+ // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
+ // they correspond to the font parameters of the extension fonts (family 3).
+ // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
+ // match cmex7, we'd use cmex7.tfm values for script and scriptscript
+ // values.
+ defaultRuleThickness: [0.04, 0.049, 0.049], // xi8; cmex7: 0.049
+ bigOpSpacing1: [0.111, 0.111, 0.111], // xi9
+ bigOpSpacing2: [0.166, 0.166, 0.166], // xi10
+ bigOpSpacing3: [0.2, 0.2, 0.2], // xi11
+ bigOpSpacing4: [0.6, 0.611, 0.611], // xi12; cmex7: 0.611
+ bigOpSpacing5: [0.1, 0.143, 0.143], // xi13; cmex7: 0.143
+
+ // The \sqrt rule width is taken from the height of the surd character.
+ // Since we use the same font at all sizes, this thickness doesn't scale.
+ sqrtRuleThickness: [0.04, 0.04, 0.04],
+
+ // This value determines how large a pt is, for metrics which are defined
+ // in terms of pts.
+ // This value is also used in katex.less; if you change it make sure the
+ // values match.
+ ptPerEm: [10.0, 10.0, 10.0],
+
+ // The space between adjacent `|` columns in an array definition. From
+ // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
+ doubleRuleSep: [0.2, 0.2, 0.2],
+ };
+
+ // This map contains a mapping from font name and character code to character
+ // metrics, including height, depth, italic correction, and skew (kern from the
+ // character to the corresponding \skewchar)
+ // This map is generated via `make metrics`. It should not be changed manually.
+
+ // These are very rough approximations. We default to Times New Roman which
+ // should have Latin-1 and Cyrillic characters, but may not depending on the
+ // operating system. The metrics do not account for extra height from the
+ // accents. In the case of Cyrillic characters which have both ascenders and
+ // descenders we prefer approximations with ascenders, primarily to prevent
+ // the fraction bar or root line from intersecting the glyph.
+ // TODO(kevinb) allow union of multiple glyph metrics for better accuracy.
+ var extraCharacterMap = {
+ // Latin-1
+ À: "A",
+ Á: "A",
+ Â: "A",
+ Ã: "A",
+ Ä: "A",
+ Å: "A",
+ Æ: "A",
+ Ç: "C",
+ È: "E",
+ É: "E",
+ Ê: "E",
+ Ë: "E",
+ Ì: "I",
+ Í: "I",
+ Î: "I",
+ Ï: "I",
+ Ð: "D",
+ Ñ: "N",
+ Ò: "O",
+ Ó: "O",
+ Ô: "O",
+ Õ: "O",
+ Ö: "O",
+ Ø: "O",
+ Ù: "U",
+ Ú: "U",
+ Û: "U",
+ Ü: "U",
+ Ý: "Y",
+ Þ: "o",
+ ß: "B",
+ à: "a",
+ á: "a",
+ â: "a",
+ ã: "a",
+ ä: "a",
+ å: "a",
+ æ: "a",
+ ç: "c",
+ è: "e",
+ é: "e",
+ ê: "e",
+ ë: "e",
+ ì: "i",
+ í: "i",
+ î: "i",
+ ï: "i",
+ ð: "d",
+ ñ: "n",
+ ò: "o",
+ ó: "o",
+ ô: "o",
+ õ: "o",
+ ö: "o",
+ ø: "o",
+ ù: "u",
+ ú: "u",
+ û: "u",
+ ü: "u",
+ ý: "y",
+ þ: "o",
+ ÿ: "y",
+
+ // Cyrillic
+ А: "A",
+ Б: "B",
+ В: "B",
+ Г: "F",
+ Д: "A",
+ Е: "E",
+ Ж: "K",
+ З: "3",
+ И: "N",
+ Й: "N",
+ К: "K",
+ Л: "N",
+ М: "M",
+ Н: "H",
+ О: "O",
+ П: "N",
+ Р: "P",
+ С: "C",
+ Т: "T",
+ У: "y",
+ Ф: "O",
+ Х: "X",
+ Ц: "U",
+ Ч: "h",
+ Ш: "W",
+ Щ: "W",
+ Ъ: "B",
+ Ы: "X",
+ Ь: "B",
+ Э: "3",
+ Ю: "X",
+ Я: "R",
+ а: "a",
+ б: "b",
+ в: "a",
+ г: "r",
+ д: "y",
+ е: "e",
+ ж: "m",
+ з: "e",
+ и: "n",
+ й: "n",
+ к: "n",
+ л: "n",
+ м: "m",
+ н: "n",
+ о: "o",
+ п: "n",
+ р: "p",
+ с: "c",
+ т: "o",
+ у: "y",
+ ф: "b",
+ х: "x",
+ ц: "n",
+ ч: "n",
+ ш: "w",
+ щ: "w",
+ ъ: "a",
+ ы: "m",
+ ь: "a",
+ э: "e",
+ ю: "m",
+ я: "r",
+ };
+
+ /**
+ * This function is a convenience function for looking up information in the
+ * metricMap table. It takes a character as a string, and a style.
+ *
+ * Note: the `width` property may be undefined if fontMetricsData.js wasn't
+ * built using `Make extended_metrics`.
+ */
+ var getCharacterMetrics = function getCharacterMetrics(character, style) {
+ var ch = character.charCodeAt(0);
+ if (character[0] in extraCharacterMap) {
+ ch = extraCharacterMap[character[0]].charCodeAt(0);
+ } else if (_unicodeRegexes.cjkRegex.test(character[0])) {
+ ch = "M".charCodeAt(0);
+ }
+ var metrics = _fontMetricsData2.default[style][ch];
+ if (metrics) {
+ return {
+ depth: metrics[0],
+ height: metrics[1],
+ italic: metrics[2],
+ skew: metrics[3],
+ width: metrics[4],
+ };
+ }
+ };
+
+ var fontMetricsBySizeIndex = {};
+
+ /**
+ * Get the font metrics for a given size.
+ */
+ var getFontMetrics = function getFontMetrics(size) {
+ var sizeIndex = void 0;
+ if (size >= 5) {
+ sizeIndex = 0;
+ } else if (size >= 3) {
+ sizeIndex = 1;
+ } else {
+ sizeIndex = 2;
+ }
+ if (!fontMetricsBySizeIndex[sizeIndex]) {
+ var metrics = (fontMetricsBySizeIndex[sizeIndex] = {});
+ for (var key in sigmasAndXis) {
+ if (sigmasAndXis.hasOwnProperty(key)) {
+ metrics[key] = sigmasAndXis[key][sizeIndex];
+ }
+ }
+ metrics.cssEmPerMu = metrics.quad / 18;
+ }
+ return fontMetricsBySizeIndex[sizeIndex];
+ };
+
+ module.exports = {
+ getFontMetrics: getFontMetrics,
+ getCharacterMetrics: getCharacterMetrics,
+ };
+ },
+ { "./fontMetricsData": 42, "./unicodeRegexes": 49 },
+ ],
+ 42: [
+ function (require, module, exports) {
+ module.exports = {
+ "AMS-Regular": {
+ 65: [0, 0.68889, 0, 0],
+ 66: [0, 0.68889, 0, 0],
+ 67: [0, 0.68889, 0, 0],
+ 68: [0, 0.68889, 0, 0],
+ 69: [0, 0.68889, 0, 0],
+ 70: [0, 0.68889, 0, 0],
+ 71: [0, 0.68889, 0, 0],
+ 72: [0, 0.68889, 0, 0],
+ 73: [0, 0.68889, 0, 0],
+ 74: [0.16667, 0.68889, 0, 0],
+ 75: [0, 0.68889, 0, 0],
+ 76: [0, 0.68889, 0, 0],
+ 77: [0, 0.68889, 0, 0],
+ 78: [0, 0.68889, 0, 0],
+ 79: [0.16667, 0.68889, 0, 0],
+ 80: [0, 0.68889, 0, 0],
+ 81: [0.16667, 0.68889, 0, 0],
+ 82: [0, 0.68889, 0, 0],
+ 83: [0, 0.68889, 0, 0],
+ 84: [0, 0.68889, 0, 0],
+ 85: [0, 0.68889, 0, 0],
+ 86: [0, 0.68889, 0, 0],
+ 87: [0, 0.68889, 0, 0],
+ 88: [0, 0.68889, 0, 0],
+ 89: [0, 0.68889, 0, 0],
+ 90: [0, 0.68889, 0, 0],
+ 107: [0, 0.68889, 0, 0],
+ 165: [0, 0.675, 0.025, 0],
+ 174: [0.15559, 0.69224, 0, 0],
+ 240: [0, 0.68889, 0, 0],
+ 295: [0, 0.68889, 0, 0],
+ 710: [0, 0.825, 0, 0],
+ 732: [0, 0.9, 0, 0],
+ 770: [0, 0.825, 0, 0],
+ 771: [0, 0.9, 0, 0],
+ 989: [0.08167, 0.58167, 0, 0],
+ 1008: [0, 0.43056, 0.04028, 0],
+ 8245: [0, 0.54986, 0, 0],
+ 8463: [0, 0.68889, 0, 0],
+ 8487: [0, 0.68889, 0, 0],
+ 8498: [0, 0.68889, 0, 0],
+ 8502: [0, 0.68889, 0, 0],
+ 8503: [0, 0.68889, 0, 0],
+ 8504: [0, 0.68889, 0, 0],
+ 8513: [0, 0.68889, 0, 0],
+ 8592: [-0.03598, 0.46402, 0, 0],
+ 8594: [-0.03598, 0.46402, 0, 0],
+ 8602: [-0.13313, 0.36687, 0, 0],
+ 8603: [-0.13313, 0.36687, 0, 0],
+ 8606: [0.01354, 0.52239, 0, 0],
+ 8608: [0.01354, 0.52239, 0, 0],
+ 8610: [0.01354, 0.52239, 0, 0],
+ 8611: [0.01354, 0.52239, 0, 0],
+ 8619: [0, 0.54986, 0, 0],
+ 8620: [0, 0.54986, 0, 0],
+ 8621: [-0.13313, 0.37788, 0, 0],
+ 8622: [-0.13313, 0.36687, 0, 0],
+ 8624: [0, 0.69224, 0, 0],
+ 8625: [0, 0.69224, 0, 0],
+ 8630: [0, 0.43056, 0, 0],
+ 8631: [0, 0.43056, 0, 0],
+ 8634: [0.08198, 0.58198, 0, 0],
+ 8635: [0.08198, 0.58198, 0, 0],
+ 8638: [0.19444, 0.69224, 0, 0],
+ 8639: [0.19444, 0.69224, 0, 0],
+ 8642: [0.19444, 0.69224, 0, 0],
+ 8643: [0.19444, 0.69224, 0, 0],
+ 8644: [0.1808, 0.675, 0, 0],
+ 8646: [0.1808, 0.675, 0, 0],
+ 8647: [0.1808, 0.675, 0, 0],
+ 8648: [0.19444, 0.69224, 0, 0],
+ 8649: [0.1808, 0.675, 0, 0],
+ 8650: [0.19444, 0.69224, 0, 0],
+ 8651: [0.01354, 0.52239, 0, 0],
+ 8652: [0.01354, 0.52239, 0, 0],
+ 8653: [-0.13313, 0.36687, 0, 0],
+ 8654: [-0.13313, 0.36687, 0, 0],
+ 8655: [-0.13313, 0.36687, 0, 0],
+ 8666: [0.13667, 0.63667, 0, 0],
+ 8667: [0.13667, 0.63667, 0, 0],
+ 8669: [-0.13313, 0.37788, 0, 0],
+ 8672: [-0.064, 0.437, 0, 0],
+ 8674: [-0.064, 0.437, 0, 0],
+ 8705: [0, 0.825, 0, 0],
+ 8708: [0, 0.68889, 0, 0],
+ 8709: [0.08167, 0.58167, 0, 0],
+ 8717: [0, 0.43056, 0, 0],
+ 8722: [-0.03598, 0.46402, 0, 0],
+ 8724: [0.08198, 0.69224, 0, 0],
+ 8726: [0.08167, 0.58167, 0, 0],
+ 8733: [0, 0.69224, 0, 0],
+ 8736: [0, 0.69224, 0, 0],
+ 8737: [0, 0.69224, 0, 0],
+ 8738: [0.03517, 0.52239, 0, 0],
+ 8739: [0.08167, 0.58167, 0, 0],
+ 8740: [0.25142, 0.74111, 0, 0],
+ 8741: [0.08167, 0.58167, 0, 0],
+ 8742: [0.25142, 0.74111, 0, 0],
+ 8756: [0, 0.69224, 0, 0],
+ 8757: [0, 0.69224, 0, 0],
+ 8764: [-0.13313, 0.36687, 0, 0],
+ 8765: [-0.13313, 0.37788, 0, 0],
+ 8769: [-0.13313, 0.36687, 0, 0],
+ 8770: [-0.03625, 0.46375, 0, 0],
+ 8774: [0.30274, 0.79383, 0, 0],
+ 8776: [-0.01688, 0.48312, 0, 0],
+ 8778: [0.08167, 0.58167, 0, 0],
+ 8782: [0.06062, 0.54986, 0, 0],
+ 8783: [0.06062, 0.54986, 0, 0],
+ 8785: [0.08198, 0.58198, 0, 0],
+ 8786: [0.08198, 0.58198, 0, 0],
+ 8787: [0.08198, 0.58198, 0, 0],
+ 8790: [0, 0.69224, 0, 0],
+ 8791: [0.22958, 0.72958, 0, 0],
+ 8796: [0.08198, 0.91667, 0, 0],
+ 8806: [0.25583, 0.75583, 0, 0],
+ 8807: [0.25583, 0.75583, 0, 0],
+ 8808: [0.25142, 0.75726, 0, 0],
+ 8809: [0.25142, 0.75726, 0, 0],
+ 8812: [0.25583, 0.75583, 0, 0],
+ 8814: [0.20576, 0.70576, 0, 0],
+ 8815: [0.20576, 0.70576, 0, 0],
+ 8816: [0.30274, 0.79383, 0, 0],
+ 8817: [0.30274, 0.79383, 0, 0],
+ 8818: [0.22958, 0.72958, 0, 0],
+ 8819: [0.22958, 0.72958, 0, 0],
+ 8822: [0.1808, 0.675, 0, 0],
+ 8823: [0.1808, 0.675, 0, 0],
+ 8828: [0.13667, 0.63667, 0, 0],
+ 8829: [0.13667, 0.63667, 0, 0],
+ 8830: [0.22958, 0.72958, 0, 0],
+ 8831: [0.22958, 0.72958, 0, 0],
+ 8832: [0.20576, 0.70576, 0, 0],
+ 8833: [0.20576, 0.70576, 0, 0],
+ 8840: [0.30274, 0.79383, 0, 0],
+ 8841: [0.30274, 0.79383, 0, 0],
+ 8842: [0.13597, 0.63597, 0, 0],
+ 8843: [0.13597, 0.63597, 0, 0],
+ 8847: [0.03517, 0.54986, 0, 0],
+ 8848: [0.03517, 0.54986, 0, 0],
+ 8858: [0.08198, 0.58198, 0, 0],
+ 8859: [0.08198, 0.58198, 0, 0],
+ 8861: [0.08198, 0.58198, 0, 0],
+ 8862: [0, 0.675, 0, 0],
+ 8863: [0, 0.675, 0, 0],
+ 8864: [0, 0.675, 0, 0],
+ 8865: [0, 0.675, 0, 0],
+ 8872: [0, 0.69224, 0, 0],
+ 8873: [0, 0.69224, 0, 0],
+ 8874: [0, 0.69224, 0, 0],
+ 8876: [0, 0.68889, 0, 0],
+ 8877: [0, 0.68889, 0, 0],
+ 8878: [0, 0.68889, 0, 0],
+ 8879: [0, 0.68889, 0, 0],
+ 8882: [0.03517, 0.54986, 0, 0],
+ 8883: [0.03517, 0.54986, 0, 0],
+ 8884: [0.13667, 0.63667, 0, 0],
+ 8885: [0.13667, 0.63667, 0, 0],
+ 8888: [0, 0.54986, 0, 0],
+ 8890: [0.19444, 0.43056, 0, 0],
+ 8891: [0.19444, 0.69224, 0, 0],
+ 8892: [0.19444, 0.69224, 0, 0],
+ 8901: [0, 0.54986, 0, 0],
+ 8903: [0.08167, 0.58167, 0, 0],
+ 8905: [0.08167, 0.58167, 0, 0],
+ 8906: [0.08167, 0.58167, 0, 0],
+ 8907: [0, 0.69224, 0, 0],
+ 8908: [0, 0.69224, 0, 0],
+ 8909: [-0.03598, 0.46402, 0, 0],
+ 8910: [0, 0.54986, 0, 0],
+ 8911: [0, 0.54986, 0, 0],
+ 8912: [0.03517, 0.54986, 0, 0],
+ 8913: [0.03517, 0.54986, 0, 0],
+ 8914: [0, 0.54986, 0, 0],
+ 8915: [0, 0.54986, 0, 0],
+ 8916: [0, 0.69224, 0, 0],
+ 8918: [0.0391, 0.5391, 0, 0],
+ 8919: [0.0391, 0.5391, 0, 0],
+ 8920: [0.03517, 0.54986, 0, 0],
+ 8921: [0.03517, 0.54986, 0, 0],
+ 8922: [0.38569, 0.88569, 0, 0],
+ 8923: [0.38569, 0.88569, 0, 0],
+ 8926: [0.13667, 0.63667, 0, 0],
+ 8927: [0.13667, 0.63667, 0, 0],
+ 8928: [0.30274, 0.79383, 0, 0],
+ 8929: [0.30274, 0.79383, 0, 0],
+ 8934: [0.23222, 0.74111, 0, 0],
+ 8935: [0.23222, 0.74111, 0, 0],
+ 8936: [0.23222, 0.74111, 0, 0],
+ 8937: [0.23222, 0.74111, 0, 0],
+ 8938: [0.20576, 0.70576, 0, 0],
+ 8939: [0.20576, 0.70576, 0, 0],
+ 8940: [0.30274, 0.79383, 0, 0],
+ 8941: [0.30274, 0.79383, 0, 0],
+ 8994: [0.19444, 0.69224, 0, 0],
+ 8995: [0.19444, 0.69224, 0, 0],
+ 9416: [0.15559, 0.69224, 0, 0],
+ 9484: [0, 0.69224, 0, 0],
+ 9488: [0, 0.69224, 0, 0],
+ 9492: [0, 0.37788, 0, 0],
+ 9496: [0, 0.37788, 0, 0],
+ 9585: [0.19444, 0.68889, 0, 0],
+ 9586: [0.19444, 0.74111, 0, 0],
+ 9632: [0, 0.675, 0, 0],
+ 9633: [0, 0.675, 0, 0],
+ 9650: [0, 0.54986, 0, 0],
+ 9651: [0, 0.54986, 0, 0],
+ 9654: [0.03517, 0.54986, 0, 0],
+ 9660: [0, 0.54986, 0, 0],
+ 9661: [0, 0.54986, 0, 0],
+ 9664: [0.03517, 0.54986, 0, 0],
+ 9674: [0.11111, 0.69224, 0, 0],
+ 9733: [0.19444, 0.69224, 0, 0],
+ 10003: [0, 0.69224, 0, 0],
+ 10016: [0, 0.69224, 0, 0],
+ 10731: [0.11111, 0.69224, 0, 0],
+ 10846: [0.19444, 0.75583, 0, 0],
+ 10877: [0.13667, 0.63667, 0, 0],
+ 10878: [0.13667, 0.63667, 0, 0],
+ 10885: [0.25583, 0.75583, 0, 0],
+ 10886: [0.25583, 0.75583, 0, 0],
+ 10887: [0.13597, 0.63597, 0, 0],
+ 10888: [0.13597, 0.63597, 0, 0],
+ 10889: [0.26167, 0.75726, 0, 0],
+ 10890: [0.26167, 0.75726, 0, 0],
+ 10891: [0.48256, 0.98256, 0, 0],
+ 10892: [0.48256, 0.98256, 0, 0],
+ 10901: [0.13667, 0.63667, 0, 0],
+ 10902: [0.13667, 0.63667, 0, 0],
+ 10933: [0.25142, 0.75726, 0, 0],
+ 10934: [0.25142, 0.75726, 0, 0],
+ 10935: [0.26167, 0.75726, 0, 0],
+ 10936: [0.26167, 0.75726, 0, 0],
+ 10937: [0.26167, 0.75726, 0, 0],
+ 10938: [0.26167, 0.75726, 0, 0],
+ 10949: [0.25583, 0.75583, 0, 0],
+ 10950: [0.25583, 0.75583, 0, 0],
+ 10955: [0.28481, 0.79383, 0, 0],
+ 10956: [0.28481, 0.79383, 0, 0],
+ 57350: [0.08167, 0.58167, 0, 0],
+ 57351: [0.08167, 0.58167, 0, 0],
+ 57352: [0.08167, 0.58167, 0, 0],
+ 57353: [0, 0.43056, 0.04028, 0],
+ 57356: [0.25142, 0.75726, 0, 0],
+ 57357: [0.25142, 0.75726, 0, 0],
+ 57358: [0.41951, 0.91951, 0, 0],
+ 57359: [0.30274, 0.79383, 0, 0],
+ 57360: [0.30274, 0.79383, 0, 0],
+ 57361: [0.41951, 0.91951, 0, 0],
+ 57366: [0.25142, 0.75726, 0, 0],
+ 57367: [0.25142, 0.75726, 0, 0],
+ 57368: [0.25142, 0.75726, 0, 0],
+ 57369: [0.25142, 0.75726, 0, 0],
+ 57370: [0.13597, 0.63597, 0, 0],
+ 57371: [0.13597, 0.63597, 0, 0],
+ },
+ "Caligraphic-Regular": {
+ 48: [0, 0.43056, 0, 0],
+ 49: [0, 0.43056, 0, 0],
+ 50: [0, 0.43056, 0, 0],
+ 51: [0.19444, 0.43056, 0, 0],
+ 52: [0.19444, 0.43056, 0, 0],
+ 53: [0.19444, 0.43056, 0, 0],
+ 54: [0, 0.64444, 0, 0],
+ 55: [0.19444, 0.43056, 0, 0],
+ 56: [0, 0.64444, 0, 0],
+ 57: [0.19444, 0.43056, 0, 0],
+ 65: [0, 0.68333, 0, 0.19445],
+ 66: [0, 0.68333, 0.03041, 0.13889],
+ 67: [0, 0.68333, 0.05834, 0.13889],
+ 68: [0, 0.68333, 0.02778, 0.08334],
+ 69: [0, 0.68333, 0.08944, 0.11111],
+ 70: [0, 0.68333, 0.09931, 0.11111],
+ 71: [0.09722, 0.68333, 0.0593, 0.11111],
+ 72: [0, 0.68333, 0.00965, 0.11111],
+ 73: [0, 0.68333, 0.07382, 0],
+ 74: [0.09722, 0.68333, 0.18472, 0.16667],
+ 75: [0, 0.68333, 0.01445, 0.05556],
+ 76: [0, 0.68333, 0, 0.13889],
+ 77: [0, 0.68333, 0, 0.13889],
+ 78: [0, 0.68333, 0.14736, 0.08334],
+ 79: [0, 0.68333, 0.02778, 0.11111],
+ 80: [0, 0.68333, 0.08222, 0.08334],
+ 81: [0.09722, 0.68333, 0, 0.11111],
+ 82: [0, 0.68333, 0, 0.08334],
+ 83: [0, 0.68333, 0.075, 0.13889],
+ 84: [0, 0.68333, 0.25417, 0],
+ 85: [0, 0.68333, 0.09931, 0.08334],
+ 86: [0, 0.68333, 0.08222, 0],
+ 87: [0, 0.68333, 0.08222, 0.08334],
+ 88: [0, 0.68333, 0.14643, 0.13889],
+ 89: [0.09722, 0.68333, 0.08222, 0.08334],
+ 90: [0, 0.68333, 0.07944, 0.13889],
+ },
+ "Fraktur-Regular": {
+ 33: [0, 0.69141, 0, 0],
+ 34: [0, 0.69141, 0, 0],
+ 38: [0, 0.69141, 0, 0],
+ 39: [0, 0.69141, 0, 0],
+ 40: [0.24982, 0.74947, 0, 0],
+ 41: [0.24982, 0.74947, 0, 0],
+ 42: [0, 0.62119, 0, 0],
+ 43: [0.08319, 0.58283, 0, 0],
+ 44: [0, 0.10803, 0, 0],
+ 45: [0.08319, 0.58283, 0, 0],
+ 46: [0, 0.10803, 0, 0],
+ 47: [0.24982, 0.74947, 0, 0],
+ 48: [0, 0.47534, 0, 0],
+ 49: [0, 0.47534, 0, 0],
+ 50: [0, 0.47534, 0, 0],
+ 51: [0.18906, 0.47534, 0, 0],
+ 52: [0.18906, 0.47534, 0, 0],
+ 53: [0.18906, 0.47534, 0, 0],
+ 54: [0, 0.69141, 0, 0],
+ 55: [0.18906, 0.47534, 0, 0],
+ 56: [0, 0.69141, 0, 0],
+ 57: [0.18906, 0.47534, 0, 0],
+ 58: [0, 0.47534, 0, 0],
+ 59: [0.12604, 0.47534, 0, 0],
+ 61: [-0.13099, 0.36866, 0, 0],
+ 63: [0, 0.69141, 0, 0],
+ 65: [0, 0.69141, 0, 0],
+ 66: [0, 0.69141, 0, 0],
+ 67: [0, 0.69141, 0, 0],
+ 68: [0, 0.69141, 0, 0],
+ 69: [0, 0.69141, 0, 0],
+ 70: [0.12604, 0.69141, 0, 0],
+ 71: [0, 0.69141, 0, 0],
+ 72: [0.06302, 0.69141, 0, 0],
+ 73: [0, 0.69141, 0, 0],
+ 74: [0.12604, 0.69141, 0, 0],
+ 75: [0, 0.69141, 0, 0],
+ 76: [0, 0.69141, 0, 0],
+ 77: [0, 0.69141, 0, 0],
+ 78: [0, 0.69141, 0, 0],
+ 79: [0, 0.69141, 0, 0],
+ 80: [0.18906, 0.69141, 0, 0],
+ 81: [0.03781, 0.69141, 0, 0],
+ 82: [0, 0.69141, 0, 0],
+ 83: [0, 0.69141, 0, 0],
+ 84: [0, 0.69141, 0, 0],
+ 85: [0, 0.69141, 0, 0],
+ 86: [0, 0.69141, 0, 0],
+ 87: [0, 0.69141, 0, 0],
+ 88: [0, 0.69141, 0, 0],
+ 89: [0.18906, 0.69141, 0, 0],
+ 90: [0.12604, 0.69141, 0, 0],
+ 91: [0.24982, 0.74947, 0, 0],
+ 93: [0.24982, 0.74947, 0, 0],
+ 94: [0, 0.69141, 0, 0],
+ 97: [0, 0.47534, 0, 0],
+ 98: [0, 0.69141, 0, 0],
+ 99: [0, 0.47534, 0, 0],
+ 100: [0, 0.62119, 0, 0],
+ 101: [0, 0.47534, 0, 0],
+ 102: [0.18906, 0.69141, 0, 0],
+ 103: [0.18906, 0.47534, 0, 0],
+ 104: [0.18906, 0.69141, 0, 0],
+ 105: [0, 0.69141, 0, 0],
+ 106: [0, 0.69141, 0, 0],
+ 107: [0, 0.69141, 0, 0],
+ 108: [0, 0.69141, 0, 0],
+ 109: [0, 0.47534, 0, 0],
+ 110: [0, 0.47534, 0, 0],
+ 111: [0, 0.47534, 0, 0],
+ 112: [0.18906, 0.52396, 0, 0],
+ 113: [0.18906, 0.47534, 0, 0],
+ 114: [0, 0.47534, 0, 0],
+ 115: [0, 0.47534, 0, 0],
+ 116: [0, 0.62119, 0, 0],
+ 117: [0, 0.47534, 0, 0],
+ 118: [0, 0.52396, 0, 0],
+ 119: [0, 0.52396, 0, 0],
+ 120: [0.18906, 0.47534, 0, 0],
+ 121: [0.18906, 0.47534, 0, 0],
+ 122: [0.18906, 0.47534, 0, 0],
+ 8216: [0, 0.69141, 0, 0],
+ 8217: [0, 0.69141, 0, 0],
+ 58112: [0, 0.62119, 0, 0],
+ 58113: [0, 0.62119, 0, 0],
+ 58114: [0.18906, 0.69141, 0, 0],
+ 58115: [0.18906, 0.69141, 0, 0],
+ 58116: [0.18906, 0.47534, 0, 0],
+ 58117: [0, 0.69141, 0, 0],
+ 58118: [0, 0.62119, 0, 0],
+ 58119: [0, 0.47534, 0, 0],
+ },
+ "Main-Bold": {
+ 33: [0, 0.69444, 0, 0],
+ 34: [0, 0.69444, 0, 0],
+ 35: [0.19444, 0.69444, 0, 0],
+ 36: [0.05556, 0.75, 0, 0],
+ 37: [0.05556, 0.75, 0, 0],
+ 38: [0, 0.69444, 0, 0],
+ 39: [0, 0.69444, 0, 0],
+ 40: [0.25, 0.75, 0, 0],
+ 41: [0.25, 0.75, 0, 0],
+ 42: [0, 0.75, 0, 0],
+ 43: [0.13333, 0.63333, 0, 0],
+ 44: [0.19444, 0.15556, 0, 0],
+ 45: [0, 0.44444, 0, 0],
+ 46: [0, 0.15556, 0, 0],
+ 47: [0.25, 0.75, 0, 0],
+ 48: [0, 0.64444, 0, 0],
+ 49: [0, 0.64444, 0, 0],
+ 50: [0, 0.64444, 0, 0],
+ 51: [0, 0.64444, 0, 0],
+ 52: [0, 0.64444, 0, 0],
+ 53: [0, 0.64444, 0, 0],
+ 54: [0, 0.64444, 0, 0],
+ 55: [0, 0.64444, 0, 0],
+ 56: [0, 0.64444, 0, 0],
+ 57: [0, 0.64444, 0, 0],
+ 58: [0, 0.44444, 0, 0],
+ 59: [0.19444, 0.44444, 0, 0],
+ 60: [0.08556, 0.58556, 0, 0],
+ 61: [-0.10889, 0.39111, 0, 0],
+ 62: [0.08556, 0.58556, 0, 0],
+ 63: [0, 0.69444, 0, 0],
+ 64: [0, 0.69444, 0, 0],
+ 65: [0, 0.68611, 0, 0],
+ 66: [0, 0.68611, 0, 0],
+ 67: [0, 0.68611, 0, 0],
+ 68: [0, 0.68611, 0, 0],
+ 69: [0, 0.68611, 0, 0],
+ 70: [0, 0.68611, 0, 0],
+ 71: [0, 0.68611, 0, 0],
+ 72: [0, 0.68611, 0, 0],
+ 73: [0, 0.68611, 0, 0],
+ 74: [0, 0.68611, 0, 0],
+ 75: [0, 0.68611, 0, 0],
+ 76: [0, 0.68611, 0, 0],
+ 77: [0, 0.68611, 0, 0],
+ 78: [0, 0.68611, 0, 0],
+ 79: [0, 0.68611, 0, 0],
+ 80: [0, 0.68611, 0, 0],
+ 81: [0.19444, 0.68611, 0, 0],
+ 82: [0, 0.68611, 0, 0],
+ 83: [0, 0.68611, 0, 0],
+ 84: [0, 0.68611, 0, 0],
+ 85: [0, 0.68611, 0, 0],
+ 86: [0, 0.68611, 0.01597, 0],
+ 87: [0, 0.68611, 0.01597, 0],
+ 88: [0, 0.68611, 0, 0],
+ 89: [0, 0.68611, 0.02875, 0],
+ 90: [0, 0.68611, 0, 0],
+ 91: [0.25, 0.75, 0, 0],
+ 92: [0.25, 0.75, 0, 0],
+ 93: [0.25, 0.75, 0, 0],
+ 94: [0, 0.69444, 0, 0],
+ 95: [0.31, 0.13444, 0.03194, 0],
+ 96: [0, 0.69444, 0, 0],
+ 97: [0, 0.44444, 0, 0],
+ 98: [0, 0.69444, 0, 0],
+ 99: [0, 0.44444, 0, 0],
+ 100: [0, 0.69444, 0, 0],
+ 101: [0, 0.44444, 0, 0],
+ 102: [0, 0.69444, 0.10903, 0],
+ 103: [0.19444, 0.44444, 0.01597, 0],
+ 104: [0, 0.69444, 0, 0],
+ 105: [0, 0.69444, 0, 0],
+ 106: [0.19444, 0.69444, 0, 0],
+ 107: [0, 0.69444, 0, 0],
+ 108: [0, 0.69444, 0, 0],
+ 109: [0, 0.44444, 0, 0],
+ 110: [0, 0.44444, 0, 0],
+ 111: [0, 0.44444, 0, 0],
+ 112: [0.19444, 0.44444, 0, 0],
+ 113: [0.19444, 0.44444, 0, 0],
+ 114: [0, 0.44444, 0, 0],
+ 115: [0, 0.44444, 0, 0],
+ 116: [0, 0.63492, 0, 0],
+ 117: [0, 0.44444, 0, 0],
+ 118: [0, 0.44444, 0.01597, 0],
+ 119: [0, 0.44444, 0.01597, 0],
+ 120: [0, 0.44444, 0, 0],
+ 121: [0.19444, 0.44444, 0.01597, 0],
+ 122: [0, 0.44444, 0, 0],
+ 123: [0.25, 0.75, 0, 0],
+ 124: [0.25, 0.75, 0, 0],
+ 125: [0.25, 0.75, 0, 0],
+ 126: [0.35, 0.34444, 0, 0],
+ 168: [0, 0.69444, 0, 0],
+ 172: [0, 0.44444, 0, 0],
+ 175: [0, 0.59611, 0, 0],
+ 176: [0, 0.69444, 0, 0],
+ 177: [0.13333, 0.63333, 0, 0],
+ 180: [0, 0.69444, 0, 0],
+ 215: [0.13333, 0.63333, 0, 0],
+ 247: [0.13333, 0.63333, 0, 0],
+ 305: [0, 0.44444, 0, 0],
+ 567: [0.19444, 0.44444, 0, 0],
+ 710: [0, 0.69444, 0, 0],
+ 711: [0, 0.63194, 0, 0],
+ 713: [0, 0.59611, 0, 0],
+ 714: [0, 0.69444, 0, 0],
+ 715: [0, 0.69444, 0, 0],
+ 728: [0, 0.69444, 0, 0],
+ 729: [0, 0.69444, 0, 0],
+ 730: [0, 0.69444, 0, 0],
+ 732: [0, 0.69444, 0, 0],
+ 768: [0, 0.69444, 0, 0],
+ 769: [0, 0.69444, 0, 0],
+ 770: [0, 0.69444, 0, 0],
+ 771: [0, 0.69444, 0, 0],
+ 772: [0, 0.59611, 0, 0],
+ 774: [0, 0.69444, 0, 0],
+ 775: [0, 0.69444, 0, 0],
+ 776: [0, 0.69444, 0, 0],
+ 778: [0, 0.69444, 0, 0],
+ 779: [0, 0.69444, 0, 0],
+ 780: [0, 0.63194, 0, 0],
+ 824: [0.19444, 0.69444, 0, 0],
+ 915: [0, 0.68611, 0, 0],
+ 916: [0, 0.68611, 0, 0],
+ 920: [0, 0.68611, 0, 0],
+ 923: [0, 0.68611, 0, 0],
+ 926: [0, 0.68611, 0, 0],
+ 928: [0, 0.68611, 0, 0],
+ 931: [0, 0.68611, 0, 0],
+ 933: [0, 0.68611, 0, 0],
+ 934: [0, 0.68611, 0, 0],
+ 936: [0, 0.68611, 0, 0],
+ 937: [0, 0.68611, 0, 0],
+ 8211: [0, 0.44444, 0.03194, 0],
+ 8212: [0, 0.44444, 0.03194, 0],
+ 8216: [0, 0.69444, 0, 0],
+ 8217: [0, 0.69444, 0, 0],
+ 8220: [0, 0.69444, 0, 0],
+ 8221: [0, 0.69444, 0, 0],
+ 8224: [0.19444, 0.69444, 0, 0],
+ 8225: [0.19444, 0.69444, 0, 0],
+ 8242: [0, 0.55556, 0, 0],
+ 8407: [0, 0.72444, 0.15486, 0],
+ 8463: [0, 0.69444, 0, 0],
+ 8465: [0, 0.69444, 0, 0],
+ 8467: [0, 0.69444, 0, 0],
+ 8472: [0.19444, 0.44444, 0, 0],
+ 8476: [0, 0.69444, 0, 0],
+ 8501: [0, 0.69444, 0, 0],
+ 8592: [-0.10889, 0.39111, 0, 0],
+ 8593: [0.19444, 0.69444, 0, 0],
+ 8594: [-0.10889, 0.39111, 0, 0],
+ 8595: [0.19444, 0.69444, 0, 0],
+ 8596: [-0.10889, 0.39111, 0, 0],
+ 8597: [0.25, 0.75, 0, 0],
+ 8598: [0.19444, 0.69444, 0, 0],
+ 8599: [0.19444, 0.69444, 0, 0],
+ 8600: [0.19444, 0.69444, 0, 0],
+ 8601: [0.19444, 0.69444, 0, 0],
+ 8636: [-0.10889, 0.39111, 0, 0],
+ 8637: [-0.10889, 0.39111, 0, 0],
+ 8640: [-0.10889, 0.39111, 0, 0],
+ 8641: [-0.10889, 0.39111, 0, 0],
+ 8656: [-0.10889, 0.39111, 0, 0],
+ 8657: [0.19444, 0.69444, 0, 0],
+ 8658: [-0.10889, 0.39111, 0, 0],
+ 8659: [0.19444, 0.69444, 0, 0],
+ 8660: [-0.10889, 0.39111, 0, 0],
+ 8661: [0.25, 0.75, 0, 0],
+ 8704: [0, 0.69444, 0, 0],
+ 8706: [0, 0.69444, 0.06389, 0],
+ 8707: [0, 0.69444, 0, 0],
+ 8709: [0.05556, 0.75, 0, 0],
+ 8711: [0, 0.68611, 0, 0],
+ 8712: [0.08556, 0.58556, 0, 0],
+ 8715: [0.08556, 0.58556, 0, 0],
+ 8722: [0.13333, 0.63333, 0, 0],
+ 8723: [0.13333, 0.63333, 0, 0],
+ 8725: [0.25, 0.75, 0, 0],
+ 8726: [0.25, 0.75, 0, 0],
+ 8727: [-0.02778, 0.47222, 0, 0],
+ 8728: [-0.02639, 0.47361, 0, 0],
+ 8729: [-0.02639, 0.47361, 0, 0],
+ 8730: [0.18, 0.82, 0, 0],
+ 8733: [0, 0.44444, 0, 0],
+ 8734: [0, 0.44444, 0, 0],
+ 8736: [0, 0.69224, 0, 0],
+ 8739: [0.25, 0.75, 0, 0],
+ 8741: [0.25, 0.75, 0, 0],
+ 8743: [0, 0.55556, 0, 0],
+ 8744: [0, 0.55556, 0, 0],
+ 8745: [0, 0.55556, 0, 0],
+ 8746: [0, 0.55556, 0, 0],
+ 8747: [0.19444, 0.69444, 0.12778, 0],
+ 8764: [-0.10889, 0.39111, 0, 0],
+ 8768: [0.19444, 0.69444, 0, 0],
+ 8771: [0.00222, 0.50222, 0, 0],
+ 8776: [0.02444, 0.52444, 0, 0],
+ 8781: [0.00222, 0.50222, 0, 0],
+ 8801: [0.00222, 0.50222, 0, 0],
+ 8804: [0.19667, 0.69667, 0, 0],
+ 8805: [0.19667, 0.69667, 0, 0],
+ 8810: [0.08556, 0.58556, 0, 0],
+ 8811: [0.08556, 0.58556, 0, 0],
+ 8826: [0.08556, 0.58556, 0, 0],
+ 8827: [0.08556, 0.58556, 0, 0],
+ 8834: [0.08556, 0.58556, 0, 0],
+ 8835: [0.08556, 0.58556, 0, 0],
+ 8838: [0.19667, 0.69667, 0, 0],
+ 8839: [0.19667, 0.69667, 0, 0],
+ 8846: [0, 0.55556, 0, 0],
+ 8849: [0.19667, 0.69667, 0, 0],
+ 8850: [0.19667, 0.69667, 0, 0],
+ 8851: [0, 0.55556, 0, 0],
+ 8852: [0, 0.55556, 0, 0],
+ 8853: [0.13333, 0.63333, 0, 0],
+ 8854: [0.13333, 0.63333, 0, 0],
+ 8855: [0.13333, 0.63333, 0, 0],
+ 8856: [0.13333, 0.63333, 0, 0],
+ 8857: [0.13333, 0.63333, 0, 0],
+ 8866: [0, 0.69444, 0, 0],
+ 8867: [0, 0.69444, 0, 0],
+ 8868: [0, 0.69444, 0, 0],
+ 8869: [0, 0.69444, 0, 0],
+ 8900: [-0.02639, 0.47361, 0, 0],
+ 8901: [-0.02639, 0.47361, 0, 0],
+ 8902: [-0.02778, 0.47222, 0, 0],
+ 8968: [0.25, 0.75, 0, 0],
+ 8969: [0.25, 0.75, 0, 0],
+ 8970: [0.25, 0.75, 0, 0],
+ 8971: [0.25, 0.75, 0, 0],
+ 8994: [-0.13889, 0.36111, 0, 0],
+ 8995: [-0.13889, 0.36111, 0, 0],
+ 9651: [0.19444, 0.69444, 0, 0],
+ 9657: [-0.02778, 0.47222, 0, 0],
+ 9661: [0.19444, 0.69444, 0, 0],
+ 9667: [-0.02778, 0.47222, 0, 0],
+ 9711: [0.19444, 0.69444, 0, 0],
+ 9824: [0.12963, 0.69444, 0, 0],
+ 9825: [0.12963, 0.69444, 0, 0],
+ 9826: [0.12963, 0.69444, 0, 0],
+ 9827: [0.12963, 0.69444, 0, 0],
+ 9837: [0, 0.75, 0, 0],
+ 9838: [0.19444, 0.69444, 0, 0],
+ 9839: [0.19444, 0.69444, 0, 0],
+ 10216: [0.25, 0.75, 0, 0],
+ 10217: [0.25, 0.75, 0, 0],
+ 10815: [0, 0.68611, 0, 0],
+ 10927: [0.19667, 0.69667, 0, 0],
+ 10928: [0.19667, 0.69667, 0, 0],
+ },
+ "Main-Italic": {
+ 33: [0, 0.69444, 0.12417, 0],
+ 34: [0, 0.69444, 0.06961, 0],
+ 35: [0.19444, 0.69444, 0.06616, 0],
+ 37: [0.05556, 0.75, 0.13639, 0],
+ 38: [0, 0.69444, 0.09694, 0],
+ 39: [0, 0.69444, 0.12417, 0],
+ 40: [0.25, 0.75, 0.16194, 0],
+ 41: [0.25, 0.75, 0.03694, 0],
+ 42: [0, 0.75, 0.14917, 0],
+ 43: [0.05667, 0.56167, 0.03694, 0],
+ 44: [0.19444, 0.10556, 0, 0],
+ 45: [0, 0.43056, 0.02826, 0],
+ 46: [0, 0.10556, 0, 0],
+ 47: [0.25, 0.75, 0.16194, 0],
+ 48: [0, 0.64444, 0.13556, 0],
+ 49: [0, 0.64444, 0.13556, 0],
+ 50: [0, 0.64444, 0.13556, 0],
+ 51: [0, 0.64444, 0.13556, 0],
+ 52: [0.19444, 0.64444, 0.13556, 0],
+ 53: [0, 0.64444, 0.13556, 0],
+ 54: [0, 0.64444, 0.13556, 0],
+ 55: [0.19444, 0.64444, 0.13556, 0],
+ 56: [0, 0.64444, 0.13556, 0],
+ 57: [0, 0.64444, 0.13556, 0],
+ 58: [0, 0.43056, 0.0582, 0],
+ 59: [0.19444, 0.43056, 0.0582, 0],
+ 61: [-0.13313, 0.36687, 0.06616, 0],
+ 63: [0, 0.69444, 0.1225, 0],
+ 64: [0, 0.69444, 0.09597, 0],
+ 65: [0, 0.68333, 0, 0],
+ 66: [0, 0.68333, 0.10257, 0],
+ 67: [0, 0.68333, 0.14528, 0],
+ 68: [0, 0.68333, 0.09403, 0],
+ 69: [0, 0.68333, 0.12028, 0],
+ 70: [0, 0.68333, 0.13305, 0],
+ 71: [0, 0.68333, 0.08722, 0],
+ 72: [0, 0.68333, 0.16389, 0],
+ 73: [0, 0.68333, 0.15806, 0],
+ 74: [0, 0.68333, 0.14028, 0],
+ 75: [0, 0.68333, 0.14528, 0],
+ 76: [0, 0.68333, 0, 0],
+ 77: [0, 0.68333, 0.16389, 0],
+ 78: [0, 0.68333, 0.16389, 0],
+ 79: [0, 0.68333, 0.09403, 0],
+ 80: [0, 0.68333, 0.10257, 0],
+ 81: [0.19444, 0.68333, 0.09403, 0],
+ 82: [0, 0.68333, 0.03868, 0],
+ 83: [0, 0.68333, 0.11972, 0],
+ 84: [0, 0.68333, 0.13305, 0],
+ 85: [0, 0.68333, 0.16389, 0],
+ 86: [0, 0.68333, 0.18361, 0],
+ 87: [0, 0.68333, 0.18361, 0],
+ 88: [0, 0.68333, 0.15806, 0],
+ 89: [0, 0.68333, 0.19383, 0],
+ 90: [0, 0.68333, 0.14528, 0],
+ 91: [0.25, 0.75, 0.1875, 0],
+ 93: [0.25, 0.75, 0.10528, 0],
+ 94: [0, 0.69444, 0.06646, 0],
+ 95: [0.31, 0.12056, 0.09208, 0],
+ 97: [0, 0.43056, 0.07671, 0],
+ 98: [0, 0.69444, 0.06312, 0],
+ 99: [0, 0.43056, 0.05653, 0],
+ 100: [0, 0.69444, 0.10333, 0],
+ 101: [0, 0.43056, 0.07514, 0],
+ 102: [0.19444, 0.69444, 0.21194, 0],
+ 103: [0.19444, 0.43056, 0.08847, 0],
+ 104: [0, 0.69444, 0.07671, 0],
+ 105: [0, 0.65536, 0.1019, 0],
+ 106: [0.19444, 0.65536, 0.14467, 0],
+ 107: [0, 0.69444, 0.10764, 0],
+ 108: [0, 0.69444, 0.10333, 0],
+ 109: [0, 0.43056, 0.07671, 0],
+ 110: [0, 0.43056, 0.07671, 0],
+ 111: [0, 0.43056, 0.06312, 0],
+ 112: [0.19444, 0.43056, 0.06312, 0],
+ 113: [0.19444, 0.43056, 0.08847, 0],
+ 114: [0, 0.43056, 0.10764, 0],
+ 115: [0, 0.43056, 0.08208, 0],
+ 116: [0, 0.61508, 0.09486, 0],
+ 117: [0, 0.43056, 0.07671, 0],
+ 118: [0, 0.43056, 0.10764, 0],
+ 119: [0, 0.43056, 0.10764, 0],
+ 120: [0, 0.43056, 0.12042, 0],
+ 121: [0.19444, 0.43056, 0.08847, 0],
+ 122: [0, 0.43056, 0.12292, 0],
+ 126: [0.35, 0.31786, 0.11585, 0],
+ 163: [0, 0.69444, 0, 0],
+ 305: [0, 0.43056, 0, 0.02778],
+ 567: [0.19444, 0.43056, 0, 0.08334],
+ 768: [0, 0.69444, 0, 0],
+ 769: [0, 0.69444, 0.09694, 0],
+ 770: [0, 0.69444, 0.06646, 0],
+ 771: [0, 0.66786, 0.11585, 0],
+ 772: [0, 0.56167, 0.10333, 0],
+ 774: [0, 0.69444, 0.10806, 0],
+ 775: [0, 0.66786, 0.11752, 0],
+ 776: [0, 0.66786, 0.10474, 0],
+ 778: [0, 0.69444, 0, 0],
+ 779: [0, 0.69444, 0.1225, 0],
+ 780: [0, 0.62847, 0.08295, 0],
+ 915: [0, 0.68333, 0.13305, 0],
+ 916: [0, 0.68333, 0, 0],
+ 920: [0, 0.68333, 0.09403, 0],
+ 923: [0, 0.68333, 0, 0],
+ 926: [0, 0.68333, 0.15294, 0],
+ 928: [0, 0.68333, 0.16389, 0],
+ 931: [0, 0.68333, 0.12028, 0],
+ 933: [0, 0.68333, 0.11111, 0],
+ 934: [0, 0.68333, 0.05986, 0],
+ 936: [0, 0.68333, 0.11111, 0],
+ 937: [0, 0.68333, 0.10257, 0],
+ 8211: [0, 0.43056, 0.09208, 0],
+ 8212: [0, 0.43056, 0.09208, 0],
+ 8216: [0, 0.69444, 0.12417, 0],
+ 8217: [0, 0.69444, 0.12417, 0],
+ 8220: [0, 0.69444, 0.1685, 0],
+ 8221: [0, 0.69444, 0.06961, 0],
+ 8463: [0, 0.68889, 0, 0],
+ },
+ "Main-Regular": {
+ 32: [0, 0, 0, 0],
+ 33: [0, 0.69444, 0, 0],
+ 34: [0, 0.69444, 0, 0],
+ 35: [0.19444, 0.69444, 0, 0],
+ 36: [0.05556, 0.75, 0, 0],
+ 37: [0.05556, 0.75, 0, 0],
+ 38: [0, 0.69444, 0, 0],
+ 39: [0, 0.69444, 0, 0],
+ 40: [0.25, 0.75, 0, 0],
+ 41: [0.25, 0.75, 0, 0],
+ 42: [0, 0.75, 0, 0],
+ 43: [0.08333, 0.58333, 0, 0],
+ 44: [0.19444, 0.10556, 0, 0],
+ 45: [0, 0.43056, 0, 0],
+ 46: [0, 0.10556, 0, 0],
+ 47: [0.25, 0.75, 0, 0],
+ 48: [0, 0.64444, 0, 0],
+ 49: [0, 0.64444, 0, 0],
+ 50: [0, 0.64444, 0, 0],
+ 51: [0, 0.64444, 0, 0],
+ 52: [0, 0.64444, 0, 0],
+ 53: [0, 0.64444, 0, 0],
+ 54: [0, 0.64444, 0, 0],
+ 55: [0, 0.64444, 0, 0],
+ 56: [0, 0.64444, 0, 0],
+ 57: [0, 0.64444, 0, 0],
+ 58: [0, 0.43056, 0, 0],
+ 59: [0.19444, 0.43056, 0, 0],
+ 60: [0.0391, 0.5391, 0, 0],
+ 61: [-0.13313, 0.36687, 0, 0],
+ 62: [0.0391, 0.5391, 0, 0],
+ 63: [0, 0.69444, 0, 0],
+ 64: [0, 0.69444, 0, 0],
+ 65: [0, 0.68333, 0, 0],
+ 66: [0, 0.68333, 0, 0],
+ 67: [0, 0.68333, 0, 0],
+ 68: [0, 0.68333, 0, 0],
+ 69: [0, 0.68333, 0, 0],
+ 70: [0, 0.68333, 0, 0],
+ 71: [0, 0.68333, 0, 0],
+ 72: [0, 0.68333, 0, 0],
+ 73: [0, 0.68333, 0, 0],
+ 74: [0, 0.68333, 0, 0],
+ 75: [0, 0.68333, 0, 0],
+ 76: [0, 0.68333, 0, 0],
+ 77: [0, 0.68333, 0, 0],
+ 78: [0, 0.68333, 0, 0],
+ 79: [0, 0.68333, 0, 0],
+ 80: [0, 0.68333, 0, 0],
+ 81: [0.19444, 0.68333, 0, 0],
+ 82: [0, 0.68333, 0, 0],
+ 83: [0, 0.68333, 0, 0],
+ 84: [0, 0.68333, 0, 0],
+ 85: [0, 0.68333, 0, 0],
+ 86: [0, 0.68333, 0.01389, 0],
+ 87: [0, 0.68333, 0.01389, 0],
+ 88: [0, 0.68333, 0, 0],
+ 89: [0, 0.68333, 0.025, 0],
+ 90: [0, 0.68333, 0, 0],
+ 91: [0.25, 0.75, 0, 0],
+ 92: [0.25, 0.75, 0, 0],
+ 93: [0.25, 0.75, 0, 0],
+ 94: [0, 0.69444, 0, 0],
+ 95: [0.31, 0.12056, 0.02778, 0],
+ 96: [0, 0.69444, 0, 0],
+ 97: [0, 0.43056, 0, 0],
+ 98: [0, 0.69444, 0, 0],
+ 99: [0, 0.43056, 0, 0],
+ 100: [0, 0.69444, 0, 0],
+ 101: [0, 0.43056, 0, 0],
+ 102: [0, 0.69444, 0.07778, 0],
+ 103: [0.19444, 0.43056, 0.01389, 0],
+ 104: [0, 0.69444, 0, 0],
+ 105: [0, 0.66786, 0, 0],
+ 106: [0.19444, 0.66786, 0, 0],
+ 107: [0, 0.69444, 0, 0],
+ 108: [0, 0.69444, 0, 0],
+ 109: [0, 0.43056, 0, 0],
+ 110: [0, 0.43056, 0, 0],
+ 111: [0, 0.43056, 0, 0],
+ 112: [0.19444, 0.43056, 0, 0],
+ 113: [0.19444, 0.43056, 0, 0],
+ 114: [0, 0.43056, 0, 0],
+ 115: [0, 0.43056, 0, 0],
+ 116: [0, 0.61508, 0, 0],
+ 117: [0, 0.43056, 0, 0],
+ 118: [0, 0.43056, 0.01389, 0],
+ 119: [0, 0.43056, 0.01389, 0],
+ 120: [0, 0.43056, 0, 0],
+ 121: [0.19444, 0.43056, 0.01389, 0],
+ 122: [0, 0.43056, 0, 0],
+ 123: [0.25, 0.75, 0, 0],
+ 124: [0.25, 0.75, 0, 0],
+ 125: [0.25, 0.75, 0, 0],
+ 126: [0.35, 0.31786, 0, 0],
+ 160: [0, 0, 0, 0],
+ 168: [0, 0.66786, 0, 0],
+ 172: [0, 0.43056, 0, 0],
+ 175: [0, 0.56778, 0, 0],
+ 176: [0, 0.69444, 0, 0],
+ 177: [0.08333, 0.58333, 0, 0],
+ 180: [0, 0.69444, 0, 0],
+ 215: [0.08333, 0.58333, 0, 0],
+ 247: [0.08333, 0.58333, 0, 0],
+ 305: [0, 0.43056, 0, 0],
+ 567: [0.19444, 0.43056, 0, 0],
+ 710: [0, 0.69444, 0, 0],
+ 711: [0, 0.62847, 0, 0],
+ 713: [0, 0.56778, 0, 0],
+ 714: [0, 0.69444, 0, 0],
+ 715: [0, 0.69444, 0, 0],
+ 728: [0, 0.69444, 0, 0],
+ 729: [0, 0.66786, 0, 0],
+ 730: [0, 0.69444, 0, 0],
+ 732: [0, 0.66786, 0, 0],
+ 768: [0, 0.69444, 0, 0],
+ 769: [0, 0.69444, 0, 0],
+ 770: [0, 0.69444, 0, 0],
+ 771: [0, 0.66786, 0, 0],
+ 772: [0, 0.56778, 0, 0],
+ 774: [0, 0.69444, 0, 0],
+ 775: [0, 0.66786, 0, 0],
+ 776: [0, 0.66786, 0, 0],
+ 778: [0, 0.69444, 0, 0],
+ 779: [0, 0.69444, 0, 0],
+ 780: [0, 0.62847, 0, 0],
+ 824: [0.19444, 0.69444, 0, 0],
+ 915: [0, 0.68333, 0, 0],
+ 916: [0, 0.68333, 0, 0],
+ 920: [0, 0.68333, 0, 0],
+ 923: [0, 0.68333, 0, 0],
+ 926: [0, 0.68333, 0, 0],
+ 928: [0, 0.68333, 0, 0],
+ 931: [0, 0.68333, 0, 0],
+ 933: [0, 0.68333, 0, 0],
+ 934: [0, 0.68333, 0, 0],
+ 936: [0, 0.68333, 0, 0],
+ 937: [0, 0.68333, 0, 0],
+ 8211: [0, 0.43056, 0.02778, 0],
+ 8212: [0, 0.43056, 0.02778, 0],
+ 8216: [0, 0.69444, 0, 0],
+ 8217: [0, 0.69444, 0, 0],
+ 8220: [0, 0.69444, 0, 0],
+ 8221: [0, 0.69444, 0, 0],
+ 8224: [0.19444, 0.69444, 0, 0],
+ 8225: [0.19444, 0.69444, 0, 0],
+ 8230: [0, 0.12, 0, 0],
+ 8242: [0, 0.55556, 0, 0],
+ 8407: [0, 0.71444, 0.15382, 0],
+ 8463: [0, 0.68889, 0, 0],
+ 8465: [0, 0.69444, 0, 0],
+ 8467: [0, 0.69444, 0, 0.11111],
+ 8472: [0.19444, 0.43056, 0, 0.11111],
+ 8476: [0, 0.69444, 0, 0],
+ 8501: [0, 0.69444, 0, 0],
+ 8592: [-0.13313, 0.36687, 0, 0],
+ 8593: [0.19444, 0.69444, 0, 0],
+ 8594: [-0.13313, 0.36687, 0, 0],
+ 8595: [0.19444, 0.69444, 0, 0],
+ 8596: [-0.13313, 0.36687, 0, 0],
+ 8597: [0.25, 0.75, 0, 0],
+ 8598: [0.19444, 0.69444, 0, 0],
+ 8599: [0.19444, 0.69444, 0, 0],
+ 8600: [0.19444, 0.69444, 0, 0],
+ 8601: [0.19444, 0.69444, 0, 0],
+ 8614: [0.011, 0.511, 0, 0],
+ 8617: [0.011, 0.511, 0, 0],
+ 8618: [0.011, 0.511, 0, 0],
+ 8636: [-0.13313, 0.36687, 0, 0],
+ 8637: [-0.13313, 0.36687, 0, 0],
+ 8640: [-0.13313, 0.36687, 0, 0],
+ 8641: [-0.13313, 0.36687, 0, 0],
+ 8652: [0.011, 0.671, 0, 0],
+ 8656: [-0.13313, 0.36687, 0, 0],
+ 8657: [0.19444, 0.69444, 0, 0],
+ 8658: [-0.13313, 0.36687, 0, 0],
+ 8659: [0.19444, 0.69444, 0, 0],
+ 8660: [-0.13313, 0.36687, 0, 0],
+ 8661: [0.25, 0.75, 0, 0],
+ 8704: [0, 0.69444, 0, 0],
+ 8706: [0, 0.69444, 0.05556, 0.08334],
+ 8707: [0, 0.69444, 0, 0],
+ 8709: [0.05556, 0.75, 0, 0],
+ 8711: [0, 0.68333, 0, 0],
+ 8712: [0.0391, 0.5391, 0, 0],
+ 8715: [0.0391, 0.5391, 0, 0],
+ 8722: [0.08333, 0.58333, 0, 0],
+ 8723: [0.08333, 0.58333, 0, 0],
+ 8725: [0.25, 0.75, 0, 0],
+ 8726: [0.25, 0.75, 0, 0],
+ 8727: [-0.03472, 0.46528, 0, 0],
+ 8728: [-0.05555, 0.44445, 0, 0],
+ 8729: [-0.05555, 0.44445, 0, 0],
+ 8730: [0.2, 0.8, 0, 0],
+ 8733: [0, 0.43056, 0, 0],
+ 8734: [0, 0.43056, 0, 0],
+ 8736: [0, 0.69224, 0, 0],
+ 8739: [0.25, 0.75, 0, 0],
+ 8741: [0.25, 0.75, 0, 0],
+ 8743: [0, 0.55556, 0, 0],
+ 8744: [0, 0.55556, 0, 0],
+ 8745: [0, 0.55556, 0, 0],
+ 8746: [0, 0.55556, 0, 0],
+ 8747: [0.19444, 0.69444, 0.11111, 0],
+ 8764: [-0.13313, 0.36687, 0, 0],
+ 8768: [0.19444, 0.69444, 0, 0],
+ 8771: [-0.03625, 0.46375, 0, 0],
+ 8773: [-0.022, 0.589, 0, 0],
+ 8776: [-0.01688, 0.48312, 0, 0],
+ 8781: [-0.03625, 0.46375, 0, 0],
+ 8784: [-0.133, 0.67, 0, 0],
+ 8800: [0.215, 0.716, 0, 0],
+ 8801: [-0.03625, 0.46375, 0, 0],
+ 8804: [0.13597, 0.63597, 0, 0],
+ 8805: [0.13597, 0.63597, 0, 0],
+ 8810: [0.0391, 0.5391, 0, 0],
+ 8811: [0.0391, 0.5391, 0, 0],
+ 8826: [0.0391, 0.5391, 0, 0],
+ 8827: [0.0391, 0.5391, 0, 0],
+ 8834: [0.0391, 0.5391, 0, 0],
+ 8835: [0.0391, 0.5391, 0, 0],
+ 8838: [0.13597, 0.63597, 0, 0],
+ 8839: [0.13597, 0.63597, 0, 0],
+ 8846: [0, 0.55556, 0, 0],
+ 8849: [0.13597, 0.63597, 0, 0],
+ 8850: [0.13597, 0.63597, 0, 0],
+ 8851: [0, 0.55556, 0, 0],
+ 8852: [0, 0.55556, 0, 0],
+ 8853: [0.08333, 0.58333, 0, 0],
+ 8854: [0.08333, 0.58333, 0, 0],
+ 8855: [0.08333, 0.58333, 0, 0],
+ 8856: [0.08333, 0.58333, 0, 0],
+ 8857: [0.08333, 0.58333, 0, 0],
+ 8866: [0, 0.69444, 0, 0],
+ 8867: [0, 0.69444, 0, 0],
+ 8868: [0, 0.69444, 0, 0],
+ 8869: [0, 0.69444, 0, 0],
+ 8872: [0.249, 0.75, 0, 0],
+ 8900: [-0.05555, 0.44445, 0, 0],
+ 8901: [-0.05555, 0.44445, 0, 0],
+ 8902: [-0.03472, 0.46528, 0, 0],
+ 8904: [0.005, 0.505, 0, 0],
+ 8942: [0.03, 0.9, 0, 0],
+ 8943: [-0.19, 0.31, 0, 0],
+ 8945: [-0.1, 0.82, 0, 0],
+ 8968: [0.25, 0.75, 0, 0],
+ 8969: [0.25, 0.75, 0, 0],
+ 8970: [0.25, 0.75, 0, 0],
+ 8971: [0.25, 0.75, 0, 0],
+ 8994: [-0.14236, 0.35764, 0, 0],
+ 8995: [-0.14236, 0.35764, 0, 0],
+ 9136: [0.244, 0.744, 0, 0],
+ 9137: [0.244, 0.744, 0, 0],
+ 9651: [0.19444, 0.69444, 0, 0],
+ 9657: [-0.03472, 0.46528, 0, 0],
+ 9661: [0.19444, 0.69444, 0, 0],
+ 9667: [-0.03472, 0.46528, 0, 0],
+ 9711: [0.19444, 0.69444, 0, 0],
+ 9824: [0.12963, 0.69444, 0, 0],
+ 9825: [0.12963, 0.69444, 0, 0],
+ 9826: [0.12963, 0.69444, 0, 0],
+ 9827: [0.12963, 0.69444, 0, 0],
+ 9837: [0, 0.75, 0, 0],
+ 9838: [0.19444, 0.69444, 0, 0],
+ 9839: [0.19444, 0.69444, 0, 0],
+ 10216: [0.25, 0.75, 0, 0],
+ 10217: [0.25, 0.75, 0, 0],
+ 10222: [0.244, 0.744, 0, 0],
+ 10223: [0.244, 0.744, 0, 0],
+ 10229: [0.011, 0.511, 0, 0],
+ 10230: [0.011, 0.511, 0, 0],
+ 10231: [0.011, 0.511, 0, 0],
+ 10232: [0.024, 0.525, 0, 0],
+ 10233: [0.024, 0.525, 0, 0],
+ 10234: [0.024, 0.525, 0, 0],
+ 10236: [0.011, 0.511, 0, 0],
+ 10815: [0, 0.68333, 0, 0],
+ 10927: [0.13597, 0.63597, 0, 0],
+ 10928: [0.13597, 0.63597, 0, 0],
+ },
+ "Math-BoldItalic": {
+ 47: [0.19444, 0.69444, 0, 0],
+ 65: [0, 0.68611, 0, 0],
+ 66: [0, 0.68611, 0.04835, 0],
+ 67: [0, 0.68611, 0.06979, 0],
+ 68: [0, 0.68611, 0.03194, 0],
+ 69: [0, 0.68611, 0.05451, 0],
+ 70: [0, 0.68611, 0.15972, 0],
+ 71: [0, 0.68611, 0, 0],
+ 72: [0, 0.68611, 0.08229, 0],
+ 73: [0, 0.68611, 0.07778, 0],
+ 74: [0, 0.68611, 0.10069, 0],
+ 75: [0, 0.68611, 0.06979, 0],
+ 76: [0, 0.68611, 0, 0],
+ 77: [0, 0.68611, 0.11424, 0],
+ 78: [0, 0.68611, 0.11424, 0],
+ 79: [0, 0.68611, 0.03194, 0],
+ 80: [0, 0.68611, 0.15972, 0],
+ 81: [0.19444, 0.68611, 0, 0],
+ 82: [0, 0.68611, 0.00421, 0],
+ 83: [0, 0.68611, 0.05382, 0],
+ 84: [0, 0.68611, 0.15972, 0],
+ 85: [0, 0.68611, 0.11424, 0],
+ 86: [0, 0.68611, 0.25555, 0],
+ 87: [0, 0.68611, 0.15972, 0],
+ 88: [0, 0.68611, 0.07778, 0],
+ 89: [0, 0.68611, 0.25555, 0],
+ 90: [0, 0.68611, 0.06979, 0],
+ 97: [0, 0.44444, 0, 0],
+ 98: [0, 0.69444, 0, 0],
+ 99: [0, 0.44444, 0, 0],
+ 100: [0, 0.69444, 0, 0],
+ 101: [0, 0.44444, 0, 0],
+ 102: [0.19444, 0.69444, 0.11042, 0],
+ 103: [0.19444, 0.44444, 0.03704, 0],
+ 104: [0, 0.69444, 0, 0],
+ 105: [0, 0.69326, 0, 0],
+ 106: [0.19444, 0.69326, 0.0622, 0],
+ 107: [0, 0.69444, 0.01852, 0],
+ 108: [0, 0.69444, 0.0088, 0],
+ 109: [0, 0.44444, 0, 0],
+ 110: [0, 0.44444, 0, 0],
+ 111: [0, 0.44444, 0, 0],
+ 112: [0.19444, 0.44444, 0, 0],
+ 113: [0.19444, 0.44444, 0.03704, 0],
+ 114: [0, 0.44444, 0.03194, 0],
+ 115: [0, 0.44444, 0, 0],
+ 116: [0, 0.63492, 0, 0],
+ 117: [0, 0.44444, 0, 0],
+ 118: [0, 0.44444, 0.03704, 0],
+ 119: [0, 0.44444, 0.02778, 0],
+ 120: [0, 0.44444, 0, 0],
+ 121: [0.19444, 0.44444, 0.03704, 0],
+ 122: [0, 0.44444, 0.04213, 0],
+ 915: [0, 0.68611, 0.15972, 0],
+ 916: [0, 0.68611, 0, 0],
+ 920: [0, 0.68611, 0.03194, 0],
+ 923: [0, 0.68611, 0, 0],
+ 926: [0, 0.68611, 0.07458, 0],
+ 928: [0, 0.68611, 0.08229, 0],
+ 931: [0, 0.68611, 0.05451, 0],
+ 933: [0, 0.68611, 0.15972, 0],
+ 934: [0, 0.68611, 0, 0],
+ 936: [0, 0.68611, 0.11653, 0],
+ 937: [0, 0.68611, 0.04835, 0],
+ 945: [0, 0.44444, 0, 0],
+ 946: [0.19444, 0.69444, 0.03403, 0],
+ 947: [0.19444, 0.44444, 0.06389, 0],
+ 948: [0, 0.69444, 0.03819, 0],
+ 949: [0, 0.44444, 0, 0],
+ 950: [0.19444, 0.69444, 0.06215, 0],
+ 951: [0.19444, 0.44444, 0.03704, 0],
+ 952: [0, 0.69444, 0.03194, 0],
+ 953: [0, 0.44444, 0, 0],
+ 954: [0, 0.44444, 0, 0],
+ 955: [0, 0.69444, 0, 0],
+ 956: [0.19444, 0.44444, 0, 0],
+ 957: [0, 0.44444, 0.06898, 0],
+ 958: [0.19444, 0.69444, 0.03021, 0],
+ 959: [0, 0.44444, 0, 0],
+ 960: [0, 0.44444, 0.03704, 0],
+ 961: [0.19444, 0.44444, 0, 0],
+ 962: [0.09722, 0.44444, 0.07917, 0],
+ 963: [0, 0.44444, 0.03704, 0],
+ 964: [0, 0.44444, 0.13472, 0],
+ 965: [0, 0.44444, 0.03704, 0],
+ 966: [0.19444, 0.44444, 0, 0],
+ 967: [0.19444, 0.44444, 0, 0],
+ 968: [0.19444, 0.69444, 0.03704, 0],
+ 969: [0, 0.44444, 0.03704, 0],
+ 977: [0, 0.69444, 0, 0],
+ 981: [0.19444, 0.69444, 0, 0],
+ 982: [0, 0.44444, 0.03194, 0],
+ 1009: [0.19444, 0.44444, 0, 0],
+ 1013: [0, 0.44444, 0, 0],
+ },
+ "Math-Italic": {
+ 47: [0.19444, 0.69444, 0, 0],
+ 65: [0, 0.68333, 0, 0.13889],
+ 66: [0, 0.68333, 0.05017, 0.08334],
+ 67: [0, 0.68333, 0.07153, 0.08334],
+ 68: [0, 0.68333, 0.02778, 0.05556],
+ 69: [0, 0.68333, 0.05764, 0.08334],
+ 70: [0, 0.68333, 0.13889, 0.08334],
+ 71: [0, 0.68333, 0, 0.08334],
+ 72: [0, 0.68333, 0.08125, 0.05556],
+ 73: [0, 0.68333, 0.07847, 0.11111],
+ 74: [0, 0.68333, 0.09618, 0.16667],
+ 75: [0, 0.68333, 0.07153, 0.05556],
+ 76: [0, 0.68333, 0, 0.02778],
+ 77: [0, 0.68333, 0.10903, 0.08334],
+ 78: [0, 0.68333, 0.10903, 0.08334],
+ 79: [0, 0.68333, 0.02778, 0.08334],
+ 80: [0, 0.68333, 0.13889, 0.08334],
+ 81: [0.19444, 0.68333, 0, 0.08334],
+ 82: [0, 0.68333, 0.00773, 0.08334],
+ 83: [0, 0.68333, 0.05764, 0.08334],
+ 84: [0, 0.68333, 0.13889, 0.08334],
+ 85: [0, 0.68333, 0.10903, 0.02778],
+ 86: [0, 0.68333, 0.22222, 0],
+ 87: [0, 0.68333, 0.13889, 0],
+ 88: [0, 0.68333, 0.07847, 0.08334],
+ 89: [0, 0.68333, 0.22222, 0],
+ 90: [0, 0.68333, 0.07153, 0.08334],
+ 97: [0, 0.43056, 0, 0],
+ 98: [0, 0.69444, 0, 0],
+ 99: [0, 0.43056, 0, 0.05556],
+ 100: [0, 0.69444, 0, 0.16667],
+ 101: [0, 0.43056, 0, 0.05556],
+ 102: [0.19444, 0.69444, 0.10764, 0.16667],
+ 103: [0.19444, 0.43056, 0.03588, 0.02778],
+ 104: [0, 0.69444, 0, 0],
+ 105: [0, 0.65952, 0, 0],
+ 106: [0.19444, 0.65952, 0.05724, 0],
+ 107: [0, 0.69444, 0.03148, 0],
+ 108: [0, 0.69444, 0.01968, 0.08334],
+ 109: [0, 0.43056, 0, 0],
+ 110: [0, 0.43056, 0, 0],
+ 111: [0, 0.43056, 0, 0.05556],
+ 112: [0.19444, 0.43056, 0, 0.08334],
+ 113: [0.19444, 0.43056, 0.03588, 0.08334],
+ 114: [0, 0.43056, 0.02778, 0.05556],
+ 115: [0, 0.43056, 0, 0.05556],
+ 116: [0, 0.61508, 0, 0.08334],
+ 117: [0, 0.43056, 0, 0.02778],
+ 118: [0, 0.43056, 0.03588, 0.02778],
+ 119: [0, 0.43056, 0.02691, 0.08334],
+ 120: [0, 0.43056, 0, 0.02778],
+ 121: [0.19444, 0.43056, 0.03588, 0.05556],
+ 122: [0, 0.43056, 0.04398, 0.05556],
+ 915: [0, 0.68333, 0.13889, 0.08334],
+ 916: [0, 0.68333, 0, 0.16667],
+ 920: [0, 0.68333, 0.02778, 0.08334],
+ 923: [0, 0.68333, 0, 0.16667],
+ 926: [0, 0.68333, 0.07569, 0.08334],
+ 928: [0, 0.68333, 0.08125, 0.05556],
+ 931: [0, 0.68333, 0.05764, 0.08334],
+ 933: [0, 0.68333, 0.13889, 0.05556],
+ 934: [0, 0.68333, 0, 0.08334],
+ 936: [0, 0.68333, 0.11, 0.05556],
+ 937: [0, 0.68333, 0.05017, 0.08334],
+ 945: [0, 0.43056, 0.0037, 0.02778],
+ 946: [0.19444, 0.69444, 0.05278, 0.08334],
+ 947: [0.19444, 0.43056, 0.05556, 0],
+ 948: [0, 0.69444, 0.03785, 0.05556],
+ 949: [0, 0.43056, 0, 0.08334],
+ 950: [0.19444, 0.69444, 0.07378, 0.08334],
+ 951: [0.19444, 0.43056, 0.03588, 0.05556],
+ 952: [0, 0.69444, 0.02778, 0.08334],
+ 953: [0, 0.43056, 0, 0.05556],
+ 954: [0, 0.43056, 0, 0],
+ 955: [0, 0.69444, 0, 0],
+ 956: [0.19444, 0.43056, 0, 0.02778],
+ 957: [0, 0.43056, 0.06366, 0.02778],
+ 958: [0.19444, 0.69444, 0.04601, 0.11111],
+ 959: [0, 0.43056, 0, 0.05556],
+ 960: [0, 0.43056, 0.03588, 0],
+ 961: [0.19444, 0.43056, 0, 0.08334],
+ 962: [0.09722, 0.43056, 0.07986, 0.08334],
+ 963: [0, 0.43056, 0.03588, 0],
+ 964: [0, 0.43056, 0.1132, 0.02778],
+ 965: [0, 0.43056, 0.03588, 0.02778],
+ 966: [0.19444, 0.43056, 0, 0.08334],
+ 967: [0.19444, 0.43056, 0, 0.05556],
+ 968: [0.19444, 0.69444, 0.03588, 0.11111],
+ 969: [0, 0.43056, 0.03588, 0],
+ 977: [0, 0.69444, 0, 0.08334],
+ 981: [0.19444, 0.69444, 0, 0.08334],
+ 982: [0, 0.43056, 0.02778, 0],
+ 1009: [0.19444, 0.43056, 0, 0.08334],
+ 1013: [0, 0.43056, 0, 0.05556],
+ },
+ "Math-Regular": {
+ 65: [0, 0.68333, 0, 0.13889],
+ 66: [0, 0.68333, 0.05017, 0.08334],
+ 67: [0, 0.68333, 0.07153, 0.08334],
+ 68: [0, 0.68333, 0.02778, 0.05556],
+ 69: [0, 0.68333, 0.05764, 0.08334],
+ 70: [0, 0.68333, 0.13889, 0.08334],
+ 71: [0, 0.68333, 0, 0.08334],
+ 72: [0, 0.68333, 0.08125, 0.05556],
+ 73: [0, 0.68333, 0.07847, 0.11111],
+ 74: [0, 0.68333, 0.09618, 0.16667],
+ 75: [0, 0.68333, 0.07153, 0.05556],
+ 76: [0, 0.68333, 0, 0.02778],
+ 77: [0, 0.68333, 0.10903, 0.08334],
+ 78: [0, 0.68333, 0.10903, 0.08334],
+ 79: [0, 0.68333, 0.02778, 0.08334],
+ 80: [0, 0.68333, 0.13889, 0.08334],
+ 81: [0.19444, 0.68333, 0, 0.08334],
+ 82: [0, 0.68333, 0.00773, 0.08334],
+ 83: [0, 0.68333, 0.05764, 0.08334],
+ 84: [0, 0.68333, 0.13889, 0.08334],
+ 85: [0, 0.68333, 0.10903, 0.02778],
+ 86: [0, 0.68333, 0.22222, 0],
+ 87: [0, 0.68333, 0.13889, 0],
+ 88: [0, 0.68333, 0.07847, 0.08334],
+ 89: [0, 0.68333, 0.22222, 0],
+ 90: [0, 0.68333, 0.07153, 0.08334],
+ 97: [0, 0.43056, 0, 0],
+ 98: [0, 0.69444, 0, 0],
+ 99: [0, 0.43056, 0, 0.05556],
+ 100: [0, 0.69444, 0, 0.16667],
+ 101: [0, 0.43056, 0, 0.05556],
+ 102: [0.19444, 0.69444, 0.10764, 0.16667],
+ 103: [0.19444, 0.43056, 0.03588, 0.02778],
+ 104: [0, 0.69444, 0, 0],
+ 105: [0, 0.65952, 0, 0],
+ 106: [0.19444, 0.65952, 0.05724, 0],
+ 107: [0, 0.69444, 0.03148, 0],
+ 108: [0, 0.69444, 0.01968, 0.08334],
+ 109: [0, 0.43056, 0, 0],
+ 110: [0, 0.43056, 0, 0],
+ 111: [0, 0.43056, 0, 0.05556],
+ 112: [0.19444, 0.43056, 0, 0.08334],
+ 113: [0.19444, 0.43056, 0.03588, 0.08334],
+ 114: [0, 0.43056, 0.02778, 0.05556],
+ 115: [0, 0.43056, 0, 0.05556],
+ 116: [0, 0.61508, 0, 0.08334],
+ 117: [0, 0.43056, 0, 0.02778],
+ 118: [0, 0.43056, 0.03588, 0.02778],
+ 119: [0, 0.43056, 0.02691, 0.08334],
+ 120: [0, 0.43056, 0, 0.02778],
+ 121: [0.19444, 0.43056, 0.03588, 0.05556],
+ 122: [0, 0.43056, 0.04398, 0.05556],
+ 915: [0, 0.68333, 0.13889, 0.08334],
+ 916: [0, 0.68333, 0, 0.16667],
+ 920: [0, 0.68333, 0.02778, 0.08334],
+ 923: [0, 0.68333, 0, 0.16667],
+ 926: [0, 0.68333, 0.07569, 0.08334],
+ 928: [0, 0.68333, 0.08125, 0.05556],
+ 931: [0, 0.68333, 0.05764, 0.08334],
+ 933: [0, 0.68333, 0.13889, 0.05556],
+ 934: [0, 0.68333, 0, 0.08334],
+ 936: [0, 0.68333, 0.11, 0.05556],
+ 937: [0, 0.68333, 0.05017, 0.08334],
+ 945: [0, 0.43056, 0.0037, 0.02778],
+ 946: [0.19444, 0.69444, 0.05278, 0.08334],
+ 947: [0.19444, 0.43056, 0.05556, 0],
+ 948: [0, 0.69444, 0.03785, 0.05556],
+ 949: [0, 0.43056, 0, 0.08334],
+ 950: [0.19444, 0.69444, 0.07378, 0.08334],
+ 951: [0.19444, 0.43056, 0.03588, 0.05556],
+ 952: [0, 0.69444, 0.02778, 0.08334],
+ 953: [0, 0.43056, 0, 0.05556],
+ 954: [0, 0.43056, 0, 0],
+ 955: [0, 0.69444, 0, 0],
+ 956: [0.19444, 0.43056, 0, 0.02778],
+ 957: [0, 0.43056, 0.06366, 0.02778],
+ 958: [0.19444, 0.69444, 0.04601, 0.11111],
+ 959: [0, 0.43056, 0, 0.05556],
+ 960: [0, 0.43056, 0.03588, 0],
+ 961: [0.19444, 0.43056, 0, 0.08334],
+ 962: [0.09722, 0.43056, 0.07986, 0.08334],
+ 963: [0, 0.43056, 0.03588, 0],
+ 964: [0, 0.43056, 0.1132, 0.02778],
+ 965: [0, 0.43056, 0.03588, 0.02778],
+ 966: [0.19444, 0.43056, 0, 0.08334],
+ 967: [0.19444, 0.43056, 0, 0.05556],
+ 968: [0.19444, 0.69444, 0.03588, 0.11111],
+ 969: [0, 0.43056, 0.03588, 0],
+ 977: [0, 0.69444, 0, 0.08334],
+ 981: [0.19444, 0.69444, 0, 0.08334],
+ 982: [0, 0.43056, 0.02778, 0],
+ 1009: [0.19444, 0.43056, 0, 0.08334],
+ 1013: [0, 0.43056, 0, 0.05556],
+ },
+ "SansSerif-Regular": {
+ 33: [0, 0.69444, 0, 0],
+ 34: [0, 0.69444, 0, 0],
+ 35: [0.19444, 0.69444, 0, 0],
+ 36: [0.05556, 0.75, 0, 0],
+ 37: [0.05556, 0.75, 0, 0],
+ 38: [0, 0.69444, 0, 0],
+ 39: [0, 0.69444, 0, 0],
+ 40: [0.25, 0.75, 0, 0],
+ 41: [0.25, 0.75, 0, 0],
+ 42: [0, 0.75, 0, 0],
+ 43: [0.08333, 0.58333, 0, 0],
+ 44: [0.125, 0.08333, 0, 0],
+ 45: [0, 0.44444, 0, 0],
+ 46: [0, 0.08333, 0, 0],
+ 47: [0.25, 0.75, 0, 0],
+ 48: [0, 0.65556, 0, 0],
+ 49: [0, 0.65556, 0, 0],
+ 50: [0, 0.65556, 0, 0],
+ 51: [0, 0.65556, 0, 0],
+ 52: [0, 0.65556, 0, 0],
+ 53: [0, 0.65556, 0, 0],
+ 54: [0, 0.65556, 0, 0],
+ 55: [0, 0.65556, 0, 0],
+ 56: [0, 0.65556, 0, 0],
+ 57: [0, 0.65556, 0, 0],
+ 58: [0, 0.44444, 0, 0],
+ 59: [0.125, 0.44444, 0, 0],
+ 61: [-0.13, 0.37, 0, 0],
+ 63: [0, 0.69444, 0, 0],
+ 64: [0, 0.69444, 0, 0],
+ 65: [0, 0.69444, 0, 0],
+ 66: [0, 0.69444, 0, 0],
+ 67: [0, 0.69444, 0, 0],
+ 68: [0, 0.69444, 0, 0],
+ 69: [0, 0.69444, 0, 0],
+ 70: [0, 0.69444, 0, 0],
+ 71: [0, 0.69444, 0, 0],
+ 72: [0, 0.69444, 0, 0],
+ 73: [0, 0.69444, 0, 0],
+ 74: [0, 0.69444, 0, 0],
+ 75: [0, 0.69444, 0, 0],
+ 76: [0, 0.69444, 0, 0],
+ 77: [0, 0.69444, 0, 0],
+ 78: [0, 0.69444, 0, 0],
+ 79: [0, 0.69444, 0, 0],
+ 80: [0, 0.69444, 0, 0],
+ 81: [0.125, 0.69444, 0, 0],
+ 82: [0, 0.69444, 0, 0],
+ 83: [0, 0.69444, 0, 0],
+ 84: [0, 0.69444, 0, 0],
+ 85: [0, 0.69444, 0, 0],
+ 86: [0, 0.69444, 0.01389, 0],
+ 87: [0, 0.69444, 0.01389, 0],
+ 88: [0, 0.69444, 0, 0],
+ 89: [0, 0.69444, 0.025, 0],
+ 90: [0, 0.69444, 0, 0],
+ 91: [0.25, 0.75, 0, 0],
+ 93: [0.25, 0.75, 0, 0],
+ 94: [0, 0.69444, 0, 0],
+ 95: [0.35, 0.09444, 0.02778, 0],
+ 97: [0, 0.44444, 0, 0],
+ 98: [0, 0.69444, 0, 0],
+ 99: [0, 0.44444, 0, 0],
+ 100: [0, 0.69444, 0, 0],
+ 101: [0, 0.44444, 0, 0],
+ 102: [0, 0.69444, 0.06944, 0],
+ 103: [0.19444, 0.44444, 0.01389, 0],
+ 104: [0, 0.69444, 0, 0],
+ 105: [0, 0.67937, 0, 0],
+ 106: [0.19444, 0.67937, 0, 0],
+ 107: [0, 0.69444, 0, 0],
+ 108: [0, 0.69444, 0, 0],
+ 109: [0, 0.44444, 0, 0],
+ 110: [0, 0.44444, 0, 0],
+ 111: [0, 0.44444, 0, 0],
+ 112: [0.19444, 0.44444, 0, 0],
+ 113: [0.19444, 0.44444, 0, 0],
+ 114: [0, 0.44444, 0.01389, 0],
+ 115: [0, 0.44444, 0, 0],
+ 116: [0, 0.57143, 0, 0],
+ 117: [0, 0.44444, 0, 0],
+ 118: [0, 0.44444, 0.01389, 0],
+ 119: [0, 0.44444, 0.01389, 0],
+ 120: [0, 0.44444, 0, 0],
+ 121: [0.19444, 0.44444, 0.01389, 0],
+ 122: [0, 0.44444, 0, 0],
+ 126: [0.35, 0.32659, 0, 0],
+ 305: [0, 0.44444, 0, 0],
+ 567: [0.19444, 0.44444, 0, 0],
+ 768: [0, 0.69444, 0, 0],
+ 769: [0, 0.69444, 0, 0],
+ 770: [0, 0.69444, 0, 0],
+ 771: [0, 0.67659, 0, 0],
+ 772: [0, 0.60889, 0, 0],
+ 774: [0, 0.69444, 0, 0],
+ 775: [0, 0.67937, 0, 0],
+ 776: [0, 0.67937, 0, 0],
+ 778: [0, 0.69444, 0, 0],
+ 779: [0, 0.69444, 0, 0],
+ 780: [0, 0.63194, 0, 0],
+ 915: [0, 0.69444, 0, 0],
+ 916: [0, 0.69444, 0, 0],
+ 920: [0, 0.69444, 0, 0],
+ 923: [0, 0.69444, 0, 0],
+ 926: [0, 0.69444, 0, 0],
+ 928: [0, 0.69444, 0, 0],
+ 931: [0, 0.69444, 0, 0],
+ 933: [0, 0.69444, 0, 0],
+ 934: [0, 0.69444, 0, 0],
+ 936: [0, 0.69444, 0, 0],
+ 937: [0, 0.69444, 0, 0],
+ 8211: [0, 0.44444, 0.02778, 0],
+ 8212: [0, 0.44444, 0.02778, 0],
+ 8216: [0, 0.69444, 0, 0],
+ 8217: [0, 0.69444, 0, 0],
+ 8220: [0, 0.69444, 0, 0],
+ 8221: [0, 0.69444, 0, 0],
+ },
+ "Script-Regular": {
+ 65: [0, 0.7, 0.22925, 0],
+ 66: [0, 0.7, 0.04087, 0],
+ 67: [0, 0.7, 0.1689, 0],
+ 68: [0, 0.7, 0.09371, 0],
+ 69: [0, 0.7, 0.18583, 0],
+ 70: [0, 0.7, 0.13634, 0],
+ 71: [0, 0.7, 0.17322, 0],
+ 72: [0, 0.7, 0.29694, 0],
+ 73: [0, 0.7, 0.19189, 0],
+ 74: [0.27778, 0.7, 0.19189, 0],
+ 75: [0, 0.7, 0.31259, 0],
+ 76: [0, 0.7, 0.19189, 0],
+ 77: [0, 0.7, 0.15981, 0],
+ 78: [0, 0.7, 0.3525, 0],
+ 79: [0, 0.7, 0.08078, 0],
+ 80: [0, 0.7, 0.08078, 0],
+ 81: [0, 0.7, 0.03305, 0],
+ 82: [0, 0.7, 0.06259, 0],
+ 83: [0, 0.7, 0.19189, 0],
+ 84: [0, 0.7, 0.29087, 0],
+ 85: [0, 0.7, 0.25815, 0],
+ 86: [0, 0.7, 0.27523, 0],
+ 87: [0, 0.7, 0.27523, 0],
+ 88: [0, 0.7, 0.26006, 0],
+ 89: [0, 0.7, 0.2939, 0],
+ 90: [0, 0.7, 0.24037, 0],
+ },
+ "Size1-Regular": {
+ 40: [0.35001, 0.85, 0, 0],
+ 41: [0.35001, 0.85, 0, 0],
+ 47: [0.35001, 0.85, 0, 0],
+ 91: [0.35001, 0.85, 0, 0],
+ 92: [0.35001, 0.85, 0, 0],
+ 93: [0.35001, 0.85, 0, 0],
+ 123: [0.35001, 0.85, 0, 0],
+ 125: [0.35001, 0.85, 0, 0],
+ 710: [0, 0.72222, 0, 0],
+ 732: [0, 0.72222, 0, 0],
+ 770: [0, 0.72222, 0, 0],
+ 771: [0, 0.72222, 0, 0],
+ 8214: [-0.00099, 0.601, 0, 0],
+ 8593: [1e-5, 0.6, 0, 0],
+ 8595: [1e-5, 0.6, 0, 0],
+ 8657: [1e-5, 0.6, 0, 0],
+ 8659: [1e-5, 0.6, 0, 0],
+ 8719: [0.25001, 0.75, 0, 0],
+ 8720: [0.25001, 0.75, 0, 0],
+ 8721: [0.25001, 0.75, 0, 0],
+ 8730: [0.35001, 0.85, 0, 0],
+ 8739: [-0.00599, 0.606, 0, 0],
+ 8741: [-0.00599, 0.606, 0, 0],
+ 8747: [0.30612, 0.805, 0.19445, 0],
+ 8748: [0.306, 0.805, 0.19445, 0],
+ 8749: [0.306, 0.805, 0.19445, 0],
+ 8750: [0.30612, 0.805, 0.19445, 0],
+ 8896: [0.25001, 0.75, 0, 0],
+ 8897: [0.25001, 0.75, 0, 0],
+ 8898: [0.25001, 0.75, 0, 0],
+ 8899: [0.25001, 0.75, 0, 0],
+ 8968: [0.35001, 0.85, 0, 0],
+ 8969: [0.35001, 0.85, 0, 0],
+ 8970: [0.35001, 0.85, 0, 0],
+ 8971: [0.35001, 0.85, 0, 0],
+ 9168: [-0.00099, 0.601, 0, 0],
+ 10216: [0.35001, 0.85, 0, 0],
+ 10217: [0.35001, 0.85, 0, 0],
+ 10752: [0.25001, 0.75, 0, 0],
+ 10753: [0.25001, 0.75, 0, 0],
+ 10754: [0.25001, 0.75, 0, 0],
+ 10756: [0.25001, 0.75, 0, 0],
+ 10758: [0.25001, 0.75, 0, 0],
+ },
+ "Size2-Regular": {
+ 40: [0.65002, 1.15, 0, 0],
+ 41: [0.65002, 1.15, 0, 0],
+ 47: [0.65002, 1.15, 0, 0],
+ 91: [0.65002, 1.15, 0, 0],
+ 92: [0.65002, 1.15, 0, 0],
+ 93: [0.65002, 1.15, 0, 0],
+ 123: [0.65002, 1.15, 0, 0],
+ 125: [0.65002, 1.15, 0, 0],
+ 710: [0, 0.75, 0, 0],
+ 732: [0, 0.75, 0, 0],
+ 770: [0, 0.75, 0, 0],
+ 771: [0, 0.75, 0, 0],
+ 8719: [0.55001, 1.05, 0, 0],
+ 8720: [0.55001, 1.05, 0, 0],
+ 8721: [0.55001, 1.05, 0, 0],
+ 8730: [0.65002, 1.15, 0, 0],
+ 8747: [0.86225, 1.36, 0.44445, 0],
+ 8748: [0.862, 1.36, 0.44445, 0],
+ 8749: [0.862, 1.36, 0.44445, 0],
+ 8750: [0.86225, 1.36, 0.44445, 0],
+ 8896: [0.55001, 1.05, 0, 0],
+ 8897: [0.55001, 1.05, 0, 0],
+ 8898: [0.55001, 1.05, 0, 0],
+ 8899: [0.55001, 1.05, 0, 0],
+ 8968: [0.65002, 1.15, 0, 0],
+ 8969: [0.65002, 1.15, 0, 0],
+ 8970: [0.65002, 1.15, 0, 0],
+ 8971: [0.65002, 1.15, 0, 0],
+ 10216: [0.65002, 1.15, 0, 0],
+ 10217: [0.65002, 1.15, 0, 0],
+ 10752: [0.55001, 1.05, 0, 0],
+ 10753: [0.55001, 1.05, 0, 0],
+ 10754: [0.55001, 1.05, 0, 0],
+ 10756: [0.55001, 1.05, 0, 0],
+ 10758: [0.55001, 1.05, 0, 0],
+ },
+ "Size3-Regular": {
+ 40: [0.95003, 1.45, 0, 0],
+ 41: [0.95003, 1.45, 0, 0],
+ 47: [0.95003, 1.45, 0, 0],
+ 91: [0.95003, 1.45, 0, 0],
+ 92: [0.95003, 1.45, 0, 0],
+ 93: [0.95003, 1.45, 0, 0],
+ 123: [0.95003, 1.45, 0, 0],
+ 125: [0.95003, 1.45, 0, 0],
+ 710: [0, 0.75, 0, 0],
+ 732: [0, 0.75, 0, 0],
+ 770: [0, 0.75, 0, 0],
+ 771: [0, 0.75, 0, 0],
+ 8730: [0.95003, 1.45, 0, 0],
+ 8968: [0.95003, 1.45, 0, 0],
+ 8969: [0.95003, 1.45, 0, 0],
+ 8970: [0.95003, 1.45, 0, 0],
+ 8971: [0.95003, 1.45, 0, 0],
+ 10216: [0.95003, 1.45, 0, 0],
+ 10217: [0.95003, 1.45, 0, 0],
+ },
+ "Size4-Regular": {
+ 40: [1.25003, 1.75, 0, 0],
+ 41: [1.25003, 1.75, 0, 0],
+ 47: [1.25003, 1.75, 0, 0],
+ 91: [1.25003, 1.75, 0, 0],
+ 92: [1.25003, 1.75, 0, 0],
+ 93: [1.25003, 1.75, 0, 0],
+ 123: [1.25003, 1.75, 0, 0],
+ 125: [1.25003, 1.75, 0, 0],
+ 710: [0, 0.825, 0, 0],
+ 732: [0, 0.825, 0, 0],
+ 770: [0, 0.825, 0, 0],
+ 771: [0, 0.825, 0, 0],
+ 8730: [1.25003, 1.75, 0, 0],
+ 8968: [1.25003, 1.75, 0, 0],
+ 8969: [1.25003, 1.75, 0, 0],
+ 8970: [1.25003, 1.75, 0, 0],
+ 8971: [1.25003, 1.75, 0, 0],
+ 9115: [0.64502, 1.155, 0, 0],
+ 9116: [1e-5, 0.6, 0, 0],
+ 9117: [0.64502, 1.155, 0, 0],
+ 9118: [0.64502, 1.155, 0, 0],
+ 9119: [1e-5, 0.6, 0, 0],
+ 9120: [0.64502, 1.155, 0, 0],
+ 9121: [0.64502, 1.155, 0, 0],
+ 9122: [-0.00099, 0.601, 0, 0],
+ 9123: [0.64502, 1.155, 0, 0],
+ 9124: [0.64502, 1.155, 0, 0],
+ 9125: [-0.00099, 0.601, 0, 0],
+ 9126: [0.64502, 1.155, 0, 0],
+ 9127: [1e-5, 0.9, 0, 0],
+ 9128: [0.65002, 1.15, 0, 0],
+ 9129: [0.90001, 0, 0, 0],
+ 9130: [0, 0.3, 0, 0],
+ 9131: [1e-5, 0.9, 0, 0],
+ 9132: [0.65002, 1.15, 0, 0],
+ 9133: [0.90001, 0, 0, 0],
+ 9143: [0.88502, 0.915, 0, 0],
+ 10216: [1.25003, 1.75, 0, 0],
+ 10217: [1.25003, 1.75, 0, 0],
+ 57344: [-0.00499, 0.605, 0, 0],
+ 57345: [-0.00499, 0.605, 0, 0],
+ 57680: [0, 0.12, 0, 0],
+ 57681: [0, 0.12, 0, 0],
+ 57682: [0, 0.12, 0, 0],
+ 57683: [0, 0.12, 0, 0],
+ },
+ "Typewriter-Regular": {
+ 33: [0, 0.61111, 0, 0],
+ 34: [0, 0.61111, 0, 0],
+ 35: [0, 0.61111, 0, 0],
+ 36: [0.08333, 0.69444, 0, 0],
+ 37: [0.08333, 0.69444, 0, 0],
+ 38: [0, 0.61111, 0, 0],
+ 39: [0, 0.61111, 0, 0],
+ 40: [0.08333, 0.69444, 0, 0],
+ 41: [0.08333, 0.69444, 0, 0],
+ 42: [0, 0.52083, 0, 0],
+ 43: [-0.08056, 0.53055, 0, 0],
+ 44: [0.13889, 0.125, 0, 0],
+ 45: [-0.08056, 0.53055, 0, 0],
+ 46: [0, 0.125, 0, 0],
+ 47: [0.08333, 0.69444, 0, 0],
+ 48: [0, 0.61111, 0, 0],
+ 49: [0, 0.61111, 0, 0],
+ 50: [0, 0.61111, 0, 0],
+ 51: [0, 0.61111, 0, 0],
+ 52: [0, 0.61111, 0, 0],
+ 53: [0, 0.61111, 0, 0],
+ 54: [0, 0.61111, 0, 0],
+ 55: [0, 0.61111, 0, 0],
+ 56: [0, 0.61111, 0, 0],
+ 57: [0, 0.61111, 0, 0],
+ 58: [0, 0.43056, 0, 0],
+ 59: [0.13889, 0.43056, 0, 0],
+ 60: [-0.05556, 0.55556, 0, 0],
+ 61: [-0.19549, 0.41562, 0, 0],
+ 62: [-0.05556, 0.55556, 0, 0],
+ 63: [0, 0.61111, 0, 0],
+ 64: [0, 0.61111, 0, 0],
+ 65: [0, 0.61111, 0, 0],
+ 66: [0, 0.61111, 0, 0],
+ 67: [0, 0.61111, 0, 0],
+ 68: [0, 0.61111, 0, 0],
+ 69: [0, 0.61111, 0, 0],
+ 70: [0, 0.61111, 0, 0],
+ 71: [0, 0.61111, 0, 0],
+ 72: [0, 0.61111, 0, 0],
+ 73: [0, 0.61111, 0, 0],
+ 74: [0, 0.61111, 0, 0],
+ 75: [0, 0.61111, 0, 0],
+ 76: [0, 0.61111, 0, 0],
+ 77: [0, 0.61111, 0, 0],
+ 78: [0, 0.61111, 0, 0],
+ 79: [0, 0.61111, 0, 0],
+ 80: [0, 0.61111, 0, 0],
+ 81: [0.13889, 0.61111, 0, 0],
+ 82: [0, 0.61111, 0, 0],
+ 83: [0, 0.61111, 0, 0],
+ 84: [0, 0.61111, 0, 0],
+ 85: [0, 0.61111, 0, 0],
+ 86: [0, 0.61111, 0, 0],
+ 87: [0, 0.61111, 0, 0],
+ 88: [0, 0.61111, 0, 0],
+ 89: [0, 0.61111, 0, 0],
+ 90: [0, 0.61111, 0, 0],
+ 91: [0.08333, 0.69444, 0, 0],
+ 92: [0.08333, 0.69444, 0, 0],
+ 93: [0.08333, 0.69444, 0, 0],
+ 94: [0, 0.61111, 0, 0],
+ 95: [0.09514, 0, 0, 0],
+ 96: [0, 0.61111, 0, 0],
+ 97: [0, 0.43056, 0, 0],
+ 98: [0, 0.61111, 0, 0],
+ 99: [0, 0.43056, 0, 0],
+ 100: [0, 0.61111, 0, 0],
+ 101: [0, 0.43056, 0, 0],
+ 102: [0, 0.61111, 0, 0],
+ 103: [0.22222, 0.43056, 0, 0],
+ 104: [0, 0.61111, 0, 0],
+ 105: [0, 0.61111, 0, 0],
+ 106: [0.22222, 0.61111, 0, 0],
+ 107: [0, 0.61111, 0, 0],
+ 108: [0, 0.61111, 0, 0],
+ 109: [0, 0.43056, 0, 0],
+ 110: [0, 0.43056, 0, 0],
+ 111: [0, 0.43056, 0, 0],
+ 112: [0.22222, 0.43056, 0, 0],
+ 113: [0.22222, 0.43056, 0, 0],
+ 114: [0, 0.43056, 0, 0],
+ 115: [0, 0.43056, 0, 0],
+ 116: [0, 0.55358, 0, 0],
+ 117: [0, 0.43056, 0, 0],
+ 118: [0, 0.43056, 0, 0],
+ 119: [0, 0.43056, 0, 0],
+ 120: [0, 0.43056, 0, 0],
+ 121: [0.22222, 0.43056, 0, 0],
+ 122: [0, 0.43056, 0, 0],
+ 123: [0.08333, 0.69444, 0, 0],
+ 124: [0.08333, 0.69444, 0, 0],
+ 125: [0.08333, 0.69444, 0, 0],
+ 126: [0, 0.61111, 0, 0],
+ 127: [0, 0.61111, 0, 0],
+ 305: [0, 0.43056, 0, 0],
+ 567: [0.22222, 0.43056, 0, 0],
+ 768: [0, 0.61111, 0, 0],
+ 769: [0, 0.61111, 0, 0],
+ 770: [0, 0.61111, 0, 0],
+ 771: [0, 0.61111, 0, 0],
+ 772: [0, 0.56555, 0, 0],
+ 774: [0, 0.61111, 0, 0],
+ 776: [0, 0.61111, 0, 0],
+ 778: [0, 0.61111, 0, 0],
+ 780: [0, 0.56597, 0, 0],
+ 915: [0, 0.61111, 0, 0],
+ 916: [0, 0.61111, 0, 0],
+ 920: [0, 0.61111, 0, 0],
+ 923: [0, 0.61111, 0, 0],
+ 926: [0, 0.61111, 0, 0],
+ 928: [0, 0.61111, 0, 0],
+ 931: [0, 0.61111, 0, 0],
+ 933: [0, 0.61111, 0, 0],
+ 934: [0, 0.61111, 0, 0],
+ 936: [0, 0.61111, 0, 0],
+ 937: [0, 0.61111, 0, 0],
+ 2018: [0, 0.61111, 0, 0],
+ 2019: [0, 0.61111, 0, 0],
+ 8242: [0, 0.61111, 0, 0],
+ },
+ };
+ },
+ {},
+ ],
+ 43: [
+ function (require, module, exports) {
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ var _ParseNode = require("./ParseNode");
+
+ var _ParseNode2 = _interopRequireDefault(_ParseNode);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /* This file contains a list of functions that we parse, identified by
+ * the calls to defineFunction.
+ *
+ * The first argument to defineFunction is a single name or a list of names.
+ * All functions named in such a list will share a single implementation.
+ *
+ * Each declared function can have associated properties, which
+ * include the following:
+ *
+ * - numArgs: The number of arguments the function takes.
+ * If this is the only property, it can be passed as a number
+ * instead of an element of a properties object.
+ * - argTypes: (optional) An array corresponding to each argument of the
+ * function, giving the type of argument that should be parsed. Its
+ * length should be equal to `numArgs + numOptionalArgs`. Valid
+ * types:
+ * - "size": A size-like thing, such as "1em" or "5ex"
+ * - "color": An html color, like "#abc" or "blue"
+ * - "original": The same type as the environment that the
+ * function being parsed is in (e.g. used for the
+ * bodies of functions like \textcolor where the
+ * first argument is special and the second
+ * argument is parsed normally)
+ * Other possible types (probably shouldn't be used)
+ * - "text": Text-like (e.g. \text)
+ * - "math": Normal math
+ * If undefined, this will be treated as an appropriate length
+ * array of "original" strings
+ * - greediness: (optional) The greediness of the function to use ungrouped
+ * arguments.
+ *
+ * E.g. if you have an expression
+ * \sqrt \frac 1 2
+ * since \frac has greediness=2 vs \sqrt's greediness=1, \frac
+ * will use the two arguments '1' and '2' as its two arguments,
+ * then that whole function will be used as the argument to
+ * \sqrt. On the other hand, the expressions
+ * \frac \frac 1 2 3
+ * and
+ * \frac \sqrt 1 2
+ * will fail because \frac and \frac have equal greediness
+ * and \sqrt has a lower greediness than \frac respectively. To
+ * make these parse, we would have to change them to:
+ * \frac {\frac 1 2} 3
+ * and
+ * \frac {\sqrt 1} 2
+ *
+ * The default value is `1`
+ * - allowedInText: (optional) Whether or not the function is allowed inside
+ * text mode (default false)
+ * - numOptionalArgs: (optional) The number of optional arguments the function
+ * should parse. If the optional arguments aren't found,
+ * `null` will be passed to the handler in their place.
+ * (default 0)
+ * - infix: (optional) Must be true if the function is an infix operator.
+ *
+ * The last argument is that implementation, the handler for the function(s).
+ * It is called to handle these functions and their arguments.
+ * It receives two arguments:
+ * - context contains information and references provided by the parser
+ * - args is an array of arguments obtained from TeX input
+ * The context contains the following properties:
+ * - funcName: the text (i.e. name) of the function, including \
+ * - parser: the parser object
+ * - lexer: the lexer object
+ * - positions: the positions in the overall string of the function
+ * and the arguments.
+ * The latter three should only be used to produce error messages.
+ *
+ * The function should return an object with the following keys:
+ * - type: The type of element that this is. This is then used in
+ * buildHTML/buildMathML to determine which function
+ * should be called to build this node into a DOM node
+ * Any other data can be added to the object, which will be passed
+ * in to the function in buildHTML/buildMathML as `group.value`.
+ */
+
+ function defineFunction(names, props, handler) {
+ if (typeof names === "string") {
+ names = [names];
+ }
+ if (typeof props === "number") {
+ props = { numArgs: props };
+ }
+ // Set default values of functions
+ var data = {
+ numArgs: props.numArgs,
+ argTypes: props.argTypes,
+ greediness: props.greediness === undefined ? 1 : props.greediness,
+ allowedInText: !!props.allowedInText,
+ allowedInMath: props.allowedInMath,
+ numOptionalArgs: props.numOptionalArgs || 0,
+ infix: !!props.infix,
+ handler: handler,
+ };
+ for (var i = 0; i < names.length; ++i) {
+ module.exports[names[i]] = data;
+ }
+ }
+
+ // Since the corresponding buildHTML/buildMathML function expects a
+ // list of elements, we normalize for different kinds of arguments
+ var ordargument = function ordargument(arg) {
+ if (arg.type === "ordgroup") {
+ return arg.value;
+ } else {
+ return [arg];
+ }
+ };
+
+ // A normal square root
+ defineFunction(
+ "\\sqrt",
+ {
+ numArgs: 1,
+ numOptionalArgs: 1,
+ },
+ function (context, args) {
+ var index = args[0];
+ var body = args[1];
+ return {
+ type: "sqrt",
+ body: body,
+ index: index,
+ };
+ }
+ );
+
+ // Non-mathy text, possibly in a font
+ var textFunctionStyles = {
+ "\\text": undefined,
+ "\\textrm": "mathrm",
+ "\\textsf": "mathsf",
+ "\\texttt": "mathtt",
+ "\\textnormal": "mathrm",
+ "\\textbf": "mathbf",
+ "\\textit": "textit",
+ };
+
+ defineFunction(
+ ["\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", "\\textbf", "\\textit"],
+ {
+ numArgs: 1,
+ argTypes: ["text"],
+ greediness: 2,
+ allowedInText: true,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "text",
+ body: ordargument(body),
+ style: textFunctionStyles[context.funcName],
+ };
+ }
+ );
+
+ // A two-argument custom color
+ defineFunction(
+ "\\textcolor",
+ {
+ numArgs: 2,
+ allowedInText: true,
+ greediness: 3,
+ argTypes: ["color", "original"],
+ },
+ function (context, args) {
+ var color = args[0];
+ var body = args[1];
+ return {
+ type: "color",
+ color: color.value,
+ value: ordargument(body),
+ };
+ }
+ );
+
+ // \color is handled in Parser.js's parseImplicitGroup
+ defineFunction(
+ "\\color",
+ {
+ numArgs: 1,
+ allowedInText: true,
+ greediness: 3,
+ argTypes: ["color"],
+ },
+ null
+ );
+
+ // An overline
+ defineFunction(
+ "\\overline",
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "overline",
+ body: body,
+ };
+ }
+ );
+
+ // An underline
+ defineFunction(
+ "\\underline",
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "underline",
+ body: body,
+ };
+ }
+ );
+
+ // A box of the width and height
+ defineFunction(
+ "\\rule",
+ {
+ numArgs: 2,
+ numOptionalArgs: 1,
+ argTypes: ["size", "size", "size"],
+ },
+ function (context, args) {
+ var shift = args[0];
+ var width = args[1];
+ var height = args[2];
+ return {
+ type: "rule",
+ shift: shift && shift.value,
+ width: width.value,
+ height: height.value,
+ };
+ }
+ );
+
+ // TODO: In TeX, \mkern only accepts mu-units, and \kern does not accept
+ // mu-units. In current KaTeX we relax this; both commands accept any unit.
+ defineFunction(
+ ["\\kern", "\\mkern"],
+ {
+ numArgs: 1,
+ argTypes: ["size"],
+ },
+ function (context, args) {
+ return {
+ type: "kern",
+ dimension: args[0].value,
+ };
+ }
+ );
+
+ // A KaTeX logo
+ defineFunction(
+ "\\KaTeX",
+ {
+ numArgs: 0,
+ },
+ function (context) {
+ return {
+ type: "katex",
+ };
+ }
+ );
+
+ defineFunction(
+ "\\phantom",
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "phantom",
+ value: ordargument(body),
+ };
+ }
+ );
+
+ // Math class commands except \mathop
+ defineFunction(
+ ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "mclass",
+ mclass: "m" + context.funcName.substr(5),
+ value: ordargument(body),
+ };
+ }
+ );
+
+ // Build a relation by placing one symbol on top of another
+ defineFunction(
+ "\\stackrel",
+ {
+ numArgs: 2,
+ },
+ function (context, args) {
+ var top = args[0];
+ var bottom = args[1];
+
+ var bottomop = new _ParseNode2.default(
+ "op",
+ {
+ type: "op",
+ limits: true,
+ alwaysHandleSupSub: true,
+ symbol: false,
+ value: ordargument(bottom),
+ },
+ bottom.mode
+ );
+
+ var supsub = new _ParseNode2.default(
+ "supsub",
+ {
+ base: bottomop,
+ sup: top,
+ sub: null,
+ },
+ top.mode
+ );
+
+ return {
+ type: "mclass",
+ mclass: "mrel",
+ value: [supsub],
+ };
+ }
+ );
+
+ // \mod-type functions
+ defineFunction(
+ "\\bmod",
+ {
+ numArgs: 0,
+ },
+ function (context, args) {
+ return {
+ type: "mod",
+ modType: "bmod",
+ value: null,
+ };
+ }
+ );
+
+ defineFunction(
+ ["\\pod", "\\pmod", "\\mod"],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "mod",
+ modType: context.funcName.substr(1),
+ value: ordargument(body),
+ };
+ }
+ );
+
+ // Extra data needed for the delimiter handler down below
+ var delimiterSizes = {
+ "\\bigl": { mclass: "mopen", size: 1 },
+ "\\Bigl": { mclass: "mopen", size: 2 },
+ "\\biggl": { mclass: "mopen", size: 3 },
+ "\\Biggl": { mclass: "mopen", size: 4 },
+ "\\bigr": { mclass: "mclose", size: 1 },
+ "\\Bigr": { mclass: "mclose", size: 2 },
+ "\\biggr": { mclass: "mclose", size: 3 },
+ "\\Biggr": { mclass: "mclose", size: 4 },
+ "\\bigm": { mclass: "mrel", size: 1 },
+ "\\Bigm": { mclass: "mrel", size: 2 },
+ "\\biggm": { mclass: "mrel", size: 3 },
+ "\\Biggm": { mclass: "mrel", size: 4 },
+ "\\big": { mclass: "mord", size: 1 },
+ "\\Big": { mclass: "mord", size: 2 },
+ "\\bigg": { mclass: "mord", size: 3 },
+ "\\Bigg": { mclass: "mord", size: 4 },
+ };
+
+ var delimiters = [
+ "(",
+ ")",
+ "[",
+ "\\lbrack",
+ "]",
+ "\\rbrack",
+ "\\{",
+ "\\lbrace",
+ "\\}",
+ "\\rbrace",
+ "\\lfloor",
+ "\\rfloor",
+ "\\lceil",
+ "\\rceil",
+ "<",
+ ">",
+ "\\langle",
+ "\\rangle",
+ "\\lt",
+ "\\gt",
+ "\\lvert",
+ "\\rvert",
+ "\\lVert",
+ "\\rVert",
+ "\\lgroup",
+ "\\rgroup",
+ "\\lmoustache",
+ "\\rmoustache",
+ "/",
+ "\\backslash",
+ "|",
+ "\\vert",
+ "\\|",
+ "\\Vert",
+ "\\uparrow",
+ "\\Uparrow",
+ "\\downarrow",
+ "\\Downarrow",
+ "\\updownarrow",
+ "\\Updownarrow",
+ ".",
+ ];
+
+ var fontAliases = {
+ "\\Bbb": "\\mathbb",
+ "\\bold": "\\mathbf",
+ "\\frak": "\\mathfrak",
+ };
+
+ // Single-argument color functions
+ defineFunction(
+ [
+ "\\blue",
+ "\\orange",
+ "\\pink",
+ "\\red",
+ "\\green",
+ "\\gray",
+ "\\purple",
+ "\\blueA",
+ "\\blueB",
+ "\\blueC",
+ "\\blueD",
+ "\\blueE",
+ "\\tealA",
+ "\\tealB",
+ "\\tealC",
+ "\\tealD",
+ "\\tealE",
+ "\\greenA",
+ "\\greenB",
+ "\\greenC",
+ "\\greenD",
+ "\\greenE",
+ "\\goldA",
+ "\\goldB",
+ "\\goldC",
+ "\\goldD",
+ "\\goldE",
+ "\\redA",
+ "\\redB",
+ "\\redC",
+ "\\redD",
+ "\\redE",
+ "\\maroonA",
+ "\\maroonB",
+ "\\maroonC",
+ "\\maroonD",
+ "\\maroonE",
+ "\\purpleA",
+ "\\purpleB",
+ "\\purpleC",
+ "\\purpleD",
+ "\\purpleE",
+ "\\mintA",
+ "\\mintB",
+ "\\mintC",
+ "\\grayA",
+ "\\grayB",
+ "\\grayC",
+ "\\grayD",
+ "\\grayE",
+ "\\grayF",
+ "\\grayG",
+ "\\grayH",
+ "\\grayI",
+ "\\kaBlue",
+ "\\kaGreen",
+ ],
+ {
+ numArgs: 1,
+ allowedInText: true,
+ greediness: 3,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "color",
+ color: "katex-" + context.funcName.slice(1),
+ value: ordargument(body),
+ };
+ }
+ );
+
+ // There are 2 flags for operators; whether they produce limits in
+ // displaystyle, and whether they are symbols and should grow in
+ // displaystyle. These four groups cover the four possible choices.
+
+ // No limits, not symbols
+ defineFunction(
+ [
+ "\\arcsin",
+ "\\arccos",
+ "\\arctan",
+ "\\arctg",
+ "\\arcctg",
+ "\\arg",
+ "\\ch",
+ "\\cos",
+ "\\cosec",
+ "\\cosh",
+ "\\cot",
+ "\\cotg",
+ "\\coth",
+ "\\csc",
+ "\\ctg",
+ "\\cth",
+ "\\deg",
+ "\\dim",
+ "\\exp",
+ "\\hom",
+ "\\ker",
+ "\\lg",
+ "\\ln",
+ "\\log",
+ "\\sec",
+ "\\sin",
+ "\\sinh",
+ "\\sh",
+ "\\tan",
+ "\\tanh",
+ "\\tg",
+ "\\th",
+ ],
+ {
+ numArgs: 0,
+ },
+ function (context) {
+ return {
+ type: "op",
+ limits: false,
+ symbol: false,
+ body: context.funcName,
+ };
+ }
+ );
+
+ // Limits, not symbols
+ defineFunction(
+ ["\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max", "\\min", "\\Pr", "\\sup"],
+ {
+ numArgs: 0,
+ },
+ function (context) {
+ return {
+ type: "op",
+ limits: true,
+ symbol: false,
+ body: context.funcName,
+ };
+ }
+ );
+
+ // No limits, symbols
+ defineFunction(
+ ["\\int", "\\iint", "\\iiint", "\\oint"],
+ {
+ numArgs: 0,
+ },
+ function (context) {
+ return {
+ type: "op",
+ limits: false,
+ symbol: true,
+ body: context.funcName,
+ };
+ }
+ );
+
+ // Limits, symbols
+ defineFunction(
+ [
+ "\\coprod",
+ "\\bigvee",
+ "\\bigwedge",
+ "\\biguplus",
+ "\\bigcap",
+ "\\bigcup",
+ "\\intop",
+ "\\prod",
+ "\\sum",
+ "\\bigotimes",
+ "\\bigoplus",
+ "\\bigodot",
+ "\\bigsqcup",
+ "\\smallint",
+ ],
+ {
+ numArgs: 0,
+ },
+ function (context) {
+ return {
+ type: "op",
+ limits: true,
+ symbol: true,
+ body: context.funcName,
+ };
+ }
+ );
+
+ // \mathop class command
+ defineFunction(
+ "\\mathop",
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "op",
+ limits: false,
+ symbol: false,
+ value: ordargument(body),
+ };
+ }
+ );
+
+ // Fractions
+ defineFunction(
+ ["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac"],
+ {
+ numArgs: 2,
+ greediness: 2,
+ },
+ function (context, args) {
+ var numer = args[0];
+ var denom = args[1];
+ var hasBarLine = void 0;
+ var leftDelim = null;
+ var rightDelim = null;
+ var size = "auto";
+
+ switch (context.funcName) {
+ case "\\dfrac":
+ case "\\frac":
+ case "\\tfrac":
+ hasBarLine = true;
+ break;
+ case "\\\\atopfrac":
+ hasBarLine = false;
+ break;
+ case "\\dbinom":
+ case "\\binom":
+ case "\\tbinom":
+ hasBarLine = false;
+ leftDelim = "(";
+ rightDelim = ")";
+ break;
+ default:
+ throw new Error("Unrecognized genfrac command");
+ }
+
+ switch (context.funcName) {
+ case "\\dfrac":
+ case "\\dbinom":
+ size = "display";
+ break;
+ case "\\tfrac":
+ case "\\tbinom":
+ size = "text";
+ break;
+ }
+
+ return {
+ type: "genfrac",
+ numer: numer,
+ denom: denom,
+ hasBarLine: hasBarLine,
+ leftDelim: leftDelim,
+ rightDelim: rightDelim,
+ size: size,
+ };
+ }
+ );
+
+ // Left and right overlap functions
+ defineFunction(
+ ["\\llap", "\\rlap"],
+ {
+ numArgs: 1,
+ allowedInText: true,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: context.funcName.slice(1),
+ body: body,
+ };
+ }
+ );
+
+ // Delimiter functions
+ var checkDelimiter = function checkDelimiter(delim, context) {
+ if (_utils2.default.contains(delimiters, delim.value)) {
+ return delim;
+ } else {
+ throw new _ParseError2.default("Invalid delimiter: '" + delim.value + "' after '" + context.funcName + "'", delim);
+ }
+ };
+
+ defineFunction(
+ [
+ "\\bigl",
+ "\\Bigl",
+ "\\biggl",
+ "\\Biggl",
+ "\\bigr",
+ "\\Bigr",
+ "\\biggr",
+ "\\Biggr",
+ "\\bigm",
+ "\\Bigm",
+ "\\biggm",
+ "\\Biggm",
+ "\\big",
+ "\\Big",
+ "\\bigg",
+ "\\Bigg",
+ ],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var delim = checkDelimiter(args[0], context);
+
+ return {
+ type: "delimsizing",
+ size: delimiterSizes[context.funcName].size,
+ mclass: delimiterSizes[context.funcName].mclass,
+ value: delim.value,
+ };
+ }
+ );
+
+ defineFunction(
+ ["\\left", "\\right"],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var delim = checkDelimiter(args[0], context);
+
+ // \left and \right are caught somewhere in Parser.js, which is
+ // why this data doesn't match what is in buildHTML.
+ return {
+ type: "leftright",
+ value: delim.value,
+ };
+ }
+ );
+
+ defineFunction(
+ "\\middle",
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var delim = checkDelimiter(args[0], context);
+ if (!context.parser.leftrightDepth) {
+ throw new _ParseError2.default("\\middle without preceding \\left", delim);
+ }
+
+ return {
+ type: "middle",
+ value: delim.value,
+ };
+ }
+ );
+
+ // Sizing functions (handled in Parser.js explicitly, hence no handler)
+ defineFunction(
+ ["\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"],
+ 0,
+ null
+ );
+
+ // Style changing functions (handled in Parser.js explicitly, hence no
+ // handler)
+ defineFunction(["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], 0, null);
+
+ // Old font changing functions
+ defineFunction(["\\rm", "\\sf", "\\tt", "\\bf", "\\it"], 0, null);
+
+ defineFunction(
+ [
+ // styles
+ "\\mathrm",
+ "\\mathit",
+ "\\mathbf",
+
+ // families
+ "\\mathbb",
+ "\\mathcal",
+ "\\mathfrak",
+ "\\mathscr",
+ "\\mathsf",
+ "\\mathtt",
+
+ // aliases
+ "\\Bbb",
+ "\\bold",
+ "\\frak",
+ ],
+ {
+ numArgs: 1,
+ greediness: 2,
+ },
+ function (context, args) {
+ var body = args[0];
+ var func = context.funcName;
+ if (func in fontAliases) {
+ func = fontAliases[func];
+ }
+ return {
+ type: "font",
+ font: func.slice(1),
+ body: body,
+ };
+ }
+ );
+
+ // Accents
+ defineFunction(
+ [
+ "\\acute",
+ "\\grave",
+ "\\ddot",
+ "\\tilde",
+ "\\bar",
+ "\\breve",
+ "\\check",
+ "\\hat",
+ "\\vec",
+ "\\dot",
+ "\\widehat",
+ "\\widetilde",
+ "\\overrightarrow",
+ "\\overleftarrow",
+ "\\Overrightarrow",
+ "\\overleftrightarrow",
+ "\\overgroup",
+ "\\overlinesegment",
+ "\\overleftharpoon",
+ "\\overrightharpoon",
+ ],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var base = args[0];
+
+ var isStretchy = !_utils2.default.contains(
+ ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot"],
+ context.funcName
+ );
+
+ var isShifty = !isStretchy || _utils2.default.contains(["\\widehat", "\\widetilde"], context.funcName);
+
+ return {
+ type: "accent",
+ label: context.funcName,
+ isStretchy: isStretchy,
+ isShifty: isShifty,
+ value: ordargument(base),
+ base: base,
+ };
+ }
+ );
+
+ // Text-mode accents
+ defineFunction(
+ ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v"],
+ {
+ numArgs: 1,
+ allowedInText: true,
+ allowedInMath: false,
+ },
+ function (context, args) {
+ var base = args[0];
+
+ return {
+ type: "accent",
+ label: context.funcName,
+ isStretchy: false,
+ isShifty: true,
+ value: ordargument(base),
+ base: base,
+ };
+ }
+ );
+
+ // Horizontal stretchy braces
+ defineFunction(
+ ["\\overbrace", "\\underbrace"],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var base = args[0];
+ return {
+ type: "horizBrace",
+ label: context.funcName,
+ isOver: /^\\over/.test(context.funcName),
+ base: base,
+ };
+ }
+ );
+
+ // Stretchy accents under the body
+ defineFunction(
+ ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\undertilde"],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "accentUnder",
+ label: context.funcName,
+ value: ordargument(body),
+ body: body,
+ };
+ }
+ );
+
+ // Stretchy arrows with an optional argument
+ defineFunction(
+ [
+ "\\xleftarrow",
+ "\\xrightarrow",
+ "\\xLeftarrow",
+ "\\xRightarrow",
+ "\\xleftrightarrow",
+ "\\xLeftrightarrow",
+ "\\xhookleftarrow",
+ "\\xhookrightarrow",
+ "\\xmapsto",
+ "\\xrightharpoondown",
+ "\\xrightharpoonup",
+ "\\xleftharpoondown",
+ "\\xleftharpoonup",
+ "\\xrightleftharpoons",
+ "\\xleftrightharpoons",
+ "\\xLongequal",
+ "\\xtwoheadrightarrow",
+ "\\xtwoheadleftarrow",
+ "\\xLongequal",
+ "\\xtofrom",
+ ],
+ {
+ numArgs: 1,
+ numOptionalArgs: 1,
+ },
+ function (context, args) {
+ var below = args[0];
+ var body = args[1];
+ return {
+ type: "xArrow", // x for extensible
+ label: context.funcName,
+ body: body,
+ below: below,
+ };
+ }
+ );
+
+ // enclose
+ defineFunction(
+ ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\fbox"],
+ {
+ numArgs: 1,
+ },
+ function (context, args) {
+ var body = args[0];
+ return {
+ type: "enclose",
+ label: context.funcName,
+ body: body,
+ };
+ }
+ );
+
+ // Infix generalized fractions
+ defineFunction(
+ ["\\over", "\\choose", "\\atop"],
+ {
+ numArgs: 0,
+ infix: true,
+ },
+ function (context) {
+ var replaceWith = void 0;
+ switch (context.funcName) {
+ case "\\over":
+ replaceWith = "\\frac";
+ break;
+ case "\\choose":
+ replaceWith = "\\binom";
+ break;
+ case "\\atop":
+ replaceWith = "\\\\atopfrac";
+ break;
+ default:
+ throw new Error("Unrecognized infix genfrac command");
+ }
+ return {
+ type: "infix",
+ replaceWith: replaceWith,
+ token: context.token,
+ };
+ }
+ );
+
+ // Row breaks for aligned data
+ defineFunction(
+ ["\\\\", "\\cr"],
+ {
+ numArgs: 0,
+ numOptionalArgs: 1,
+ argTypes: ["size"],
+ },
+ function (context, args) {
+ var size = args[0];
+ return {
+ type: "cr",
+ size: size,
+ };
+ }
+ );
+
+ // Environment delimiters
+ defineFunction(
+ ["\\begin", "\\end"],
+ {
+ numArgs: 1,
+ argTypes: ["text"],
+ },
+ function (context, args) {
+ var nameGroup = args[0];
+ if (nameGroup.type !== "ordgroup") {
+ throw new _ParseError2.default("Invalid environment name", nameGroup);
+ }
+ var name = "";
+ for (var i = 0; i < nameGroup.value.length; ++i) {
+ name += nameGroup.value[i].value;
+ }
+ return {
+ type: "environment",
+ name: name,
+ nameGroup: nameGroup,
+ };
+ }
+ );
+ },
+ {
+ "./ParseError": 29,
+ "./ParseNode": 30,
+ "./utils": 51,
+ },
+ ],
+ 44: [
+ function (require, module, exports) {
+ /**
+ * Predefined macros for KaTeX.
+ * This can be used to define some commands in terms of others.
+ */
+
+ // This function might one day accept additional argument and do more things.
+ function defineMacro(name, body) {
+ module.exports[name] = body;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // basics
+ defineMacro("\\bgroup", "{");
+ defineMacro("\\egroup", "}");
+ defineMacro("\\begingroup", "{");
+ defineMacro("\\endgroup", "}");
+
+ // We don't distinguish between math and nonmath kerns.
+ // (In TeX, the mu unit works only with \mkern.)
+ defineMacro("\\mkern", "\\kern");
+
+ //////////////////////////////////////////////////////////////////////
+ // amsmath.sty
+
+ // \def\overset#1#2{\binrel@{#2}\binrel@@{\mathop{\kern\z@#2}\limits^{#1}}}
+ defineMacro("\\overset", "\\mathop{#2}\\limits^{#1}");
+ defineMacro("\\underset", "\\mathop{#2}\\limits_{#1}");
+
+ // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}}
+ defineMacro("\\boxed", "\\fbox{\\displaystyle{#1}}");
+
+ //TODO: When implementing \dots, should ideally add the \DOTSB indicator
+ // into the macro, to indicate these are binary operators.
+ // \def\iff{\DOTSB\;\Longleftrightarrow\;}
+ // \def\implies{\DOTSB\;\Longrightarrow\;}
+ // \def\impliedby{\DOTSB\;\Longleftarrow\;}
+ defineMacro("\\iff", "\\;\\Longleftrightarrow\\;");
+ defineMacro("\\implies", "\\;\\Longrightarrow\\;");
+ defineMacro("\\impliedby", "\\;\\Longleftarrow\\;");
+
+ //////////////////////////////////////////////////////////////////////
+ // mathtools.sty
+
+ //\providecommand\ordinarycolon{:}
+ defineMacro("\\ordinarycolon", ":");
+ //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}}
+ //TODO(edemaine): Not yet centered. Fix via \raisebox or #726
+ defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}");
+ // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon}
+ defineMacro("\\dblcolon", "\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon");
+ // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=}
+ defineMacro("\\coloneqq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}=");
+ // \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=}
+ defineMacro("\\Coloneqq", "\\dblcolon\\mathrel{\\mkern-1.2mu}=");
+ // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
+ defineMacro("\\coloneq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}");
+ // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
+ defineMacro("\\Coloneq", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}");
+ // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon}
+ defineMacro("\\eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\vcentcolon");
+ // \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon}
+ defineMacro("\\Eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\dblcolon");
+ // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon}
+ defineMacro("\\eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon");
+ // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon}
+ defineMacro("\\Eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon");
+ // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx}
+ defineMacro("\\colonapprox", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx");
+ // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx}
+ defineMacro("\\Colonapprox", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx");
+ // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim}
+ defineMacro("\\colonsim", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim");
+ // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim}
+ defineMacro("\\Colonsim", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim");
+
+ //////////////////////////////////////////////////////////////////////
+ // colonequals.sty
+
+ // Alternate names for mathtools's macros:
+ defineMacro("\\ratio", "\\vcentcolon");
+ defineMacro("\\coloncolon", "\\dblcolon");
+ defineMacro("\\colonequals", "\\coloneqq");
+ defineMacro("\\coloncolonequals", "\\Coloneqq");
+ defineMacro("\\equalscolon", "\\eqqcolon");
+ defineMacro("\\equalscoloncolon", "\\Eqqcolon");
+ defineMacro("\\colonminus", "\\coloneq");
+ defineMacro("\\coloncolonminus", "\\Coloneq");
+ defineMacro("\\minuscolon", "\\eqcolon");
+ defineMacro("\\minuscoloncolon", "\\Eqcolon");
+ // \colonapprox name is same in mathtools and colonequals.
+ defineMacro("\\coloncolonapprox", "\\Colonapprox");
+ // \colonsim name is same in mathtools and colonequals.
+ defineMacro("\\coloncolonsim", "\\Colonsim");
+
+ // Additional macros, implemented by analogy with mathtools definitions:
+ defineMacro("\\simcolon", "\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon");
+ defineMacro("\\simcoloncolon", "\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon");
+ defineMacro("\\approxcolon", "\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon");
+ defineMacro("\\approxcoloncolon", "\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon");
+ },
+ {},
+ ],
+ 45: [
+ function (require, module, exports) {
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
+
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+ var _createClass2 = require("babel-runtime/helpers/createClass");
+
+ var _createClass3 = _interopRequireDefault(_createClass2);
+
+ var _utils = require("./utils");
+
+ var _utils2 = _interopRequireDefault(_utils);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * This node represents a general purpose MathML node of any type. The
+ * constructor requires the type of node to create (for example, `"mo"` or
+ * `"mspace"`, corresponding to `` and `` tags).
+ */
+ var MathNode = (function () {
+ function MathNode(type, children) {
+ (0, _classCallCheck3.default)(this, MathNode);
+
+ this.type = type;
+ this.attributes = {};
+ this.children = children || [];
+ }
+
+ /**
+ * Sets an attribute on a MathML node. MathML depends on attributes to convey a
+ * semantic content, so this is used heavily.
+ */
+
+ (0, _createClass3.default)(MathNode, [
+ {
+ key: "setAttribute",
+ value: function setAttribute(name, value) {
+ this.attributes[name] = value;
+ },
+
+ /**
+ * Converts the math node into a MathML-namespaced DOM element.
+ */
+ },
+ {
+ key: "toNode",
+ value: function toNode() {
+ var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
+
+ for (var attr in this.attributes) {
+ if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+ node.setAttribute(attr, this.attributes[attr]);
+ }
+ }
+
+ for (var i = 0; i < this.children.length; i++) {
+ node.appendChild(this.children[i].toNode());
+ }
+
+ return node;
+ },
+
+ /**
+ * Converts the math node into an HTML markup string.
+ */
+ },
+ {
+ key: "toMarkup",
+ value: function toMarkup() {
+ var markup = "<" + this.type;
+
+ // Add the attributes
+ for (var attr in this.attributes) {
+ if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {
+ markup += " " + attr + '="';
+ markup += _utils2.default.escape(this.attributes[attr]);
+ markup += '"';
+ }
+ }
+
+ markup += ">";
+
+ for (var i = 0; i < this.children.length; i++) {
+ markup += this.children[i].toMarkup();
+ }
+
+ markup += "" + this.type + ">";
+
+ return markup;
+ },
+ },
+ ]);
+ return MathNode;
+ })();
+
+ /**
+ * This node represents a piece of text.
+ */
+ /**
+ * These objects store data about MathML nodes. This is the MathML equivalent
+ * of the types in domTree.js. Since MathML handles its own rendering, and
+ * since we're mainly using MathML to improve accessibility, we don't manage
+ * any of the styling state that the plain DOM nodes do.
+ *
+ * The `toNode` and `toMarkup` functions work simlarly to how they do in
+ * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.
+ */
+
+ var TextNode = (function () {
+ function TextNode(text) {
+ (0, _classCallCheck3.default)(this, TextNode);
+
+ this.text = text;
+ }
+
+ /**
+ * Converts the text node into a DOM text node.
+ */
+
+ (0, _createClass3.default)(TextNode, [
+ {
+ key: "toNode",
+ value: function toNode() {
+ return document.createTextNode(this.text);
+ },
+
+ /**
+ * Converts the text node into HTML markup (which is just the text itself).
+ */
+ },
+ {
+ key: "toMarkup",
+ value: function toMarkup() {
+ return _utils2.default.escape(this.text);
+ },
+ },
+ ]);
+ return TextNode;
+ })();
+
+ module.exports = {
+ MathNode: MathNode,
+ TextNode: TextNode,
+ };
+ },
+ {
+ "./utils": 51,
+ "babel-runtime/helpers/classCallCheck": 4,
+ "babel-runtime/helpers/createClass": 5,
+ },
+ ],
+ 46: [
+ function (require, module, exports) {
+ var _Parser = require("./Parser");
+
+ var _Parser2 = _interopRequireDefault(_Parser);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ /**
+ * Parses an expression using a Parser, then returns the parsed result.
+ */
+ var parseTree = function parseTree(toParse, settings) {
+ if (!(typeof toParse === "string" || toParse instanceof String)) {
+ throw new TypeError("KaTeX can only parse string typed expression");
+ }
+ var parser = new _Parser2.default(toParse, settings);
+
+ return parser.parse();
+ }; /**
+ * Provides a single function for parsing an expression using a Parser
+ * TODO(emily): Remove this
+ */
+
+ module.exports = parseTree;
+ },
+ { "./Parser": 31 },
+ ],
+ 47: [
+ function (require, module, exports) {
+ /**
+ * This file provides support to buildMathML.js and buildHTML.js
+ * for stretchy wide elements rendered from SVG files
+ * and other CSS trickery.
+ */
+
+ var buildCommon = require("./buildCommon");
+ var mathMLTree = require("./mathMLTree");
+ var utils = require("./utils");
+
+ var stretchyCodePoint = {
+ widehat: "^",
+ widetilde: "~",
+ undertilde: "~",
+ overleftarrow: "\u2190",
+ underleftarrow: "\u2190",
+ xleftarrow: "\u2190",
+ overrightarrow: "\u2192",
+ underrightarrow: "\u2192",
+ xrightarrow: "\u2192",
+ underbrace: "\u23B5",
+ overbrace: "\u23DE",
+ overleftrightarrow: "\u2194",
+ underleftrightarrow: "\u2194",
+ xleftrightarrow: "\u2194",
+ Overrightarrow: "\u21D2",
+ xRightarrow: "\u21D2",
+ overleftharpoon: "\u21BC",
+ xleftharpoonup: "\u21BC",
+ overrightharpoon: "\u21C0",
+ xrightharpoonup: "\u21C0",
+ xLeftarrow: "\u21D0",
+ xLeftrightarrow: "\u21D4",
+ xhookleftarrow: "\u21A9",
+ xhookrightarrow: "\u21AA",
+ xmapsto: "\u21A6",
+ xrightharpoondown: "\u21C1",
+ xleftharpoondown: "\u21BD",
+ xrightleftharpoons: "\u21CC",
+ xleftrightharpoons: "\u21CB",
+ xtwoheadleftarrow: "\u219E",
+ xtwoheadrightarrow: "\u21A0",
+ xLongequal: "=",
+ xtofrom: "\u21C4",
+ };
+
+ var mathMLnode = function mathMLnode(label) {
+ var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]);
+ node.setAttribute("stretchy", "true");
+ return node;
+ };
+
+ // In the katexImagesData object just below, the dimensions all
+ // correspond to path geometry inside the relevant SVG.
+ // For example, \rightarrow uses the same arrowhead as glyph U+2192
+ // from the KaTeX Main font. The scaling factor is 1000.
+ // That is, inside the font, that arrowhead is 522 units tall, which
+ // corresponds to 0.522 em inside the document.
+ // And for extensible arrows, we split that distance around the math axis.
+
+ var katexImagesData = {
+ // height, depth, imageName, minWidth
+ overleftarrow: [0.522, 0, "leftarrow", 0.5],
+ underleftarrow: [0.522, 0, "leftarrow", 0.5],
+ xleftarrow: [0.261, 0.261, "leftarrow", 0.783],
+ overrightarrow: [0.522, 0, "rightarrow", 0.5],
+ underrightarrow: [0.522, 0, "rightarrow", 0.5],
+ xrightarrow: [0.261, 0.261, "rightarrow", 0.783],
+ overbrace: [0.548, 0, "overbrace", 1.6],
+ underbrace: [0.548, 0, "underbrace", 1.6],
+ overleftrightarrow: [0.522, 0, "leftrightarrow", 0.5],
+ underleftrightarrow: [0.522, 0, "leftrightarrow", 0.5],
+ xleftrightarrow: [0.261, 0.261, "leftrightarrow", 0.783],
+ Overrightarrow: [0.56, 0, "doublerightarrow", 0.5],
+ xLeftarrow: [0.28, 0.28, "doubleleftarrow", 0.783],
+ xRightarrow: [0.28, 0.28, "doublerightarrow", 0.783],
+ xLeftrightarrow: [0.28, 0.28, "doubleleftrightarrow", 0.955],
+ overleftharpoon: [0.522, 0, "leftharpoon", 0.5],
+ overrightharpoon: [0.522, 0, "rightharpoon", 0.5],
+ xleftharpoonup: [0.261, 0.261, "leftharpoon", 0.783],
+ xrightharpoonup: [0.261, 0.261, "rightharpoon", 0.783],
+ xhookleftarrow: [0.261, 0.261, "hookleftarrow", 0.87],
+ xhookrightarrow: [0.261, 0.261, "hookrightarrow", 0.87],
+ overlinesegment: [0.414, 0, "linesegment", 0.5],
+ underlinesegment: [0.414, 0, "linesegment", 0.5],
+ xmapsto: [0.261, 0.261, "mapsto", 0.783],
+ xrightharpoondown: [0.261, 0.261, "rightharpoondown", 0.783],
+ xleftharpoondown: [0.261, 0.261, "leftharpoondown", 0.783],
+ xrightleftharpoons: [0.358, 0.358, "rightleftharpoons", 0.716],
+ xleftrightharpoons: [0.358, 0.358, "leftrightharpoons", 0.716],
+ overgroup: [0.342, 0, "overgroup", 0.87],
+ undergroup: [0.342, 0, "undergroup", 0.87],
+ xtwoheadleftarrow: [0.167, 0.167, "twoheadleftarrow", 0.86],
+ xtwoheadrightarrow: [0.167, 0.167, "twoheadrightarrow", 0.86],
+ xLongequal: [0.167, 0.167, "longequal", 0.5],
+ xtofrom: [0.264, 0.264, "tofrom", 0.86],
+ };
+
+ // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.
+ // Copyright (c) 2009-2010, Design Science, Inc. ()
+ // Copyright (c) 2014-2017 Khan Academy ()
+ // Licensed under the SIL Open Font License, Version 1.1.
+ // See \nhttp://scripts.sil.org/OFL
+
+ // Nested SVGs
+ // Many of the KaTeX SVG images contain a nested SVG. This is done to
+ // achieve a stretchy image while avoiding distortion of arrowheads or
+ // brace corners.
+
+ // The inner SVG typically contains a very long (400 em) arrow.
+
+ // The outer SVG acts like a window that exposes only part of the inner SVG.
+ // The outer SVG will grow or shrink to match the dimensions set by CSS.
+
+ // The inner SVG always has a longer, thinner aspect ratio than the outer
+ // SVG. After the inner SVG fills 100% of the height of the outer SVG,
+ // there is a long arrow shaft left over. That left-over shaft is not shown.
+ // Instead, it is sliced off because the inner SVG is set to
+ // "preserveAspectRatio='... slice'".
+
+ // Thus, the reader sees an arrow that matches the subject matter width
+ // without distortion.
+
+ // Some functions, such as \cancel, need to vary their aspect ratio. These
+ // functions do not get the nested SVG treatment.
+
+ // Second Brush Stroke
+ // Low resolution monitors struggle to display images in fine detail.
+ // So browsers apply anti-aliasing. A long straight arrow shaft therefore
+ // will sometimes appear as if it has a blurred edge.
+
+ // To mitigate this, these SVG files contain a second "brush-stroke" on the
+ // arrow shafts. That is, a second long thin rectangular SVG path has been
+ // written directly on top of each arrow shaft. This reinforcement causes
+ // some of the screen pixels to display as black instead of the anti-aliased
+ // gray pixel that a single path would generate. So we get arrow shafts
+ // whose edges appear to be sharper.
+
+ var svgPath = {
+ doubleleftarrow:
+ " ",
+
+ doublerightarrow:
+ " ",
+
+ leftarrow:
+ " ",
+
+ rightarrow:
+ " ",
+ };
+
+ var innerSVG = {
+ // Since bcancel's SVG is inline and it omits the viewBox attribute,
+ // it's stroke-width will not vary with span area.
+ bcancel: " ",
+
+ cancel: " ",
+
+ // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
+ doubleleftarrow: ">" + svgPath["doubleleftarrow"] + " ",
+
+ // doubleleftrightarrow is from glyph U+21D4 in font KaTeX Main
+ doubleleftrightarrow:
+ ">" +
+ svgPath["doubleleftarrow"] +
+ " \n" +
+ svgPath["doublerightarrow"] +
+ " ",
+
+ // doublerightarrow is from glyph U+21D2 in font KaTeX Main
+ doublerightarrow: ">" + svgPath["doublerightarrow"] + " ",
+
+ // hookleftarrow is from glyph U+21A9 in font KaTeX Main
+ hookleftarrow:
+ ">" +
+ svgPath["leftarrow"] +
+ " \n ",
+
+ // hookrightarrow is from glyph U+21AA in font KaTeX Main
+ hookrightarrow:
+ ">" +
+ svgPath["rightarrow"] +
+ " ",
+
+ // leftarrow is from glyph U+2190 in font KaTeX Main
+ leftarrow: ">" + svgPath["leftarrow"] + " ",
+
+ // leftharpoon is from glyph U+21BD in font KaTeX Main
+ leftharpoon:
+ "> ",
+
+ // leftharpoondown is from glyph U+21BD in font KaTeX Main
+ leftharpoondown:
+ "> ",
+
+ // leftrightarrow is from glyph U+2194 in font KaTeX Main
+ leftrightarrow:
+ ">" +
+ svgPath["leftarrow"] +
+ " \n" +
+ svgPath["rightarrow"] +
+ " ",
+
+ // leftrightharpoons is from glyphs U+21BC/21B1 in font KaTeX Main
+ leftrightharpoons:
+ "> \n ",
+
+ linesegment:
+ ">\n ",
+
+ longequal: " viewBox='0 0 100 334' preserveAspectRatio='none'>\n ",
+
+ // mapsto is from glyph U+21A6 in font KaTeX Main
+ mapsto:
+ ">" +
+ svgPath["rightarrow"] +
+ " ",
+
+ // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
+ overbrace:
+ "> \n ",
+
+ // overgroup is from the MnSymbol package (public domain)
+ overgroup:
+ "> ",
+
+ // rightarrow is from glyph U+2192 in font KaTeX Main
+ rightarrow: ">" + svgPath["rightarrow"] + " ",
+
+ // rightharpoon is from glyph U+21C0 in font KaTeX Main
+ rightharpoon:
+ "> ",
+
+ // rightharpoondown is from glyph U+21C1 in font KaTeX Main
+ rightharpoondown:
+ "> ",
+
+ // rightleftharpoons is from glyph U+21CC in font KaTeX Main
+ rightleftharpoons:
+ "> ",
+
+ // tilde1 is a modified version of a glyph from the MnSymbol package
+ tilde1:
+ " viewBox='0 0 600 260' preserveAspectRatio='none'>\n ",
+
+ // Ditto tilde2, tilde3, and tilde 4
+ tilde2:
+ " viewBox='0 0 1033 286' preserveAspectRatio='none'>\n ",
+
+ tilde3:
+ " viewBox='0 0 2339 306' preserveAspectRatio='none'>\n ",
+
+ tilde4:
+ " viewBox='0 0 2340 312' preserveAspectRatio='none'>\n ",
+
+ // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
+ tofrom:
+ "> ",
+
+ // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
+ twoheadleftarrow:
+ "> \n ",
+
+ // twoheadrightarrow is from glyph U+21A0 in font KaTeX AMS Regular
+ twoheadrightarrow:
+ "> \n ",
+
+ // underbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
+ underbrace:
+ "> \n ",
+
+ // undergroup is from the MnSymbol package (public domain)
+ undergroup:
+ "> ",
+
+ // widehat1 is a modified version of a glyph from the MnSymbol package
+ widehat1:
+ " viewBox='0 0 1062 239' preserveAspectRatio='none'>\n ",
+
+ // Ditto widehat2, widehat3, and widehat4
+ widehat2:
+ " viewBox='0 0 2364 300' preserveAspectRatio='none'>\n ",
+
+ widehat3:
+ " viewBox='0 0 2364 360' preserveAspectRatio='none'>\n ",
+
+ widehat4:
+ " viewBox='0 0 2364 420' preserveAspectRatio='none'>\n ",
+
+ xcancel:
+ " \n ",
+ };
+
+ var svgSpan = function svgSpan(group, options) {
+ // Create a span with inline SVG for the element.
+ var label = group.value.label.substr(1);
+ var height = 0;
+ var depth = 0;
+ var imageName = "";
+ var minWidth = 0;
+
+ if (utils.contains(["widehat", "widetilde", "undertilde"], label)) {
+ // There are four SVG images available for each function.
+ // Choose a taller image when there are more characters.
+ var numChars = group.value.value.length;
+ if (numChars > 5) {
+ height = 0.312;
+ imageName = (label === "widehat" ? "widehat" : "tilde") + "4";
+ } else {
+ var imgIndex = [1, 1, 2, 2, 3, 3][numChars];
+ if (label === "widehat") {
+ height = [0, 0.24, 0.3, 0.3, 0.36, 0.36][numChars];
+ imageName = "widehat" + imgIndex;
+ } else {
+ height = [0, 0.26, 0.3, 0.3, 0.34, 0.34][numChars];
+ imageName = "tilde" + imgIndex;
+ }
+ }
+ } else {
+ var imgData = katexImagesData[label];
+ height = imgData[0];
+ depth = imgData[1];
+ imageName = imgData[2];
+ minWidth = imgData[3];
+ }
+
+ var span = buildCommon.makeSpan([], [], options);
+ span.height = height;
+ span.depth = depth;
+ var totalHeight = height + depth;
+ span.style.height = totalHeight + "em";
+ if (minWidth > 0) {
+ span.style.minWidth = minWidth + "em";
+ }
+
+ span.innerHTML = "";
+
+ return span;
+ };
+
+ var encloseSpan = function encloseSpan(inner, label, pad, options) {
+ // Return an image span for \cancel, \bcancel, \xcancel, or \fbox
+ var img = void 0;
+ var totalHeight = inner.height + inner.depth + 2 * pad;
+
+ if (label === "fbox") {
+ img = buildCommon.makeSpan(["stretchy", label], [], options);
+ if (options.color) {
+ img.style.borderColor = options.getColor();
+ }
+ } else {
+ img = buildCommon.makeSpan([], [], options);
+ img.innerHTML = "" + innerSVG[label] + " ";
+ }
+
+ img.height = totalHeight;
+ img.style.height = totalHeight + "em";
+
+ return img;
+ };
+
+ module.exports = {
+ encloseSpan: encloseSpan,
+ mathMLnode: mathMLnode,
+ svgSpan: svgSpan,
+ };
+ },
+ {
+ "./buildCommon": 34,
+ "./mathMLTree": 45,
+ "./utils": 51,
+ },
+ ],
+ 48: [
+ function (require, module, exports) {
+ /**
+ * This file holds a list of all no-argument functions and single-character
+ * symbols (like 'a' or ';').
+ *
+ * For each of the symbols, there are three properties they can have:
+ * - font (required): the font to be used for this symbol. Either "main" (the
+ normal font), or "ams" (the ams fonts).
+ * - group (required): the ParseNode group type the symbol should have (i.e.
+ "textord", "mathord", etc).
+ See https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types
+ * - replace: the character that this symbol or function should be
+ * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi
+ * character in the main font).
+ *
+ * The outermost map in the table indicates what mode the symbols should be
+ * accepted in (e.g. "math" or "text").
+ */
+
+ module.exports = {
+ math: {},
+ text: {},
+ };
+
+ function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {
+ module.exports[mode][name] = {
+ font: font,
+ group: group,
+ replace: replace,
+ };
+
+ if (acceptUnicodeChar) {
+ module.exports[mode][replace] = module.exports[mode][name];
+ }
+ }
+
+ // Some abbreviations for commonly used strings.
+ // This helps minify the code, and also spotting typos using jshint.
+
+ // modes:
+ var math = "math";
+ var text = "text";
+
+ // fonts:
+ var main = "main";
+ var ams = "ams";
+
+ // groups:
+ var accent = "accent";
+ var bin = "bin";
+ var close = "close";
+ var inner = "inner";
+ var mathord = "mathord";
+ var op = "op";
+ var open = "open";
+ var punct = "punct";
+ var rel = "rel";
+ var spacing = "spacing";
+ var textord = "textord";
+
+ // Now comes the symbol table
+
+ // Relation Symbols
+ defineSymbol(math, main, rel, "\u2261", "\\equiv");
+ defineSymbol(math, main, rel, "\u227A", "\\prec");
+ defineSymbol(math, main, rel, "\u227B", "\\succ");
+ defineSymbol(math, main, rel, "\u223C", "\\sim");
+ defineSymbol(math, main, rel, "\u22A5", "\\perp");
+ defineSymbol(math, main, rel, "\u2AAF", "\\preceq");
+ defineSymbol(math, main, rel, "\u2AB0", "\\succeq");
+ defineSymbol(math, main, rel, "\u2243", "\\simeq");
+ defineSymbol(math, main, rel, "\u2223", "\\mid");
+ defineSymbol(math, main, rel, "\u226A", "\\ll");
+ defineSymbol(math, main, rel, "\u226B", "\\gg");
+ defineSymbol(math, main, rel, "\u224D", "\\asymp");
+ defineSymbol(math, main, rel, "\u2225", "\\parallel");
+ defineSymbol(math, main, rel, "\u22C8", "\\bowtie");
+ defineSymbol(math, main, rel, "\u2323", "\\smile");
+ defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq");
+ defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq");
+ defineSymbol(math, main, rel, "\u2250", "\\doteq");
+ defineSymbol(math, main, rel, "\u2322", "\\frown");
+ defineSymbol(math, main, rel, "\u220B", "\\ni");
+ defineSymbol(math, main, rel, "\u221D", "\\propto");
+ defineSymbol(math, main, rel, "\u22A2", "\\vdash");
+ defineSymbol(math, main, rel, "\u22A3", "\\dashv");
+ defineSymbol(math, main, rel, "\u220B", "\\owns");
+
+ // Punctuation
+ defineSymbol(math, main, punct, ".", "\\ldotp");
+ defineSymbol(math, main, punct, "\u22C5", "\\cdotp");
+
+ // Misc Symbols
+ defineSymbol(math, main, textord, "#", "\\#");
+ defineSymbol(text, main, textord, "#", "\\#");
+ defineSymbol(math, main, textord, "&", "\\&");
+ defineSymbol(text, main, textord, "&", "\\&");
+ defineSymbol(math, main, textord, "\u2135", "\\aleph");
+ defineSymbol(math, main, textord, "\u2200", "\\forall");
+ defineSymbol(math, main, textord, "\u210F", "\\hbar");
+ defineSymbol(math, main, textord, "\u2203", "\\exists");
+ defineSymbol(math, main, textord, "\u2207", "\\nabla");
+ defineSymbol(math, main, textord, "\u266D", "\\flat");
+ defineSymbol(math, main, textord, "\u2113", "\\ell");
+ defineSymbol(math, main, textord, "\u266E", "\\natural");
+ defineSymbol(math, main, textord, "\u2663", "\\clubsuit");
+ defineSymbol(math, main, textord, "\u2118", "\\wp");
+ defineSymbol(math, main, textord, "\u266F", "\\sharp");
+ defineSymbol(math, main, textord, "\u2662", "\\diamondsuit");
+ defineSymbol(math, main, textord, "\u211C", "\\Re");
+ defineSymbol(math, main, textord, "\u2661", "\\heartsuit");
+ defineSymbol(math, main, textord, "\u2111", "\\Im");
+ defineSymbol(math, main, textord, "\u2660", "\\spadesuit");
+
+ // Math and Text
+ defineSymbol(math, main, textord, "\u2020", "\\dag");
+ defineSymbol(text, main, textord, "\u2020", "\\dag");
+ defineSymbol(text, main, textord, "\u2020", "\\textdagger");
+ defineSymbol(math, main, textord, "\u2021", "\\ddag");
+ defineSymbol(text, main, textord, "\u2021", "\\ddag");
+ defineSymbol(text, main, textord, "\u2020", "\\textdaggerdbl");
+
+ // Large Delimiters
+ defineSymbol(math, main, close, "\u23B1", "\\rmoustache");
+ defineSymbol(math, main, open, "\u23B0", "\\lmoustache");
+ defineSymbol(math, main, close, "\u27EF", "\\rgroup");
+ defineSymbol(math, main, open, "\u27EE", "\\lgroup");
+
+ // Binary Operators
+ defineSymbol(math, main, bin, "\u2213", "\\mp");
+ defineSymbol(math, main, bin, "\u2296", "\\ominus");
+ defineSymbol(math, main, bin, "\u228E", "\\uplus");
+ defineSymbol(math, main, bin, "\u2293", "\\sqcap");
+ defineSymbol(math, main, bin, "\u2217", "\\ast");
+ defineSymbol(math, main, bin, "\u2294", "\\sqcup");
+ defineSymbol(math, main, bin, "\u25EF", "\\bigcirc");
+ defineSymbol(math, main, bin, "\u2219", "\\bullet");
+ defineSymbol(math, main, bin, "\u2021", "\\ddagger");
+ defineSymbol(math, main, bin, "\u2240", "\\wr");
+ defineSymbol(math, main, bin, "\u2A3F", "\\amalg");
+
+ // Arrow Symbols
+ defineSymbol(math, main, rel, "\u27F5", "\\longleftarrow");
+ defineSymbol(math, main, rel, "\u21D0", "\\Leftarrow");
+ defineSymbol(math, main, rel, "\u27F8", "\\Longleftarrow");
+ defineSymbol(math, main, rel, "\u27F6", "\\longrightarrow");
+ defineSymbol(math, main, rel, "\u21D2", "\\Rightarrow");
+ defineSymbol(math, main, rel, "\u27F9", "\\Longrightarrow");
+ defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow");
+ defineSymbol(math, main, rel, "\u27F7", "\\longleftrightarrow");
+ defineSymbol(math, main, rel, "\u21D4", "\\Leftrightarrow");
+ defineSymbol(math, main, rel, "\u27FA", "\\Longleftrightarrow");
+ defineSymbol(math, main, rel, "\u21A6", "\\mapsto");
+ defineSymbol(math, main, rel, "\u27FC", "\\longmapsto");
+ defineSymbol(math, main, rel, "\u2197", "\\nearrow");
+ defineSymbol(math, main, rel, "\u21A9", "\\hookleftarrow");
+ defineSymbol(math, main, rel, "\u21AA", "\\hookrightarrow");
+ defineSymbol(math, main, rel, "\u2198", "\\searrow");
+ defineSymbol(math, main, rel, "\u21BC", "\\leftharpoonup");
+ defineSymbol(math, main, rel, "\u21C0", "\\rightharpoonup");
+ defineSymbol(math, main, rel, "\u2199", "\\swarrow");
+ defineSymbol(math, main, rel, "\u21BD", "\\leftharpoondown");
+ defineSymbol(math, main, rel, "\u21C1", "\\rightharpoondown");
+ defineSymbol(math, main, rel, "\u2196", "\\nwarrow");
+ defineSymbol(math, main, rel, "\u21CC", "\\rightleftharpoons");
+
+ // AMS Negated Binary Relations
+ defineSymbol(math, ams, rel, "\u226E", "\\nless");
+ defineSymbol(math, ams, rel, "\uE010", "\\nleqslant");
+ defineSymbol(math, ams, rel, "\uE011", "\\nleqq");
+ defineSymbol(math, ams, rel, "\u2A87", "\\lneq");
+ defineSymbol(math, ams, rel, "\u2268", "\\lneqq");
+ defineSymbol(math, ams, rel, "\uE00C", "\\lvertneqq");
+ defineSymbol(math, ams, rel, "\u22E6", "\\lnsim");
+ defineSymbol(math, ams, rel, "\u2A89", "\\lnapprox");
+ defineSymbol(math, ams, rel, "\u2280", "\\nprec");
+ defineSymbol(math, ams, rel, "\u22E0", "\\npreceq");
+ defineSymbol(math, ams, rel, "\u22E8", "\\precnsim");
+ defineSymbol(math, ams, rel, "\u2AB9", "\\precnapprox");
+ defineSymbol(math, ams, rel, "\u2241", "\\nsim");
+ defineSymbol(math, ams, rel, "\uE006", "\\nshortmid");
+ defineSymbol(math, ams, rel, "\u2224", "\\nmid");
+ defineSymbol(math, ams, rel, "\u22AC", "\\nvdash");
+ defineSymbol(math, ams, rel, "\u22AD", "\\nvDash");
+ defineSymbol(math, ams, rel, "\u22EA", "\\ntriangleleft");
+ defineSymbol(math, ams, rel, "\u22EC", "\\ntrianglelefteq");
+ defineSymbol(math, ams, rel, "\u228A", "\\subsetneq");
+ defineSymbol(math, ams, rel, "\uE01A", "\\varsubsetneq");
+ defineSymbol(math, ams, rel, "\u2ACB", "\\subsetneqq");
+ defineSymbol(math, ams, rel, "\uE017", "\\varsubsetneqq");
+ defineSymbol(math, ams, rel, "\u226F", "\\ngtr");
+ defineSymbol(math, ams, rel, "\uE00F", "\\ngeqslant");
+ defineSymbol(math, ams, rel, "\uE00E", "\\ngeqq");
+ defineSymbol(math, ams, rel, "\u2A88", "\\gneq");
+ defineSymbol(math, ams, rel, "\u2269", "\\gneqq");
+ defineSymbol(math, ams, rel, "\uE00D", "\\gvertneqq");
+ defineSymbol(math, ams, rel, "\u22E7", "\\gnsim");
+ defineSymbol(math, ams, rel, "\u2A8A", "\\gnapprox");
+ defineSymbol(math, ams, rel, "\u2281", "\\nsucc");
+ defineSymbol(math, ams, rel, "\u22E1", "\\nsucceq");
+ defineSymbol(math, ams, rel, "\u22E9", "\\succnsim");
+ defineSymbol(math, ams, rel, "\u2ABA", "\\succnapprox");
+ defineSymbol(math, ams, rel, "\u2246", "\\ncong");
+ defineSymbol(math, ams, rel, "\uE007", "\\nshortparallel");
+ defineSymbol(math, ams, rel, "\u2226", "\\nparallel");
+ defineSymbol(math, ams, rel, "\u22AF", "\\nVDash");
+ defineSymbol(math, ams, rel, "\u22EB", "\\ntriangleright");
+ defineSymbol(math, ams, rel, "\u22ED", "\\ntrianglerighteq");
+ defineSymbol(math, ams, rel, "\uE018", "\\nsupseteqq");
+ defineSymbol(math, ams, rel, "\u228B", "\\supsetneq");
+ defineSymbol(math, ams, rel, "\uE01B", "\\varsupsetneq");
+ defineSymbol(math, ams, rel, "\u2ACC", "\\supsetneqq");
+ defineSymbol(math, ams, rel, "\uE019", "\\varsupsetneqq");
+ defineSymbol(math, ams, rel, "\u22AE", "\\nVdash");
+ defineSymbol(math, ams, rel, "\u2AB5", "\\precneqq");
+ defineSymbol(math, ams, rel, "\u2AB6", "\\succneqq");
+ defineSymbol(math, ams, rel, "\uE016", "\\nsubseteqq");
+ defineSymbol(math, ams, bin, "\u22B4", "\\unlhd");
+ defineSymbol(math, ams, bin, "\u22B5", "\\unrhd");
+
+ // AMS Negated Arrows
+ defineSymbol(math, ams, rel, "\u219A", "\\nleftarrow");
+ defineSymbol(math, ams, rel, "\u219B", "\\nrightarrow");
+ defineSymbol(math, ams, rel, "\u21CD", "\\nLeftarrow");
+ defineSymbol(math, ams, rel, "\u21CF", "\\nRightarrow");
+ defineSymbol(math, ams, rel, "\u21AE", "\\nleftrightarrow");
+ defineSymbol(math, ams, rel, "\u21CE", "\\nLeftrightarrow");
+
+ // AMS Misc
+ defineSymbol(math, ams, rel, "\u25B3", "\\vartriangle");
+ defineSymbol(math, ams, textord, "\u210F", "\\hslash");
+ defineSymbol(math, ams, textord, "\u25BD", "\\triangledown");
+ defineSymbol(math, ams, textord, "\u25CA", "\\lozenge");
+ defineSymbol(math, ams, textord, "\u24C8", "\\circledS");
+ defineSymbol(math, ams, textord, "\xAE", "\\circledR");
+ defineSymbol(text, ams, textord, "\xAE", "\\circledR");
+ defineSymbol(math, ams, textord, "\u2221", "\\measuredangle");
+ defineSymbol(math, ams, textord, "\u2204", "\\nexists");
+ defineSymbol(math, ams, textord, "\u2127", "\\mho");
+ defineSymbol(math, ams, textord, "\u2132", "\\Finv");
+ defineSymbol(math, ams, textord, "\u2141", "\\Game");
+ defineSymbol(math, ams, textord, "k", "\\Bbbk");
+ defineSymbol(math, ams, textord, "\u2035", "\\backprime");
+ defineSymbol(math, ams, textord, "\u25B2", "\\blacktriangle");
+ defineSymbol(math, ams, textord, "\u25BC", "\\blacktriangledown");
+ defineSymbol(math, ams, textord, "\u25A0", "\\blacksquare");
+ defineSymbol(math, ams, textord, "\u29EB", "\\blacklozenge");
+ defineSymbol(math, ams, textord, "\u2605", "\\bigstar");
+ defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle");
+ defineSymbol(math, ams, textord, "\u2201", "\\complement");
+ defineSymbol(math, ams, textord, "\xF0", "\\eth");
+ defineSymbol(math, ams, textord, "\u2571", "\\diagup");
+ defineSymbol(math, ams, textord, "\u2572", "\\diagdown");
+ defineSymbol(math, ams, textord, "\u25A1", "\\square");
+ defineSymbol(math, ams, textord, "\u25A1", "\\Box");
+ defineSymbol(math, ams, textord, "\u25CA", "\\Diamond");
+ defineSymbol(math, ams, textord, "\xA5", "\\yen");
+ defineSymbol(math, ams, textord, "\u2713", "\\checkmark");
+ defineSymbol(text, ams, textord, "\u2713", "\\checkmark");
+
+ // AMS Hebrew
+ defineSymbol(math, ams, textord, "\u2136", "\\beth");
+ defineSymbol(math, ams, textord, "\u2138", "\\daleth");
+ defineSymbol(math, ams, textord, "\u2137", "\\gimel");
+
+ // AMS Greek
+ defineSymbol(math, ams, textord, "\u03DD", "\\digamma");
+ defineSymbol(math, ams, textord, "\u03F0", "\\varkappa");
+
+ // AMS Delimiters
+ defineSymbol(math, ams, open, "\u250C", "\\ulcorner");
+ defineSymbol(math, ams, close, "\u2510", "\\urcorner");
+ defineSymbol(math, ams, open, "\u2514", "\\llcorner");
+ defineSymbol(math, ams, close, "\u2518", "\\lrcorner");
+
+ // AMS Binary Relations
+ defineSymbol(math, ams, rel, "\u2266", "\\leqq");
+ defineSymbol(math, ams, rel, "\u2A7D", "\\leqslant");
+ defineSymbol(math, ams, rel, "\u2A95", "\\eqslantless");
+ defineSymbol(math, ams, rel, "\u2272", "\\lesssim");
+ defineSymbol(math, ams, rel, "\u2A85", "\\lessapprox");
+ defineSymbol(math, ams, rel, "\u224A", "\\approxeq");
+ defineSymbol(math, ams, bin, "\u22D6", "\\lessdot");
+ defineSymbol(math, ams, rel, "\u22D8", "\\lll");
+ defineSymbol(math, ams, rel, "\u2276", "\\lessgtr");
+ defineSymbol(math, ams, rel, "\u22DA", "\\lesseqgtr");
+ defineSymbol(math, ams, rel, "\u2A8B", "\\lesseqqgtr");
+ defineSymbol(math, ams, rel, "\u2251", "\\doteqdot");
+ defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq");
+ defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq");
+ defineSymbol(math, ams, rel, "\u223D", "\\backsim");
+ defineSymbol(math, ams, rel, "\u22CD", "\\backsimeq");
+ defineSymbol(math, ams, rel, "\u2AC5", "\\subseteqq");
+ defineSymbol(math, ams, rel, "\u22D0", "\\Subset");
+ defineSymbol(math, ams, rel, "\u228F", "\\sqsubset");
+ defineSymbol(math, ams, rel, "\u227C", "\\preccurlyeq");
+ defineSymbol(math, ams, rel, "\u22DE", "\\curlyeqprec");
+ defineSymbol(math, ams, rel, "\u227E", "\\precsim");
+ defineSymbol(math, ams, rel, "\u2AB7", "\\precapprox");
+ defineSymbol(math, ams, rel, "\u22B2", "\\vartriangleleft");
+ defineSymbol(math, ams, rel, "\u22B4", "\\trianglelefteq");
+ defineSymbol(math, ams, rel, "\u22A8", "\\vDash");
+ defineSymbol(math, ams, rel, "\u22AA", "\\Vvdash");
+ defineSymbol(math, ams, rel, "\u2323", "\\smallsmile");
+ defineSymbol(math, ams, rel, "\u2322", "\\smallfrown");
+ defineSymbol(math, ams, rel, "\u224F", "\\bumpeq");
+ defineSymbol(math, ams, rel, "\u224E", "\\Bumpeq");
+ defineSymbol(math, ams, rel, "\u2267", "\\geqq");
+ defineSymbol(math, ams, rel, "\u2A7E", "\\geqslant");
+ defineSymbol(math, ams, rel, "\u2A96", "\\eqslantgtr");
+ defineSymbol(math, ams, rel, "\u2273", "\\gtrsim");
+ defineSymbol(math, ams, rel, "\u2A86", "\\gtrapprox");
+ defineSymbol(math, ams, bin, "\u22D7", "\\gtrdot");
+ defineSymbol(math, ams, rel, "\u22D9", "\\ggg");
+ defineSymbol(math, ams, rel, "\u2277", "\\gtrless");
+ defineSymbol(math, ams, rel, "\u22DB", "\\gtreqless");
+ defineSymbol(math, ams, rel, "\u2A8C", "\\gtreqqless");
+ defineSymbol(math, ams, rel, "\u2256", "\\eqcirc");
+ defineSymbol(math, ams, rel, "\u2257", "\\circeq");
+ defineSymbol(math, ams, rel, "\u225C", "\\triangleq");
+ defineSymbol(math, ams, rel, "\u223C", "\\thicksim");
+ defineSymbol(math, ams, rel, "\u2248", "\\thickapprox");
+ defineSymbol(math, ams, rel, "\u2AC6", "\\supseteqq");
+ defineSymbol(math, ams, rel, "\u22D1", "\\Supset");
+ defineSymbol(math, ams, rel, "\u2290", "\\sqsupset");
+ defineSymbol(math, ams, rel, "\u227D", "\\succcurlyeq");
+ defineSymbol(math, ams, rel, "\u22DF", "\\curlyeqsucc");
+ defineSymbol(math, ams, rel, "\u227F", "\\succsim");
+ defineSymbol(math, ams, rel, "\u2AB8", "\\succapprox");
+ defineSymbol(math, ams, rel, "\u22B3", "\\vartriangleright");
+ defineSymbol(math, ams, rel, "\u22B5", "\\trianglerighteq");
+ defineSymbol(math, ams, rel, "\u22A9", "\\Vdash");
+ defineSymbol(math, ams, rel, "\u2223", "\\shortmid");
+ defineSymbol(math, ams, rel, "\u2225", "\\shortparallel");
+ defineSymbol(math, ams, rel, "\u226C", "\\between");
+ defineSymbol(math, ams, rel, "\u22D4", "\\pitchfork");
+ defineSymbol(math, ams, rel, "\u221D", "\\varpropto");
+ defineSymbol(math, ams, rel, "\u25C0", "\\blacktriangleleft");
+ defineSymbol(math, ams, rel, "\u2234", "\\therefore");
+ defineSymbol(math, ams, rel, "\u220D", "\\backepsilon");
+ defineSymbol(math, ams, rel, "\u25B6", "\\blacktriangleright");
+ defineSymbol(math, ams, rel, "\u2235", "\\because");
+ defineSymbol(math, ams, rel, "\u22D8", "\\llless");
+ defineSymbol(math, ams, rel, "\u22D9", "\\gggtr");
+ defineSymbol(math, ams, bin, "\u22B2", "\\lhd");
+ defineSymbol(math, ams, bin, "\u22B3", "\\rhd");
+ defineSymbol(math, ams, rel, "\u2242", "\\eqsim");
+ defineSymbol(math, main, rel, "\u22C8", "\\Join");
+ defineSymbol(math, ams, rel, "\u2251", "\\Doteq");
+
+ // AMS Binary Operators
+ defineSymbol(math, ams, bin, "\u2214", "\\dotplus");
+ defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus");
+ defineSymbol(math, ams, bin, "\u22D2", "\\Cap");
+ defineSymbol(math, ams, bin, "\u22D3", "\\Cup");
+ defineSymbol(math, ams, bin, "\u2A5E", "\\doublebarwedge");
+ defineSymbol(math, ams, bin, "\u229F", "\\boxminus");
+ defineSymbol(math, ams, bin, "\u229E", "\\boxplus");
+ defineSymbol(math, ams, bin, "\u22C7", "\\divideontimes");
+ defineSymbol(math, ams, bin, "\u22C9", "\\ltimes");
+ defineSymbol(math, ams, bin, "\u22CA", "\\rtimes");
+ defineSymbol(math, ams, bin, "\u22CB", "\\leftthreetimes");
+ defineSymbol(math, ams, bin, "\u22CC", "\\rightthreetimes");
+ defineSymbol(math, ams, bin, "\u22CF", "\\curlywedge");
+ defineSymbol(math, ams, bin, "\u22CE", "\\curlyvee");
+ defineSymbol(math, ams, bin, "\u229D", "\\circleddash");
+ defineSymbol(math, ams, bin, "\u229B", "\\circledast");
+ defineSymbol(math, ams, bin, "\u22C5", "\\centerdot");
+ defineSymbol(math, ams, bin, "\u22BA", "\\intercal");
+ defineSymbol(math, ams, bin, "\u22D2", "\\doublecap");
+ defineSymbol(math, ams, bin, "\u22D3", "\\doublecup");
+ defineSymbol(math, ams, bin, "\u22A0", "\\boxtimes");
+
+ // AMS Arrows
+ defineSymbol(math, ams, rel, "\u21E2", "\\dashrightarrow");
+ defineSymbol(math, ams, rel, "\u21E0", "\\dashleftarrow");
+ defineSymbol(math, ams, rel, "\u21C7", "\\leftleftarrows");
+ defineSymbol(math, ams, rel, "\u21C6", "\\leftrightarrows");
+ defineSymbol(math, ams, rel, "\u21DA", "\\Lleftarrow");
+ defineSymbol(math, ams, rel, "\u219E", "\\twoheadleftarrow");
+ defineSymbol(math, ams, rel, "\u21A2", "\\leftarrowtail");
+ defineSymbol(math, ams, rel, "\u21AB", "\\looparrowleft");
+ defineSymbol(math, ams, rel, "\u21CB", "\\leftrightharpoons");
+ defineSymbol(math, ams, rel, "\u21B6", "\\curvearrowleft");
+ defineSymbol(math, ams, rel, "\u21BA", "\\circlearrowleft");
+ defineSymbol(math, ams, rel, "\u21B0", "\\Lsh");
+ defineSymbol(math, ams, rel, "\u21C8", "\\upuparrows");
+ defineSymbol(math, ams, rel, "\u21BF", "\\upharpoonleft");
+ defineSymbol(math, ams, rel, "\u21C3", "\\downharpoonleft");
+ defineSymbol(math, ams, rel, "\u22B8", "\\multimap");
+ defineSymbol(math, ams, rel, "\u21AD", "\\leftrightsquigarrow");
+ defineSymbol(math, ams, rel, "\u21C9", "\\rightrightarrows");
+ defineSymbol(math, ams, rel, "\u21C4", "\\rightleftarrows");
+ defineSymbol(math, ams, rel, "\u21A0", "\\twoheadrightarrow");
+ defineSymbol(math, ams, rel, "\u21A3", "\\rightarrowtail");
+ defineSymbol(math, ams, rel, "\u21AC", "\\looparrowright");
+ defineSymbol(math, ams, rel, "\u21B7", "\\curvearrowright");
+ defineSymbol(math, ams, rel, "\u21BB", "\\circlearrowright");
+ defineSymbol(math, ams, rel, "\u21B1", "\\Rsh");
+ defineSymbol(math, ams, rel, "\u21CA", "\\downdownarrows");
+ defineSymbol(math, ams, rel, "\u21BE", "\\upharpoonright");
+ defineSymbol(math, ams, rel, "\u21C2", "\\downharpoonright");
+ defineSymbol(math, ams, rel, "\u21DD", "\\rightsquigarrow");
+ defineSymbol(math, ams, rel, "\u21DD", "\\leadsto");
+ defineSymbol(math, ams, rel, "\u21DB", "\\Rrightarrow");
+ defineSymbol(math, ams, rel, "\u21BE", "\\restriction");
+
+ defineSymbol(math, main, textord, "\u2018", "`");
+ defineSymbol(math, main, textord, "$", "\\$");
+ defineSymbol(text, main, textord, "$", "\\$");
+ defineSymbol(text, main, textord, "$", "\\textdollar");
+ defineSymbol(math, main, textord, "%", "\\%");
+ defineSymbol(text, main, textord, "%", "\\%");
+ defineSymbol(math, main, textord, "_", "\\_");
+ defineSymbol(text, main, textord, "_", "\\_");
+ defineSymbol(text, main, textord, "_", "\\textunderscore");
+ defineSymbol(math, main, textord, "\u2220", "\\angle");
+ defineSymbol(math, main, textord, "\u221E", "\\infty");
+ defineSymbol(math, main, textord, "\u2032", "\\prime");
+ defineSymbol(math, main, textord, "\u25B3", "\\triangle");
+ defineSymbol(math, main, textord, "\u0393", "\\Gamma", true);
+ defineSymbol(math, main, textord, "\u0394", "\\Delta", true);
+ defineSymbol(math, main, textord, "\u0398", "\\Theta", true);
+ defineSymbol(math, main, textord, "\u039B", "\\Lambda", true);
+ defineSymbol(math, main, textord, "\u039E", "\\Xi", true);
+ defineSymbol(math, main, textord, "\u03A0", "\\Pi", true);
+ defineSymbol(math, main, textord, "\u03A3", "\\Sigma", true);
+ defineSymbol(math, main, textord, "\u03A5", "\\Upsilon", true);
+ defineSymbol(math, main, textord, "\u03A6", "\\Phi", true);
+ defineSymbol(math, main, textord, "\u03A8", "\\Psi", true);
+ defineSymbol(math, main, textord, "\u03A9", "\\Omega", true);
+ defineSymbol(math, main, textord, "\xAC", "\\neg");
+ defineSymbol(math, main, textord, "\xAC", "\\lnot");
+ defineSymbol(math, main, textord, "\u22A4", "\\top");
+ defineSymbol(math, main, textord, "\u22A5", "\\bot");
+ defineSymbol(math, main, textord, "\u2205", "\\emptyset");
+ defineSymbol(math, ams, textord, "\u2205", "\\varnothing");
+ defineSymbol(math, main, mathord, "\u03B1", "\\alpha", true);
+ defineSymbol(math, main, mathord, "\u03B2", "\\beta", true);
+ defineSymbol(math, main, mathord, "\u03B3", "\\gamma", true);
+ defineSymbol(math, main, mathord, "\u03B4", "\\delta", true);
+ defineSymbol(math, main, mathord, "\u03F5", "\\epsilon", true);
+ defineSymbol(math, main, mathord, "\u03B6", "\\zeta", true);
+ defineSymbol(math, main, mathord, "\u03B7", "\\eta", true);
+ defineSymbol(math, main, mathord, "\u03B8", "\\theta", true);
+ defineSymbol(math, main, mathord, "\u03B9", "\\iota", true);
+ defineSymbol(math, main, mathord, "\u03BA", "\\kappa", true);
+ defineSymbol(math, main, mathord, "\u03BB", "\\lambda", true);
+ defineSymbol(math, main, mathord, "\u03BC", "\\mu", true);
+ defineSymbol(math, main, mathord, "\u03BD", "\\nu", true);
+ defineSymbol(math, main, mathord, "\u03BE", "\\xi", true);
+ defineSymbol(math, main, mathord, "\u03BF", "\\omicron", true);
+ defineSymbol(math, main, mathord, "\u03C0", "\\pi", true);
+ defineSymbol(math, main, mathord, "\u03C1", "\\rho", true);
+ defineSymbol(math, main, mathord, "\u03C3", "\\sigma", true);
+ defineSymbol(math, main, mathord, "\u03C4", "\\tau", true);
+ defineSymbol(math, main, mathord, "\u03C5", "\\upsilon", true);
+ defineSymbol(math, main, mathord, "\u03D5", "\\phi", true);
+ defineSymbol(math, main, mathord, "\u03C7", "\\chi", true);
+ defineSymbol(math, main, mathord, "\u03C8", "\\psi", true);
+ defineSymbol(math, main, mathord, "\u03C9", "\\omega", true);
+ defineSymbol(math, main, mathord, "\u03B5", "\\varepsilon", true);
+ defineSymbol(math, main, mathord, "\u03D1", "\\vartheta", true);
+ defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true);
+ defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true);
+ defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true);
+ defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true);
+ defineSymbol(math, main, bin, "\u2217", "*");
+ defineSymbol(math, main, bin, "+", "+");
+ defineSymbol(math, main, bin, "\u2212", "-");
+ defineSymbol(math, main, bin, "\u22C5", "\\cdot");
+ defineSymbol(math, main, bin, "\u2218", "\\circ");
+ defineSymbol(math, main, bin, "\xF7", "\\div");
+ defineSymbol(math, main, bin, "\xB1", "\\pm");
+ defineSymbol(math, main, bin, "\xD7", "\\times");
+ defineSymbol(math, main, bin, "\u2229", "\\cap");
+ defineSymbol(math, main, bin, "\u222A", "\\cup");
+ defineSymbol(math, main, bin, "\u2216", "\\setminus");
+ defineSymbol(math, main, bin, "\u2227", "\\land");
+ defineSymbol(math, main, bin, "\u2228", "\\lor");
+ defineSymbol(math, main, bin, "\u2227", "\\wedge");
+ defineSymbol(math, main, bin, "\u2228", "\\vee");
+ defineSymbol(math, main, textord, "\u221A", "\\surd");
+ defineSymbol(math, main, open, "(", "(");
+ defineSymbol(math, main, open, "[", "[");
+ defineSymbol(math, main, open, "\u27E8", "\\langle");
+ defineSymbol(math, main, open, "\u2223", "\\lvert");
+ defineSymbol(math, main, open, "\u2225", "\\lVert");
+ defineSymbol(math, main, close, ")", ")");
+ defineSymbol(math, main, close, "]", "]");
+ defineSymbol(math, main, close, "?", "?");
+ defineSymbol(math, main, close, "!", "!");
+ defineSymbol(math, main, close, "\u27E9", "\\rangle");
+ defineSymbol(math, main, close, "\u2223", "\\rvert");
+ defineSymbol(math, main, close, "\u2225", "\\rVert");
+ defineSymbol(math, main, rel, "=", "=");
+ defineSymbol(math, main, rel, "<", "<");
+ defineSymbol(math, main, rel, ">", ">");
+ defineSymbol(math, main, rel, ":", ":");
+ defineSymbol(math, main, rel, "\u2248", "\\approx");
+ defineSymbol(math, main, rel, "\u2245", "\\cong");
+ defineSymbol(math, main, rel, "\u2265", "\\ge");
+ defineSymbol(math, main, rel, "\u2265", "\\geq");
+ defineSymbol(math, main, rel, "\u2190", "\\gets");
+ defineSymbol(math, main, rel, ">", "\\gt");
+ defineSymbol(math, main, rel, "\u2208", "\\in");
+ defineSymbol(math, main, rel, "\u2209", "\\notin");
+ defineSymbol(math, main, rel, "\u0338", "\\not");
+ defineSymbol(math, main, rel, "\u2282", "\\subset");
+ defineSymbol(math, main, rel, "\u2283", "\\supset");
+ defineSymbol(math, main, rel, "\u2286", "\\subseteq");
+ defineSymbol(math, main, rel, "\u2287", "\\supseteq");
+ defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq");
+ defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq");
+ defineSymbol(math, main, rel, "\u22A8", "\\models");
+ defineSymbol(math, main, rel, "\u2190", "\\leftarrow");
+ defineSymbol(math, main, rel, "\u2264", "\\le");
+ defineSymbol(math, main, rel, "\u2264", "\\leq");
+ defineSymbol(math, main, rel, "<", "\\lt");
+ defineSymbol(math, main, rel, "\u2260", "\\ne");
+ defineSymbol(math, main, rel, "\u2260", "\\neq");
+ defineSymbol(math, main, rel, "\u2192", "\\rightarrow");
+ defineSymbol(math, main, rel, "\u2192", "\\to");
+ defineSymbol(math, ams, rel, "\u2271", "\\ngeq");
+ defineSymbol(math, ams, rel, "\u2270", "\\nleq");
+ defineSymbol(math, main, spacing, null, "\\!");
+ defineSymbol(math, main, spacing, "\xA0", "\\ ");
+ defineSymbol(math, main, spacing, "\xA0", "~");
+ defineSymbol(math, main, spacing, null, "\\,");
+ defineSymbol(math, main, spacing, null, "\\:");
+ defineSymbol(math, main, spacing, null, "\\;");
+ defineSymbol(math, main, spacing, null, "\\enspace");
+ defineSymbol(math, main, spacing, null, "\\qquad");
+ defineSymbol(math, main, spacing, null, "\\quad");
+ defineSymbol(math, main, spacing, "\xA0", "\\space");
+ defineSymbol(math, main, punct, ",", ",");
+ defineSymbol(math, main, punct, ";", ";");
+ defineSymbol(math, main, punct, ":", "\\colon");
+ defineSymbol(math, ams, bin, "\u22BC", "\\barwedge");
+ defineSymbol(math, ams, bin, "\u22BB", "\\veebar");
+ defineSymbol(math, main, bin, "\u2299", "\\odot");
+ defineSymbol(math, main, bin, "\u2295", "\\oplus");
+ defineSymbol(math, main, bin, "\u2297", "\\otimes");
+ defineSymbol(math, main, textord, "\u2202", "\\partial");
+ defineSymbol(math, main, bin, "\u2298", "\\oslash");
+ defineSymbol(math, ams, bin, "\u229A", "\\circledcirc");
+ defineSymbol(math, ams, bin, "\u22A1", "\\boxdot");
+ defineSymbol(math, main, bin, "\u25B3", "\\bigtriangleup");
+ defineSymbol(math, main, bin, "\u25BD", "\\bigtriangledown");
+ defineSymbol(math, main, bin, "\u2020", "\\dagger");
+ defineSymbol(math, main, bin, "\u22C4", "\\diamond");
+ defineSymbol(math, main, bin, "\u22C6", "\\star");
+ defineSymbol(math, main, bin, "\u25C3", "\\triangleleft");
+ defineSymbol(math, main, bin, "\u25B9", "\\triangleright");
+ defineSymbol(math, main, open, "{", "\\{");
+ defineSymbol(text, main, textord, "{", "\\{");
+ defineSymbol(text, main, textord, "{", "\\textbraceleft");
+ defineSymbol(math, main, close, "}", "\\}");
+ defineSymbol(text, main, textord, "}", "\\}");
+ defineSymbol(text, main, textord, "}", "\\textbraceright");
+ defineSymbol(math, main, open, "{", "\\lbrace");
+ defineSymbol(math, main, close, "}", "\\rbrace");
+ defineSymbol(math, main, open, "[", "\\lbrack");
+ defineSymbol(math, main, close, "]", "\\rbrack");
+ defineSymbol(text, main, textord, "<", "\\textless"); // in T1 fontenc
+ defineSymbol(text, main, textord, ">", "\\textgreater"); // in T1 fontenc
+ defineSymbol(math, main, open, "\u230A", "\\lfloor");
+ defineSymbol(math, main, close, "\u230B", "\\rfloor");
+ defineSymbol(math, main, open, "\u2308", "\\lceil");
+ defineSymbol(math, main, close, "\u2309", "\\rceil");
+ defineSymbol(math, main, textord, "\\", "\\backslash");
+ defineSymbol(math, main, textord, "\u2223", "|");
+ defineSymbol(math, main, textord, "\u2223", "\\vert");
+ defineSymbol(text, main, textord, "|", "\\textbar"); // in T1 fontenc
+ defineSymbol(math, main, textord, "\u2225", "\\|");
+ defineSymbol(math, main, textord, "\u2225", "\\Vert");
+ defineSymbol(text, main, textord, "\u2225", "\\textbardbl");
+ defineSymbol(math, main, rel, "\u2191", "\\uparrow");
+ defineSymbol(math, main, rel, "\u21D1", "\\Uparrow");
+ defineSymbol(math, main, rel, "\u2193", "\\downarrow");
+ defineSymbol(math, main, rel, "\u21D3", "\\Downarrow");
+ defineSymbol(math, main, rel, "\u2195", "\\updownarrow");
+ defineSymbol(math, main, rel, "\u21D5", "\\Updownarrow");
+ defineSymbol(math, main, op, "\u2210", "\\coprod");
+ defineSymbol(math, main, op, "\u22C1", "\\bigvee");
+ defineSymbol(math, main, op, "\u22C0", "\\bigwedge");
+ defineSymbol(math, main, op, "\u2A04", "\\biguplus");
+ defineSymbol(math, main, op, "\u22C2", "\\bigcap");
+ defineSymbol(math, main, op, "\u22C3", "\\bigcup");
+ defineSymbol(math, main, op, "\u222B", "\\int");
+ defineSymbol(math, main, op, "\u222B", "\\intop");
+ defineSymbol(math, main, op, "\u222C", "\\iint");
+ defineSymbol(math, main, op, "\u222D", "\\iiint");
+ defineSymbol(math, main, op, "\u220F", "\\prod");
+ defineSymbol(math, main, op, "\u2211", "\\sum");
+ defineSymbol(math, main, op, "\u2A02", "\\bigotimes");
+ defineSymbol(math, main, op, "\u2A01", "\\bigoplus");
+ defineSymbol(math, main, op, "\u2A00", "\\bigodot");
+ defineSymbol(math, main, op, "\u222E", "\\oint");
+ defineSymbol(math, main, op, "\u2A06", "\\bigsqcup");
+ defineSymbol(math, main, op, "\u222B", "\\smallint");
+ defineSymbol(text, main, inner, "\u2026", "\\textellipsis");
+ defineSymbol(math, main, inner, "\u2026", "\\mathellipsis");
+ defineSymbol(text, main, inner, "\u2026", "\\ldots", true);
+ defineSymbol(math, main, inner, "\u2026", "\\ldots", true);
+ defineSymbol(math, main, inner, "\u22EF", "\\cdots", true);
+ defineSymbol(math, main, inner, "\u22F1", "\\ddots", true);
+ defineSymbol(math, main, textord, "\u22EE", "\\vdots", true);
+ defineSymbol(math, main, accent, "\xB4", "\\acute");
+ defineSymbol(math, main, accent, "`", "\\grave");
+ defineSymbol(math, main, accent, "\xA8", "\\ddot");
+ defineSymbol(math, main, accent, "~", "\\tilde");
+ defineSymbol(math, main, accent, "\xAF", "\\bar");
+ defineSymbol(math, main, accent, "\u02D8", "\\breve");
+ defineSymbol(math, main, accent, "\u02C7", "\\check");
+ defineSymbol(math, main, accent, "^", "\\hat");
+ defineSymbol(math, main, accent, "\u20D7", "\\vec");
+ defineSymbol(math, main, accent, "\u02D9", "\\dot");
+ defineSymbol(math, main, mathord, "\u0131", "\\imath");
+ defineSymbol(math, main, mathord, "\u0237", "\\jmath");
+ defineSymbol(text, main, accent, "\u02CA", "\\'"); // acute
+ defineSymbol(text, main, accent, "\u02CB", "\\`"); // grave
+ defineSymbol(text, main, accent, "\u02C6", "\\^"); // circumflex
+ defineSymbol(text, main, accent, "\u02DC", "\\~"); // tilde
+ defineSymbol(text, main, accent, "\u02C9", "\\="); // macron
+ defineSymbol(text, main, accent, "\u02D8", "\\u"); // breve
+ defineSymbol(text, main, accent, "\u02D9", "\\."); // dot above
+ defineSymbol(text, main, accent, "\u02DA", "\\r"); // ring above
+ defineSymbol(text, main, accent, "\u02C7", "\\v"); // caron
+ defineSymbol(text, main, accent, "\xA8", '\\"'); // diaresis
+ defineSymbol(text, main, accent, "\u030B", "\\H"); // double acute
+
+ defineSymbol(text, main, textord, "\u2013", "--");
+ defineSymbol(text, main, textord, "\u2013", "\\textendash");
+ defineSymbol(text, main, textord, "\u2014", "---");
+ defineSymbol(text, main, textord, "\u2014", "\\textemdash");
+ defineSymbol(text, main, textord, "\u2018", "`");
+ defineSymbol(text, main, textord, "\u2018", "\\textquoteleft");
+ defineSymbol(text, main, textord, "\u2019", "'");
+ defineSymbol(text, main, textord, "\u2019", "\\textquoteright");
+ defineSymbol(text, main, textord, "\u201C", "``");
+ defineSymbol(text, main, textord, "\u201C", "\\textquotedblleft");
+ defineSymbol(text, main, textord, "\u201D", "''");
+ defineSymbol(text, main, textord, "\u201D", "\\textquotedblright");
+ defineSymbol(math, main, textord, "\xB0", "\\degree");
+ defineSymbol(text, main, textord, "\xB0", "\\degree");
+ // TODO: In LaTeX, \pounds can generate a different character in text and math
+ // mode, but among our fonts, only Main-Italic defines this character "163".
+ defineSymbol(math, main, mathord, "\xA3", "\\pounds");
+ defineSymbol(math, main, mathord, "\xA3", "\\mathsterling");
+ defineSymbol(text, main, mathord, "\xA3", "\\pounds");
+ defineSymbol(text, main, mathord, "\xA3", "\\textsterling");
+ defineSymbol(math, ams, textord, "\u2720", "\\maltese");
+ defineSymbol(text, ams, textord, "\u2720", "\\maltese");
+
+ defineSymbol(text, main, spacing, "\xA0", "\\ ");
+ defineSymbol(text, main, spacing, "\xA0", " ");
+ defineSymbol(text, main, spacing, "\xA0", "~");
+
+ // There are lots of symbols which are the same, so we add them in afterwards.
+
+ // All of these are textords in math mode
+ var mathTextSymbols = '0123456789/@."';
+ for (var i = 0; i < mathTextSymbols.length; i++) {
+ var ch = mathTextSymbols.charAt(i);
+ defineSymbol(math, main, textord, ch, ch);
+ }
+
+ // All of these are textords in text mode
+ var textSymbols = '0123456789!@*()-=+[]<>|";:?/.,';
+ for (var _i = 0; _i < textSymbols.length; _i++) {
+ var _ch = textSymbols.charAt(_i);
+ defineSymbol(text, main, textord, _ch, _ch);
+ }
+
+ // All of these are textords in text mode, and mathords in math mode
+ var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ for (var _i2 = 0; _i2 < letters.length; _i2++) {
+ var _ch2 = letters.charAt(_i2);
+ defineSymbol(math, main, mathord, _ch2, _ch2);
+ defineSymbol(text, main, textord, _ch2, _ch2);
+ }
+
+ // Latin-1 letters
+ for (var _i3 = 0x00c0; _i3 <= 0x00d6; _i3++) {
+ var _ch3 = String.fromCharCode(_i3);
+ defineSymbol(math, main, mathord, _ch3, _ch3);
+ defineSymbol(text, main, textord, _ch3, _ch3);
+ }
+
+ for (var _i4 = 0x00d8; _i4 <= 0x00f6; _i4++) {
+ var _ch4 = String.fromCharCode(_i4);
+ defineSymbol(math, main, mathord, _ch4, _ch4);
+ defineSymbol(text, main, textord, _ch4, _ch4);
+ }
+
+ for (var _i5 = 0x00f8; _i5 <= 0x00ff; _i5++) {
+ var _ch5 = String.fromCharCode(_i5);
+ defineSymbol(math, main, mathord, _ch5, _ch5);
+ defineSymbol(text, main, textord, _ch5, _ch5);
+ }
+
+ // Cyrillic
+ for (var _i6 = 0x0410; _i6 <= 0x044f; _i6++) {
+ var _ch6 = String.fromCharCode(_i6);
+ defineSymbol(text, main, textord, _ch6, _ch6);
+ }
+
+ // Unicode versions of existing characters
+ defineSymbol(text, main, textord, "\u2013", "–");
+ defineSymbol(text, main, textord, "\u2014", "—");
+ defineSymbol(text, main, textord, "\u2018", "‘");
+ defineSymbol(text, main, textord, "\u2019", "’");
+ defineSymbol(text, main, textord, "\u201C", "“");
+ defineSymbol(text, main, textord, "\u201D", "”");
+ },
+ {},
+ ],
+ 49: [
+ function (require, module, exports) {
+ var hangulRegex = /[\uAC00-\uD7AF]/;
+
+ // This regex combines
+ // - CJK symbols and punctuation: [\u3000-\u303F]
+ // - Hiragana: [\u3040-\u309F]
+ // - Katakana: [\u30A0-\u30FF]
+ // - CJK ideograms: [\u4E00-\u9FAF]
+ // - Hangul syllables: [\uAC00-\uD7AF]
+ // - Fullwidth punctuation: [\uFF00-\uFF60]
+ // Notably missing are halfwidth Katakana and Romanji glyphs.
+ var cjkRegex = /[\u3000-\u30FF\u4E00-\u9FAF\uAC00-\uD7AF\uFF00-\uFF60]/;
+
+ module.exports = {
+ cjkRegex: cjkRegex,
+ hangulRegex: hangulRegex,
+ };
+ },
+ {},
+ ],
+ 50: [
+ function (require, module, exports) {
+ var _ParseError = require("./ParseError");
+
+ var _ParseError2 = _interopRequireDefault(_ParseError);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : { default: obj };
+ }
+
+ // This table gives the number of TeX pts in one of each *absolute* TeX unit.
+ // Thus, multiplying a length by this number converts the length from units
+ // into pts. Dividing the result by ptPerEm gives the number of ems
+ // *assuming* a font size of ptPerEm (normal size, normal style).
+ var ptPerUnit = {
+ // https://en.wikibooks.org/wiki/LaTeX/Lengths and
+ // https://tex.stackexchange.com/a/8263
+ pt: 1, // TeX point
+ mm: 7227 / 2540, // millimeter
+ cm: 7227 / 254, // centimeter
+ in: 72.27, // inch
+ bp: 803 / 800, // big (PostScript) points
+ pc: 12, // pica
+ dd: 1238 / 1157, // didot
+ cc: 14856 / 1157, // cicero (12 didot)
+ nd: 685 / 642, // new didot
+ nc: 1370 / 107, // new cicero (12 new didot)
+ sp: 1 / 65536, // scaled point (TeX's internal smallest unit)
+ // https://tex.stackexchange.com/a/41371
+ px: 803 / 800,
+ };
+
+ // Dictionary of relative units, for fast validity testing.
+ /* eslint no-console:0 */
+
+ /**
+ * This file does conversion between units. In particular, it provides
+ * calculateSize to convert other units into ems.
+ */
+
+ var relativeUnit = {
+ ex: true,
+ em: true,
+ mu: true,
+ };
+
+ /**
+ * Determine whether the specified unit (either a string defining the unit
+ * or a "size" parse node containing a unit field) is valid.
+ */
+ var validUnit = function validUnit(unit) {
+ if (unit.unit) {
+ unit = unit.unit;
+ }
+ return unit in ptPerUnit || unit in relativeUnit || unit === "ex";
+ };
+
+ /*
+ * Convert a "size" parse node (with numeric "number" and string "unit" fields,
+ * as parsed by functions.js argType "size") into a CSS em value for the
+ * current style/scale. `options` gives the current options.
+ */
+ var calculateSize = function calculateSize(sizeValue, options) {
+ var scale = void 0;
+ if (sizeValue.unit in ptPerUnit) {
+ // Absolute units
+ scale =
+ ptPerUnit[sizeValue.unit] / // Convert unit to pt
+ options.fontMetrics().ptPerEm / // Convert pt to CSS em
+ options.sizeMultiplier; // Unscale to make absolute units
+ } else if (sizeValue.unit === "mu") {
+ // `mu` units scale with scriptstyle/scriptscriptstyle.
+ scale = options.fontMetrics().cssEmPerMu;
+ } else {
+ // Other relative units always refer to the *textstyle* font
+ // in the current size.
+ var unitOptions = void 0;
+ if (options.style.isTight()) {
+ // isTight() means current style is script/scriptscript.
+ unitOptions = options.havingStyle(options.style.text());
+ } else {
+ unitOptions = options;
+ }
+ // TODO: In TeX these units are relative to the quad of the current
+ // *text* font, e.g. cmr10. KaTeX instead uses values from the
+ // comparably-sized *Computer Modern symbol* font. At 10pt, these
+ // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;
+ // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$.
+ // TeX \showlists shows a kern of 1.13889 * fontsize;
+ // KaTeX shows a kern of 1.171 * fontsize.
+ if (sizeValue.unit === "ex") {
+ scale = unitOptions.fontMetrics().xHeight;
+ } else if (sizeValue.unit === "em") {
+ scale = unitOptions.fontMetrics().quad;
+ } else {
+ throw new _ParseError2.default("Invalid unit: '" + sizeValue.unit + "'");
+ }
+ if (unitOptions !== options) {
+ scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;
+ }
+ }
+ return sizeValue.number * scale;
+ };
+
+ module.exports = {
+ validUnit: validUnit,
+ calculateSize: calculateSize,
+ };
+ },
+ { "./ParseError": 29 },
+ ],
+ 51: [
+ function (require, module, exports) {
+ /**
+ * This file contains a list of utility functions which are useful in other
+ * files.
+ */
+
+ /**
+ * Provide an `indexOf` function which works in IE8, but defers to native if
+ * possible.
+ */
+ var nativeIndexOf = Array.prototype.indexOf;
+ var indexOf = function indexOf(list, elem) {
+ if (list == null) {
+ return -1;
+ }
+ if (nativeIndexOf && list.indexOf === nativeIndexOf) {
+ return list.indexOf(elem);
+ }
+ var l = list.length;
+ for (var i = 0; i < l; i++) {
+ if (list[i] === elem) {
+ return i;
+ }
+ }
+ return -1;
+ };
+
+ /**
+ * Return whether an element is contained in a list
+ */
+ var contains = function contains(list, elem) {
+ return indexOf(list, elem) !== -1;
+ };
+
+ /**
+ * Provide a default value if a setting is undefined
+ */
+ var deflt = function deflt(setting, defaultIfUndefined) {
+ return setting === undefined ? defaultIfUndefined : setting;
+ };
+
+ // hyphenate and escape adapted from Facebook's React under Apache 2 license
+
+ var uppercase = /([A-Z])/g;
+ var hyphenate = function hyphenate(str) {
+ return str.replace(uppercase, "-$1").toLowerCase();
+ };
+
+ var ESCAPE_LOOKUP = {
+ "&": "&",
+ ">": ">",
+ "<": "<",
+ '"': """,
+ "'": "'",
+ };
+
+ var ESCAPE_REGEX = /[&><"']/g;
+
+ function escaper(match) {
+ return ESCAPE_LOOKUP[match];
+ }
+
+ /**
+ * Escapes text to prevent scripting attacks.
+ *
+ * @param {*} text Text value to escape.
+ * @return {string} An escaped string.
+ */
+ function escape(text) {
+ return ("" + text).replace(ESCAPE_REGEX, escaper);
+ }
+
+ /**
+ * A function to set the text content of a DOM element in all supported
+ * browsers. Note that we don't define this if there is no document.
+ */
+ var setTextContent = void 0;
+ if (typeof document !== "undefined") {
+ var testNode = document.createElement("span");
+ if ("textContent" in testNode) {
+ setTextContent = function setTextContent(node, text) {
+ node.textContent = text;
+ };
+ } else {
+ setTextContent = function setTextContent(node, text) {
+ node.innerText = text;
+ };
+ }
+ }
+
+ /**
+ * A function to clear a node.
+ */
+ function clearNode(node) {
+ setTextContent(node, "");
+ }
+
+ module.exports = {
+ contains: contains,
+ deflt: deflt,
+ escape: escape,
+ hyphenate: hyphenate,
+ indexOf: indexOf,
+ setTextContent: setTextContent,
+ clearNode: clearNode,
+ };
+ },
+ {},
+ ],
+ },
+ {},
+ [1]
+ )(1);
+ });
+ });
+
+ var katex$2 = unwrapExports(katex$1);
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ // This is a straight concatenation of code from KaTeX's contrib folder,
+ // but we aren't using some of their helpers that don't work well outside a browser environment.
+
+ /*global katex */
+
+ const findEndOfMath = function (delimiter, text, startIndex) {
+ // Adapted from
+ // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx
+ let index = startIndex;
+ let braceLevel = 0;
+
+ const delimLength = delimiter.length;
+
+ while (index < text.length) {
+ const character = text[index];
+
+ if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) {
+ return index;
+ } else if (character === "\\") {
+ index++;
+ } else if (character === "{") {
+ braceLevel++;
+ } else if (character === "}") {
+ braceLevel--;
+ }
+
+ index++;
+ }
+
+ return -1;
+ };
+
+ const splitAtDelimiters = function (startData, leftDelim, rightDelim, display) {
+ const finalData = [];
+
+ for (let i = 0; i < startData.length; i++) {
+ if (startData[i].type === "text") {
+ const text = startData[i].data;
+
+ let lookingForLeft = true;
+ let currIndex = 0;
+ let nextIndex;
+
+ nextIndex = text.indexOf(leftDelim);
+ if (nextIndex !== -1) {
+ currIndex = nextIndex;
+ finalData.push({
+ type: "text",
+ data: text.slice(0, currIndex),
+ });
+ lookingForLeft = false;
+ }
+
+ while (true) {
+ // eslint-disable-line no-constant-condition
+ if (lookingForLeft) {
+ nextIndex = text.indexOf(leftDelim, currIndex);
+ if (nextIndex === -1) {
+ break;
+ }
+
+ finalData.push({
+ type: "text",
+ data: text.slice(currIndex, nextIndex),
+ });
+
+ currIndex = nextIndex;
+ } else {
+ nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length);
+ if (nextIndex === -1) {
+ break;
+ }
+
+ finalData.push({
+ type: "math",
+ data: text.slice(currIndex + leftDelim.length, nextIndex),
+ rawData: text.slice(currIndex, nextIndex + rightDelim.length),
+ display: display,
+ });
+
+ currIndex = nextIndex + rightDelim.length;
+ }
+
+ lookingForLeft = !lookingForLeft;
+ }
+
+ finalData.push({
+ type: "text",
+ data: text.slice(currIndex),
+ });
+ } else {
+ finalData.push(startData[i]);
+ }
+ }
+
+ return finalData;
+ };
+
+ const splitWithDelimiters = function (text, delimiters) {
+ let data = [{ type: "text", data: text }];
+ for (let i = 0; i < delimiters.length; i++) {
+ const delimiter = delimiters[i];
+ data = splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false);
+ }
+ return data;
+ };
+
+ /* Note: optionsCopy is mutated by this method. If it is ever exposed in the
+ * API, we should copy it before mutating.
+ */
+ const renderMathInText = function (text, optionsCopy) {
+ const data = splitWithDelimiters(text, optionsCopy.delimiters);
+ const fragment = document.createDocumentFragment();
+
+ for (let i = 0; i < data.length; i++) {
+ if (data[i].type === "text") {
+ fragment.appendChild(document.createTextNode(data[i].data));
+ } else {
+ const tag = document.createElement("d-math");
+ const math = data[i].data;
+ // Override any display mode defined in the settings with that
+ // defined by the text itself
+ optionsCopy.displayMode = data[i].display;
+ try {
+ tag.textContent = math;
+ if (optionsCopy.displayMode) {
+ tag.setAttribute("block", "");
+ }
+ } catch (e) {
+ if (!(e instanceof katex.ParseError)) {
+ throw e;
+ }
+ optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e);
+ fragment.appendChild(document.createTextNode(data[i].rawData));
+ continue;
+ }
+ fragment.appendChild(tag);
+ }
+ }
+
+ return fragment;
+ };
+
+ const renderElem = function (elem, optionsCopy) {
+ for (let i = 0; i < elem.childNodes.length; i++) {
+ const childNode = elem.childNodes[i];
+ if (childNode.nodeType === 3) {
+ // Text node
+ const text = childNode.textContent;
+ if (optionsCopy.mightHaveMath(text)) {
+ const frag = renderMathInText(text, optionsCopy);
+ i += frag.childNodes.length - 1;
+ elem.replaceChild(frag, childNode);
+ }
+ } else if (childNode.nodeType === 1) {
+ // Element node
+ const shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1;
+
+ if (shouldRender) {
+ renderElem(childNode, optionsCopy);
+ }
+ }
+ // Otherwise, it's something else, and ignore it.
+ }
+ };
+
+ const defaultAutoRenderOptions = {
+ delimiters: [
+ { left: "$$", right: "$$", display: true },
+ { left: "\\[", right: "\\]", display: true },
+ { left: "\\(", right: "\\)", display: false },
+ // LaTeX uses this, but it ruins the display of normal `$` in text:
+ // {left: '$', right: '$', display: false},
+ ],
+
+ ignoredTags: ["script", "noscript", "style", "textarea", "pre", "code", "svg"],
+
+ errorCallback: function (msg, err) {
+ console.error(msg, err);
+ },
+ };
+
+ const renderMathInElement = function (elem, options) {
+ if (!elem) {
+ throw new Error("No element provided to render");
+ }
+
+ const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);
+ const delimiterStrings = optionsCopy.delimiters.flatMap((d) => [d.left, d.right]);
+ const mightHaveMath = (text) => delimiterStrings.some((d) => text.indexOf(d) !== -1);
+ optionsCopy.mightHaveMath = mightHaveMath;
+ renderElem(elem, optionsCopy);
+ };
+
+ // Copyright 2018 The Distill Template Authors
+
+ function Mathematics(dom, data) {
+ let needsCSS = false;
+ const body = dom.querySelector("body");
+
+ if (!body) {
+ console.warn("No body tag found!");
+ return;
+ }
+
+ if (data.katex && data.katex.delimiters) {
+ global.document = dom;
+ renderMathInElement(body, data.katex);
+ }
+
+ // render d-math tags
+ const mathTags = body.querySelectorAll("d-math");
+ if (mathTags.length > 0) {
+ needsCSS = true;
+ console.warn(`Prerendering ${mathTags.length} math tags...`);
+ for (const mathTag of mathTags) {
+ const localOptions = {
+ displayMode: mathTag.hasAttribute("block"),
+ };
+ const options = Object.assign(localOptions, data.katex);
+ const html = katex$2.renderToString(mathTag.textContent, options);
+ const container = dom.createElement("span");
+ container.innerHTML = html;
+ mathTag.parentElement.insertBefore(container, mathTag);
+ mathTag.parentElement.removeChild(mathTag);
+ }
+ }
+
+ if (needsCSS) {
+ const katexCSSTag = ' ';
+ dom.head.insertAdjacentHTML("beforeend", katexCSSTag);
+ }
+ }
+
+ var favicon =
+ "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA99JREFUeNrsG4t1ozDMzQSM4A2ODUonKBucN2hugtIJ6E1AboLcBiQTkJsANiAb9OCd/OpzMWBJBl5TvaeXPiiyJetry0J8wW3D3QpjRh3GjneXDq+fSQA9s2mH9x3KDhN4foJfCb8N/Jrv+2fnDn8vLRQOplWHVYdvHZYdZsBcZP1vBmh/n8DzEmhUQDPaOuP9pFuY+JwJHwHnCLQE2tnWBGEyXozY9xCUgHMhhjE2I4heVWtgIkZ83wL6Qgxj1obfWBxymPwe+b00BCCRNPbwfb60yleAkkBHGT5AEehIYz7eJrFDMF9CvH4wwhcGHiHMneFvLDQwlwvMLQq58trRcYBWfYn0A0OgHWQUSu25mE+BnoYKnnEJoeIWAifzOv7vLWd2ZKRfWAIme3tOiUaQ3UnLkb0xj1FxRIeEGKaGIHOs9nEgLaaA9i0JRYo1Ic67wJW86KSKE/ZAM8KuVMk8ITVhmxUxJ3Cl2xlm9Vtkeju1+mpCQNxaEGNCY8bs9X2YqwNoQeGjBWut/ma0QAWy/TqAsHx9wSya3I5IRxOfTC+leG+kA/4vSeEcGBtNUN6byhu3+keEZCQJUNh8MAO7HL6H8pQLnsW/Hd4T4lv93TPjfM7A46iEEqbB5EDOvwYNW6tGNZzT/o+CZ6sqZ6wUtR/wf7mi/VL8iNciT6rHih48Y55b4nKCHJCCzb4y0nwFmin3ZEMIoLfZF8F7nncFmvnWBaBj7CGAYA/WGJsUwHdYqVDwAmNsUgAx4CGgAA7GOOxADYOFWOaIKifuVYzmOpREqA21Mo7aPsgiY1PhOMAmxtR+AUbYH3Id2wc0SAFIQTsn9IUGWR8k9jx3vtXSiAacFxTAGakBk9UudkNECd6jLe+6HrshshvIuC6IlLMRy7er+JpcKma24SlE4cFZSZJDGVVrsNvitQhQrDhW0jfiOLfFd47C42eHT56D/BK0To+58Ahj+cAT8HT1UWlfLZCCd/uKawzU0Rh2EyIX/Icqth3niG8ybNroezwe6khdCNxRN+l4XGdOLVLlOOt2hTRJlr1ETIuMAltVTMz70mJrkdGAaZLSmnBEqmAE32JCMmuTlCnRgsBENtOUpHhvvsYIL0ibnBkaC6QvKcR7738GKp0AKnim7xgUSNv1bpS8QwhBt8r+EP47v/oyRK/S34yJ9nT+AN0Tkm4OdB9E4BsmXM3SnMlRFUrtp6IDpV2eKzdYvF3etm3KhQksbOLChGkSmcBdmcEwvqkrMy5BzL00NZeu3qPYJOOuCc+5NjcWKXQxFvTa3NoXJ4d8in7fiAUuTt781dkvuHX4K8AA2Usy7yNKLy0AAAAASUVORK5CYII=\n";
+
+ /*!
+ * escape-html
+ * Copyright(c) 2012-2013 TJ Holowaychuk
+ * Copyright(c) 2015 Andreas Lubbe
+ * Copyright(c) 2015 Tiancheng "Timothy" Gu
+ * MIT Licensed
+ */
+
+ /**
+ * Module variables.
+ * @private
+ */
+
+ var matchHtmlRegExp = /["'&<>]/;
+
+ /**
+ * Module exports.
+ * @public
+ */
+
+ var escapeHtml_1 = escapeHtml;
+
+ /**
+ * Escape special characters in the given string of html.
+ *
+ * @param {string} string The string to escape for inserting into HTML
+ * @return {string}
+ * @public
+ */
+
+ function escapeHtml(string) {
+ var str = "" + string;
+ var match = matchHtmlRegExp.exec(str);
+
+ if (!match) {
+ return str;
+ }
+
+ var escape;
+ var html = "";
+ var index = 0;
+ var lastIndex = 0;
+
+ for (index = match.index; index < str.length; index++) {
+ switch (str.charCodeAt(index)) {
+ case 34: // "
+ escape = """;
+ break;
+ case 38: // &
+ escape = "&";
+ break;
+ case 39: // '
+ escape = "'";
+ break;
+ case 60: // <
+ escape = "<";
+ break;
+ case 62: // >
+ escape = ">";
+ break;
+ default:
+ continue;
+ }
+
+ if (lastIndex !== index) {
+ html += str.substring(lastIndex, index);
+ }
+
+ lastIndex = index + 1;
+ html += escape;
+ }
+
+ return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function Meta(dom, data) {
+ let head = dom.querySelector("head");
+ let appendHead = (html) => appendHtml(head, html);
+
+ function meta(name, content, force) {
+ if (content || force) appendHead(` \n`);
+ }
+
+ appendHead(`
+
+
+
+ `);
+
+ if (data.title) {
+ appendHead(`
+ ${escapeHtml_1(data.title)}
+ `);
+ }
+
+ if (data.url) {
+ appendHead(`
+
+ `);
+ }
+
+ if (data.publishedDate) {
+ appendHead(`
+
+
+
+
+ `);
+ }
+
+ if (data.updatedDate) {
+ appendHead(`
+
+ `);
+ }
+
+ (data.authors || []).forEach((a) => {
+ appendHtml(
+ head,
+ `
+ `
+ );
+ });
+
+ appendHead(`
+
+
+
+
+
+
+
+
+ `);
+
+ appendHead(`
+
+
+
+
+
+
+
+
+ `);
+
+ // if this is a proprer article, generate Google Scholar meta data
+ if (data.doiSuffix) {
+ appendHead(`
+ \n`);
+
+ meta("citation_title", data.title);
+ meta("citation_fulltext_html_url", data.url);
+ meta("citation_volume", data.volume);
+ meta("citation_issue", data.issue);
+ meta("citation_firstpage", data.doiSuffix ? `e${data.doiSuffix}` : undefined);
+ meta("citation_doi", data.doi);
+
+ let journal = data.journal || {};
+ meta("citation_journal_title", journal.full_title || journal.title);
+ meta("citation_journal_abbrev", journal.abbrev_title);
+ meta("citation_issn", journal.issn);
+ meta("citation_publisher", journal.publisher);
+ meta("citation_fulltext_world_readable", "", true);
+
+ if (data.publishedDate) {
+ meta("citation_online_date", `${data.publishedYear}/${data.publishedMonthPadded}/${data.publishedDayPadded}`);
+ meta("citation_publication_date", `${data.publishedYear}/${data.publishedMonthPadded}/${data.publishedDayPadded}`);
+ }
+
+ (data.authors || []).forEach((a) => {
+ meta("citation_author", `${a.lastName}, ${a.firstName}`);
+ meta("citation_author_institution", a.affiliation);
+ });
+ } else {
+ console.warn("No DOI suffix in data; not adding citation meta tags!");
+ }
+
+ if (data.citations) {
+ data.citations.forEach((key) => {
+ if (data.bibliography && data.bibliography.has(key)) {
+ const entry = data.bibliography.get(key);
+ meta("citation_reference", citation_meta_content(entry));
+ } else {
+ console.warn("No bibliography data found for " + key);
+ }
+ });
+ } else {
+ console.warn("No citations found; not adding any references meta tags!");
+ }
+ }
+
+ function appendHtml(el, html) {
+ el.innerHTML += html;
+ }
+
+ function citation_meta_content(ref) {
+ var content = `citation_title=${ref.title};`;
+
+ if (ref.author && ref.author !== "") {
+ ref.author.split(" and ").forEach((name) => {
+ name = name.trim();
+ let last, firsts;
+ if (name.indexOf(",") != -1) {
+ last = name.split(",")[0].trim();
+ firsts = name.split(",")[1].trim();
+ } else {
+ last = name.split(" ").slice(-1)[0].trim();
+ firsts = name.split(" ").slice(0, -1).join(" ");
+ }
+ content += `citation_author=${firsts} ${last};`;
+ });
+ }
+
+ if ("year" in ref) {
+ content += `citation_publication_date=${ref.year};`;
+ }
+
+ // Special test for arxiv
+ let arxiv_id_search = /https?:\/\/arxiv\.org\/pdf\/([0-9]*\.[0-9]*)\.pdf/.exec(ref.url);
+ arxiv_id_search = arxiv_id_search || /https?:\/\/arxiv\.org\/abs\/([0-9]*\.[0-9]*)/.exec(ref.url);
+ arxiv_id_search = arxiv_id_search || /arXiv preprint arXiv:([0-9]*\.[0-9]*)/.exec(ref.journal);
+ if (arxiv_id_search && arxiv_id_search[1]) {
+ content += `citation_arxiv_id=${arxiv_id_search[1]};`;
+ return content; // arXiv is not considered a journal, so we don't need journal/volume/issue
+ }
+ if ("journal" in ref) {
+ content += `citation_journal_title=${escapeHtml_1(ref.journal)};`;
+ }
+ if ("volume" in ref) {
+ content += `citation_volume=${escapeHtml_1(ref.volume)};`;
+ }
+ if ("issue" in ref || "number" in ref) {
+ content += `citation_number=${escapeHtml_1(ref.issue || ref.number)};`;
+ }
+ return content;
+ }
+
+ var base =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml {\n font-size: 14px;\n\tline-height: 1.6em;\n /* font-family: "Libre Franklin", "Helvetica Neue", sans-serif; */\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;\n /*, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";*/\n text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\n@media(min-width: 768px) {\n html {\n font-size: 16px;\n }\n}\n\nbody {\n margin: 0;\n}\n\na {\n color: #004276;\n}\n\nfigure {\n margin: 0;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th {\n\ttext-align: left;\n}\n\ntable thead {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\ntable thead th {\n padding-bottom: 0.5em;\n}\n\ntable tbody :first-child td {\n padding-top: 0.5em;\n}\n\npre {\n overflow: auto;\n max-width: 100%;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nsup, sub {\n vertical-align: baseline;\n position: relative;\n top: -0.4em;\n line-height: 1em;\n}\n\nsub {\n top: 0.4em;\n}\n\n.kicker,\n.marker {\n font-size: 15px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* Headline */\n\n@media(min-width: 1024px) {\n d-title h1 span {\n display: block;\n }\n}\n\n/* Figure */\n\nfigure {\n position: relative;\n margin-bottom: 2.5em;\n margin-top: 1.5em;\n}\n\nfigcaption+figure {\n\n}\n\nfigure img {\n width: 100%;\n}\n\nfigure svg text,\nfigure svg tspan {\n}\n\nfigcaption,\n.figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n\n@media(min-width: 1024px) {\nfigcaption,\n.figcaption {\n font-size: 13px;\n }\n}\n\nfigure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\nfigcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nfigcaption b,\nfigcaption strong, {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n';
+
+ var layout =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@supports not (display: grid) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n display: block;\n padding: 8px;\n }\n}\n\n.base-grid,\ndistill-header,\nd-title,\nd-abstract,\nd-article,\nd-appendix,\ndistill-appendix,\nd-byline,\nd-footnote-list,\nd-citation-list,\ndistill-footer {\n display: grid;\n justify-items: stretch;\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\n grid-column-gap: 8px;\n}\n\n.grid {\n display: grid;\n grid-column-gap: 8px;\n}\n\n@media(min-width: 768px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1000px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1180px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 32px;\n }\n\n .grid {\n grid-column-gap: 32px;\n }\n}\n\n\n\n\n.base-grid {\n grid-column: screen;\n}\n\n/* .l-body,\nd-article > * {\n grid-column: text;\n}\n\n.l-page,\nd-title > *,\nd-figure {\n grid-column: page;\n} */\n\n.l-gutter {\n grid-column: gutter;\n}\n\n.l-text,\n.l-body {\n grid-column: text;\n}\n\n.l-page {\n grid-column: page;\n}\n\n.l-body-outset {\n grid-column: middle;\n}\n\n.l-page-outset {\n grid-column: page;\n}\n\n.l-screen {\n grid-column: screen;\n}\n\n.l-screen-inset {\n grid-column: screen;\n padding-left: 16px;\n padding-left: 16px;\n}\n\n\n/* Aside */\n\nd-article aside {\n grid-column: gutter;\n font-size: 12px;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.6)\n}\n\n@media(min-width: 768px) {\n aside {\n grid-column: gutter;\n }\n\n .side {\n grid-column: gutter;\n }\n}\n';
+
+ var print =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@media print {\n\n @page {\n size: 8in 11in;\n @bottom-right {\n content: counter(page) " of " counter(pages);\n }\n }\n\n html {\n /* no general margins -- CSS Grid takes care of those */\n }\n\n p, code {\n page-break-inside: avoid;\n }\n\n h2, h3 {\n page-break-after: avoid;\n }\n\n d-header {\n visibility: hidden;\n }\n\n d-footer {\n display: none!important;\n }\n\n}\n';
+
+ var byline =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n';
+
+ var article =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n';
+
+ var title =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n';
+
+ var math =
+ '/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nspan.katex-display {\n text-align: left;\n padding: 8px 0 8px 0;\n margin: 0.5em 0 0.5em 1em;\n}\n\nspan.katex {\n -webkit-font-smoothing: antialiased;\n color: rgba(0, 0, 0, 0.8);\n font-size: 1.18em;\n}\n';
+
+ // Copyright 2018 The Distill Template Authors
+
+ const styles = base + layout + title + byline + article + math + print;
+
+ function makeStyleTag(dom) {
+ const styleTagId = "distill-prerendered-styles";
+ const prerenderedTag = dom.getElementById(styleTagId);
+ if (!prerenderedTag) {
+ const styleTag = dom.createElement("style");
+ styleTag.id = styleTagId;
+ styleTag.type = "text/css";
+ const cssTextTag = dom.createTextNode(styles);
+ styleTag.appendChild(cssTextTag);
+ const firstScriptTag = dom.head.querySelector("script");
+ dom.head.insertBefore(styleTag, firstScriptTag);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function renderTOC(element, headings) {
+ let ToC = `
+
+
+ Table of contents
+ `;
+
+ for (const el of headings) {
+ // should element be included in TOC?
+ const isInTitle = el.parentElement.tagName == "D-TITLE";
+ const isException = el.getAttribute("no-toc");
+ if (isInTitle || isException) continue;
+ // create TOC entry
+ const title = el.textContent;
+ const link = "#" + el.getAttribute("id");
+
+ let newLine = "" + '' + title + " " + " ";
+ if (el.tagName == "H3") {
+ newLine = "";
+ } else {
+ newLine += " ";
+ }
+ ToC += newLine;
+ }
+
+ ToC += " ";
+ element.innerHTML = ToC;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function TOC(dom) {
+ const article = dom.querySelector("d-article");
+ const toc = dom.querySelector("d-toc");
+ if (toc) {
+ const headings = article.querySelectorAll("h2, h3");
+ renderTOC(toc, headings);
+ toc.setAttribute("prerendered", "true");
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ function Typeset(dom) {
+ var textNodes = dom.createTreeWalker(dom.body, dom.defaultView.NodeFilter.SHOW_TEXT);
+ while (textNodes.nextNode()) {
+ var n = textNodes.currentNode,
+ text = n.nodeValue;
+ if (text && acceptNode(n)) {
+ text = quotes(text);
+ text = punctuation(text);
+ // TODO: Add back support for ligatures once their uppercased versions don't hang Chrome search anymore
+ // see: https://bugs.chromium.org/p/chromium/issues/detail?id=862648
+ // text = ligatures(text);
+ n.nodeValue = text;
+ }
+ }
+ }
+
+ // 2018-07-11 shancarter@ and ludwigschubert@ no longer know what this was meant to accomplish
+ // if it was trying to not replace text in any child nodes of those listed here,
+ // then it does not accomplish that.
+ function acceptNode(node) {
+ var parent = node.parentElement;
+ var isMath =
+ parent && parent.getAttribute && parent.getAttribute("class")
+ ? parent.getAttribute("class").includes("katex") || parent.getAttribute("class").includes("MathJax")
+ : false;
+ return (
+ parent &&
+ parent.nodeName !== "SCRIPT" &&
+ parent.nodeName !== "STYLE" &&
+ parent.nodeName !== "CODE" &&
+ parent.nodeName !== "PRE" &&
+ parent.nodeName !== "SPAN" &&
+ parent.nodeName !== "D-HEADER" &&
+ parent.nodeName !== "D-BYLINE" &&
+ parent.nodeName !== "D-MATH" &&
+ parent.nodeName !== "D-CODE" &&
+ parent.nodeName !== "D-BIBLIOGRAPHY" &&
+ parent.nodeName !== "D-FOOTER" &&
+ parent.nodeName !== "D-APPENDIX" &&
+ parent.nodeName !== "D-FRONTMATTER" &&
+ parent.nodeName !== "D-TOC" &&
+ parent.nodeType !== 8 && //comment nodes
+ !isMath
+ );
+ }
+
+ /*!
+ * typeset - Typesetting for the web
+ * @version v0.1.6
+ * @link https://github.com/davidmerfield/Typeset.js
+ * @author David Merfield
+ */
+ // which has a CC0 license
+ // http://creativecommons.org/publicdomain/zero/1.0/
+
+ function punctuation(text) {
+ // Dashes
+ text = text.replace(/--/g, "\u2014");
+ text = text.replace(/\s*\u2014\s*/g, "\u2009\u2014\u2009"); //this has thin spaces
+
+ // Elipses
+ text = text.replace(/\.\.\./g, "…");
+
+ // Nbsp for punc with spaces
+ var NBSP = "\u00a0";
+ var NBSP_PUNCTUATION_START = /([«¿¡]) /g;
+ var NBSP_PUNCTUATION_END = / ([!?:;.,‽»])/g;
+
+ text = text.replace(NBSP_PUNCTUATION_START, "$1" + NBSP);
+ text = text.replace(NBSP_PUNCTUATION_END, NBSP + "$1");
+
+ return text;
+ }
+
+ function quotes(text) {
+ text = text
+ .replace(/(\W|^)"([^\s!?:;.,‽»])/g, "$1\u201c$2") // beginning "
+ .replace(/(\u201c[^"]*)"([^"]*$|[^\u201c"]*\u201c)/g, "$1\u201d$2") // ending "
+ .replace(/([^0-9])"/g, "$1\u201d") // remaining " at end of word
+ .replace(/(\W|^)'(\S)/g, "$1\u2018$2") // beginning '
+ .replace(/([a-z])'([a-z])/gi, "$1\u2019$2") // conjunction's possession
+ .replace(/((\u2018[^']*)|[a-z])'([^0-9]|$)/gi, "$1\u2019$3") // ending '
+ .replace(/(\u2018)([0-9]{2}[^\u2019]*)(\u2018([^0-9]|$)|$|\u2019[a-z])/gi, "\u2019$2$3") // abbrev. years like '93
+ .replace(/(\B|^)\u2018(?=([^\u2019]*\u2019\b)*([^\u2019\u2018]*\W[\u2019\u2018]\b|[^\u2019\u2018]*$))/gi, "$1\u2019") // backwards apostrophe
+ .replace(/'''/g, "\u2034") // triple prime
+ .replace(/("|'')/g, "\u2033") // double prime
+ .replace(/'/g, "\u2032");
+
+ // Allow escaped quotes
+ text = text.replace(/\\“/, '"');
+ text = text.replace(/\\”/, '"');
+ text = text.replace(/\\’/, "'");
+ text = text.replace(/\\‘/, "'");
+
+ return text;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ // const template = `
+ // if ('IntersectionObserver' in window &&
+ // 'IntersectionObserverEntry' in window &&
+ // 'intersectionRatio' in IntersectionObserverEntry.prototype) {
+ // // Platform supports IntersectionObserver natively! :-)
+ // if (!('isIntersecting' in IntersectionObserverEntry.prototype)) {
+ // Object.defineProperty(IntersectionObserverEntry.prototype,
+ // 'isIntersecting', {
+ // get: function () {
+ // return this.intersectionRatio > 0;
+ // }
+ // });
+ // }
+ // } else {
+ // // Platform does not support webcomponents--loading polyfills synchronously.
+ // const scriptTag = document.createElement('script');
+ // scriptTag.src = '${intersectionObserverPath}';
+ // scriptTag.async = false;
+ // document.currentScript.parentNode.insertBefore(scriptTag, document.currentScript.nextSibling);
+ // }
+ //
+ // if ('registerElement' in document &&
+ // 'import' in document.createElement('link') &&
+ // 'content' in document.createElement('template')) {
+ // // Platform supports webcomponents natively! :-)
+ // } else {
+ // // Platform does not support webcomponents--loading polyfills synchronously.
+ // const scriptTag = document.createElement('script');
+ // scriptTag.src = '${webcomponentPath}';
+ // scriptTag.async = false;
+ // document.currentScript.parentNode.insertBefore(scriptTag, document.currentScript.nextSibling);
+ // }
+ //
+ //
+ // `;
+
+ const addBackIn = `
+window.addEventListener('WebComponentsReady', function() {
+ console.warn('WebComponentsReady');
+ const loaderTag = document.createElement('script');
+ loaderTag.src = 'https://distill.pub/template.v2.js';
+ document.head.insertBefore(loaderTag, document.head.firstChild);
+});
+`;
+
+ function render(dom) {
+ // pull out template script tag
+ const templateTag = dom.querySelector('script[src*="template.v2.js"]');
+ if (templateTag) {
+ templateTag.parentNode.removeChild(templateTag);
+ } else {
+ console.debug("FYI: Did not find template tag when trying to remove it. You may not have added it. Be aware that our polyfills will add it.");
+ }
+
+ // add loader
+ const loaderTag = dom.createElement("script");
+ loaderTag.src = "https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.17/webcomponents-loader.js";
+ dom.head.insertBefore(loaderTag, dom.head.firstChild);
+
+ // add loader event listener to add tempalrte back in
+ const addTag = dom.createElement("script");
+ addTag.innerHTML = addBackIn;
+ dom.head.insertBefore(addTag, dom.head.firstChild);
+
+ // create polyfill script tag
+ // const polyfillScriptTag = dom.createElement('script');
+ // polyfillScriptTag.innerHTML = template;
+ // polyfillScriptTag.id = 'polyfills';
+
+ // insert at appropriate position--before any other script tag
+ // const firstScriptTag = dom.head.querySelector('script');
+ // dom.head.insertBefore(polyfillScriptTag, firstScriptTag);
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const styles$1 = `
+d-citation-list {
+ contain: style;
+}
+
+d-citation-list .references {
+ grid-column: text;
+}
+
+d-citation-list .references .title {
+ font-weight: 500;
+}
+`;
+
+ function renderCitationList(element, entries, dom = document) {
+ if (entries.size > 0) {
+ element.style.display = "";
+ let list = element.querySelector(".references");
+ if (list) {
+ list.innerHTML = "";
+ } else {
+ const stylesTag = dom.createElement("style");
+ stylesTag.innerHTML = styles$1;
+ element.appendChild(stylesTag);
+
+ const heading = dom.createElement("h3");
+ heading.id = "references";
+ heading.textContent = "References";
+ element.appendChild(heading);
+
+ list = dom.createElement("ol");
+ list.id = "references-list";
+ list.className = "references";
+ element.appendChild(list);
+ }
+
+ for (const [key, entry] of entries) {
+ const listItem = dom.createElement("li");
+ listItem.id = key;
+ listItem.innerHTML = bibliography_cite(entry);
+ list.appendChild(listItem);
+ }
+ } else {
+ element.style.display = "none";
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function CitationList(dom, data) {
+ const citationListTag = dom.querySelector("d-citation-list");
+ if (citationListTag) {
+ const entries = new Map(
+ data.citations.map((citationKey) => {
+ return [citationKey, data.bibliography.get(citationKey)];
+ })
+ );
+ renderCitationList(citationListTag, entries, dom);
+ citationListTag.setAttribute("distill-prerendered", "true");
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+ //
+ // Licensed under the Apache License, Version 2.0 (the "License");
+ // you may not use this file except in compliance with the License.
+ // You may obtain a copy of the License at
+ //
+ // http://www.apache.org/licenses/LICENSE-2.0
+ //
+ // Unless required by applicable law or agreed to in writing, software
+ // distributed under the License is distributed on an "AS IS" BASIS,
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ // See the License for the specific language governing permissions and
+ // limitations under the License.
+
+ /*
+ Try to only reorder things that MAY be user defined.
+ Try to use templates etc to define the order of our own tags.
+ */
+
+ function render$1(dom) {
+ const head = dom.head;
+
+ const metaIE = head.querySelector("meta[http-equiv]");
+ head.insertBefore(metaIE, head.firstChild);
+
+ const metaViewport = head.querySelector("meta[name=viewport]");
+ head.insertBefore(metaViewport, head.firstChild);
+
+ const metaCharset = head.querySelector("meta[charset]");
+ head.insertBefore(metaCharset, head.firstChild);
+ }
+
+ var logo =
+ '\n \n \n';
+
+ const headerTemplate = `
+
+
+`;
+
+ // Copyright 2018 The Distill Template Authors
+
+ function DistillHeader(dom, data) {
+ const headerTag = dom.querySelector("distill-header");
+ if (!headerTag) {
+ const header = dom.createElement("distill-header");
+ header.innerHTML = headerTemplate;
+ header.setAttribute("distill-prerendered", "");
+ const body = dom.querySelector("body");
+ body.insertBefore(header, body.firstChild);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const styles$2 = `
+
+`;
+
+ function appendixTemplate(frontMatter) {
+ let html = styles$2;
+
+ if (typeof frontMatter.githubUrl !== "undefined") {
+ html += `
+ Updates and Corrections
+ `;
+ if (frontMatter.githubCompareUpdatesUrl) {
+ html += `View all changes to this article since it was first published.`;
+ }
+ html += `
+ If you see mistakes or want to suggest changes, please create an issue on GitHub .
+ `;
+ }
+
+ const journal = frontMatter.journal;
+ if (typeof journal !== "undefined" && journal.title === "Distill") {
+ html += `
+ Reuse
+ Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub , unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.
+ `;
+ }
+
+ if (typeof frontMatter.publishedDate !== "undefined") {
+ html += `
+ Citation
+ For attribution in academic contexts, please cite this work as
+ ${frontMatter.concatenatedAuthors}, "${frontMatter.title}", Distill, ${frontMatter.publishedYear}.
+ BibTeX citation
+ ${serializeFrontmatterToBibtex(frontMatter)}
+ `;
+ }
+
+ return html;
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ function DistillAppendix(dom, data) {
+ const appendixTag = dom.querySelector("d-appendix");
+ if (!appendixTag) {
+ console.warn("No appendix tag found!");
+ return;
+ }
+ const distillAppendixTag = appendixTag.querySelector("distill-appendix");
+ if (!distillAppendixTag) {
+ const distillAppendix = dom.createElement("distill-appendix");
+ appendixTag.appendChild(distillAppendix);
+ distillAppendix.innerHTML = appendixTemplate(data);
+ }
+ }
+
+ const footerTemplate = `
+
+
+
+
+`;
+
+ // Copyright 2018 The Distill Template Authors
+
+ function DistillFooter(dom) {
+ const footerTag = dom.querySelector("distill-footer");
+ if (!footerTag) {
+ const footer = dom.createElement("distill-footer");
+ footer.innerHTML = footerTemplate;
+ const body = dom.querySelector("body");
+ body.appendChild(footer);
+ }
+ }
+
+ // Copyright 2018 The Distill Template Authors
+
+ const extractors = new Map([
+ ["ExtractFrontmatter", ExtractFrontmatter],
+ ["ExtractBibliography", ExtractBibliography],
+ ["ExtractCitations", ExtractCitations],
+ ]);
+
+ const transforms = new Map([
+ ["HTML", HTML],
+ ["makeStyleTag", makeStyleTag],
+ ["OptionalComponents", OptionalComponents],
+ ["TOC", TOC],
+ ["Byline", Byline],
+ ["Mathematics", Mathematics],
+ ["Meta", Meta],
+ ["Typeset", Typeset],
+ ["Polyfills", render],
+ ["CitationList", CitationList],
+ ["Reorder", render$1], // keep last
+ ]);
+
+ const distillTransforms = new Map([
+ ["DistillHeader", DistillHeader],
+ ["DistillAppendix", DistillAppendix],
+ ["DistillFooter", DistillFooter],
+ ]);
+
+ /* Exported functions */
+
+ function render$2(dom, data, verbose = true) {
+ let frontMatter;
+ if (data instanceof FrontMatter) {
+ frontMatter = data;
+ } else {
+ frontMatter = FrontMatter.fromObject(data);
+ }
+ // first, we collect static data from the dom
+ for (const [name, extract] of extractors.entries()) {
+ if (verbose) console.warn("Running extractor: " + name);
+ extract(dom, frontMatter, verbose);
+ }
+ // secondly we use it to transform parts of the dom
+ for (const [name, transform] of transforms.entries()) {
+ if (verbose) console.warn("Running transform: " + name);
+ // console.warn('Running transform: ', transform);
+ transform(dom, frontMatter, verbose);
+ }
+ dom.body.setAttribute("distill-prerendered", "");
+ // the function calling us can now use the transformed dom and filled data object
+ if (data instanceof FrontMatter);
+ else {
+ frontMatter.assignToObject(data);
+ }
+ }
+
+ function distillify(dom, data, verbose = true) {
+ // thirdly, we can use these additional transforms when publishing on the Distill website
+ for (const [name, transform] of distillTransforms.entries()) {
+ if (verbose) console.warn("Running distillify: ", name);
+ transform(dom, data, verbose);
+ }
+ }
+
+ function usesTemplateV2(dom) {
+ const tags = dom.querySelectorAll("script");
+ let usesV2 = undefined;
+ for (const tag of tags) {
+ const src = tag.src;
+ if (src.includes("template.v1.js")) {
+ usesV2 = false;
+ } else if (src.includes("template.v2.js")) {
+ usesV2 = true;
+ } else if (src.includes("template.")) {
+ throw new Error("Uses distill template, but unknown version?!");
+ }
+ }
+
+ if (usesV2 === undefined) {
+ throw new Error("Does not seem to use Distill template at all.");
+ } else {
+ return usesV2;
+ }
+ }
+
+ const testing = {
+ extractors: extractors,
+ transforms: transforms,
+ distillTransforms: distillTransforms,
+ };
+
+ exports.FrontMatter = FrontMatter;
+ exports.distillify = distillify;
+ exports.render = render$2;
+ exports.testing = testing;
+ exports.usesTemplateV2 = usesTemplateV2;
+
+ Object.defineProperty(exports, "__esModule", { value: true });
+});
+//# sourceMappingURL=transforms.v2.js.map
diff --git a/assets/js/masonry.js b/assets/js/masonry.js
index 358b9153..cb444dd2 100644
--- a/assets/js/masonry.js
+++ b/assets/js/masonry.js
@@ -1,12 +1,12 @@
-$(document).ready(function () {
- // Init Masonry
- var $grid = $(".grid").masonry({
- gutter: 10,
- horizontalOrder: true,
- itemSelector: ".grid-item",
- });
- // Layout Masonry after each image loads
- $grid.imagesLoaded().progress(function () {
- $grid.masonry("layout");
- });
-});
+$(document).ready(function () {
+ // Init Masonry
+ var $grid = $(".grid").masonry({
+ gutter: 10,
+ horizontalOrder: true,
+ itemSelector: ".grid-item",
+ });
+ // Layout Masonry after each image loads
+ $grid.imagesLoaded().progress(function () {
+ $grid.masonry("layout");
+ });
+});
diff --git a/assets/js/no_defer.js b/assets/js/no_defer.js
index 4428f9ea..b4d26c49 100644
--- a/assets/js/no_defer.js
+++ b/assets/js/no_defer.js
@@ -1,19 +1,19 @@
-// add bootstrap classes to tables
-$(document).ready(function () {
- $("table").each(function () {
- if (document.documentElement.getAttribute("data-theme") == "dark") {
- $(this).addClass("table-dark");
- } else {
- $(this).removeClass("table-dark");
- }
-
- // only select tables that are not inside an element with "news" (about page) or "card" (cv page) class
- if ($(this).parents('[class*="news"]').length == 0 && $(this).parents('[class*="card"]').length == 0 && $(this).parents("code").length == 0) {
- // make table use bootstrap-table
- $(this).attr("data-toggle", "table");
- // add some classes to make the table look better
- // $(this).addClass('table-sm');
- $(this).addClass("table-hover");
- }
- });
-});
+// add bootstrap classes to tables
+$(document).ready(function () {
+ $("table").each(function () {
+ if (document.documentElement.getAttribute("data-theme") == "dark") {
+ $(this).addClass("table-dark");
+ } else {
+ $(this).removeClass("table-dark");
+ }
+
+ // only select tables that are not inside an element with "news" (about page) or "card" (cv page) class
+ if ($(this).parents('[class*="news"]').length == 0 && $(this).parents('[class*="card"]').length == 0 && $(this).parents("code").length == 0) {
+ // make table use bootstrap-table
+ $(this).attr("data-toggle", "table");
+ // add some classes to make the table look better
+ // $(this).addClass('table-sm');
+ $(this).addClass("table-hover");
+ }
+ });
+});
diff --git a/assets/js/theme.js b/assets/js/theme.js
index ca75adba..034d7cb5 100644
--- a/assets/js/theme.js
+++ b/assets/js/theme.js
@@ -1,205 +1,205 @@
-// Has to be in the head tag, otherwise a flicker effect will occur.
-
-let toggleTheme = (theme) => {
- if (theme == "dark") {
- setTheme("light");
- } else {
- setTheme("dark");
- }
-};
-
-let setTheme = (theme) => {
- transTheme();
- setHighlight(theme);
- setGiscusTheme(theme);
-
- // if mermaid is not defined, do nothing
- if (typeof mermaid !== "undefined") {
- setMermaidTheme(theme);
- }
-
- // if diff2html is not defined, do nothing
- if (typeof Diff2HtmlUI !== "undefined") {
- setDiff2htmlTheme(theme);
- }
-
- // if echarts is not defined, do nothing
- if (typeof echarts !== "undefined") {
- setEchartsTheme(theme);
- }
-
- // if vegaEmbed is not defined, do nothing
- if (typeof vegaEmbed !== "undefined") {
- setVegaLiteTheme(theme);
- }
-
- if (theme) {
- document.documentElement.setAttribute("data-theme", theme);
-
- // Add class to tables.
- let tables = document.getElementsByTagName("table");
- for (let i = 0; i < tables.length; i++) {
- if (theme == "dark") {
- tables[i].classList.add("table-dark");
- } else {
- tables[i].classList.remove("table-dark");
- }
- }
-
- // Set jupyter notebooks themes.
- let jupyterNotebooks = document.getElementsByClassName("jupyter-notebook-iframe-container");
- for (let i = 0; i < jupyterNotebooks.length; i++) {
- let bodyElement = jupyterNotebooks[i].getElementsByTagName("iframe")[0].contentWindow.document.body;
- if (theme == "dark") {
- bodyElement.setAttribute("data-jp-theme-light", "false");
- bodyElement.setAttribute("data-jp-theme-name", "JupyterLab Dark");
- } else {
- bodyElement.setAttribute("data-jp-theme-light", "true");
- bodyElement.setAttribute("data-jp-theme-name", "JupyterLab Light");
- }
- }
- } else {
- document.documentElement.removeAttribute("data-theme");
- }
-
- localStorage.setItem("theme", theme);
-
- // Updates the background of medium-zoom overlay.
- if (typeof medium_zoom !== "undefined") {
- medium_zoom.update({
- background: getComputedStyle(document.documentElement).getPropertyValue("--global-bg-color") + "ee", // + 'ee' for trasparency.
- });
- }
-};
-
-let setHighlight = (theme) => {
- if (theme == "dark") {
- document.getElementById("highlight_theme_light").media = "none";
- document.getElementById("highlight_theme_dark").media = "";
- } else {
- document.getElementById("highlight_theme_dark").media = "none";
- document.getElementById("highlight_theme_light").media = "";
- }
-};
-
-let setGiscusTheme = (theme) => {
- function sendMessage(message) {
- const iframe = document.querySelector("iframe.giscus-frame");
- if (!iframe) return;
- iframe.contentWindow.postMessage({ giscus: message }, "https://giscus.app");
- }
-
- sendMessage({
- setConfig: {
- theme: theme,
- },
- });
-};
-
-let addMermaidZoom = (records, observer) => {
- var svgs = d3.selectAll(".mermaid svg");
- svgs.each(function () {
- var svg = d3.select(this);
- svg.html("" + svg.html() + " ");
- var inner = svg.select("g");
- var zoom = d3.zoom().on("zoom", function (event) {
- inner.attr("transform", event.transform);
- });
- svg.call(zoom);
- });
- observer.disconnect();
-};
-
-let setMermaidTheme = (theme) => {
- if (theme == "light") {
- // light theme name in mermaid is 'default'
- // https://mermaid.js.org/config/theming.html#available-themes
- theme = "default";
- }
-
- /* Re-render the SVG, based on https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_includes/mermaid.html */
- document.querySelectorAll(".mermaid").forEach((elem) => {
- // Get the code block content from previous element, since it is the mermaid code itself as defined in Markdown, but it is hidden
- let svgCode = elem.previousSibling.childNodes[0].innerHTML;
- elem.removeAttribute("data-processed");
- elem.innerHTML = svgCode;
- });
-
- mermaid.initialize({ theme: theme });
- window.mermaid.init(undefined, document.querySelectorAll(".mermaid"));
-
- const observable = document.querySelector(".mermaid svg");
- if (observable !== null) {
- var observer = new MutationObserver(addMermaidZoom);
- const observerOptions = { childList: true };
- observer.observe(observable, observerOptions);
- }
-};
-
-let setDiff2htmlTheme = (theme) => {
- document.querySelectorAll(".diff2html").forEach((elem) => {
- // Get the code block content from previous element, since it is the diff code itself as defined in Markdown, but it is hidden
- let textData = elem.previousSibling.childNodes[0].innerHTML;
- elem.innerHTML = "";
- const configuration = { colorScheme: theme, drawFileList: true, highlight: true, matching: "lines" };
- const diff2htmlUi = new Diff2HtmlUI(elem, textData, configuration);
- diff2htmlUi.draw();
- });
-};
-
-let setEchartsTheme = (theme) => {
- document.querySelectorAll(".echarts").forEach((elem) => {
- // Get the code block content from previous element, since it is the echarts code itself as defined in Markdown, but it is hidden
- let jsonData = elem.previousSibling.childNodes[0].innerHTML;
- echarts.dispose(elem);
-
- if (theme === "dark") {
- var chart = echarts.init(elem, "dark-fresh-cut");
- } else {
- var chart = echarts.init(elem);
- }
-
- chart.setOption(JSON.parse(jsonData));
- });
-};
-
-let setVegaLiteTheme = (theme) => {
- document.querySelectorAll(".vega-lite").forEach((elem) => {
- // Get the code block content from previous element, since it is the vega lite code itself as defined in Markdown, but it is hidden
- let jsonData = elem.previousSibling.childNodes[0].innerHTML;
- elem.innerHTML = "";
- if (theme === "dark") {
- vegaEmbed(elem, JSON.parse(jsonData), { theme: "dark" });
- } else {
- vegaEmbed(elem, JSON.parse(jsonData));
- }
- });
-};
-
-let transTheme = () => {
- document.documentElement.classList.add("transition");
- window.setTimeout(() => {
- document.documentElement.classList.remove("transition");
- }, 500);
-};
-
-let initTheme = (theme) => {
- if (theme == null || theme == "null") {
- const userPref = window.matchMedia;
- if (userPref && userPref("(prefers-color-scheme: dark)").matches) {
- theme = "dark";
- }
- }
-
- setTheme(theme);
-};
-
-initTheme(localStorage.getItem("theme"));
-
-document.addEventListener("DOMContentLoaded", function () {
- const mode_toggle = document.getElementById("light-toggle");
-
- mode_toggle.addEventListener("click", function () {
- toggleTheme(localStorage.getItem("theme"));
- });
-});
+// Has to be in the head tag, otherwise a flicker effect will occur.
+
+let toggleTheme = (theme) => {
+ if (theme == "dark") {
+ setTheme("light");
+ } else {
+ setTheme("dark");
+ }
+};
+
+let setTheme = (theme) => {
+ transTheme();
+ setHighlight(theme);
+ setGiscusTheme(theme);
+
+ // if mermaid is not defined, do nothing
+ if (typeof mermaid !== "undefined") {
+ setMermaidTheme(theme);
+ }
+
+ // if diff2html is not defined, do nothing
+ if (typeof Diff2HtmlUI !== "undefined") {
+ setDiff2htmlTheme(theme);
+ }
+
+ // if echarts is not defined, do nothing
+ if (typeof echarts !== "undefined") {
+ setEchartsTheme(theme);
+ }
+
+ // if vegaEmbed is not defined, do nothing
+ if (typeof vegaEmbed !== "undefined") {
+ setVegaLiteTheme(theme);
+ }
+
+ if (theme) {
+ document.documentElement.setAttribute("data-theme", theme);
+
+ // Add class to tables.
+ let tables = document.getElementsByTagName("table");
+ for (let i = 0; i < tables.length; i++) {
+ if (theme == "dark") {
+ tables[i].classList.add("table-dark");
+ } else {
+ tables[i].classList.remove("table-dark");
+ }
+ }
+
+ // Set jupyter notebooks themes.
+ let jupyterNotebooks = document.getElementsByClassName("jupyter-notebook-iframe-container");
+ for (let i = 0; i < jupyterNotebooks.length; i++) {
+ let bodyElement = jupyterNotebooks[i].getElementsByTagName("iframe")[0].contentWindow.document.body;
+ if (theme == "dark") {
+ bodyElement.setAttribute("data-jp-theme-light", "false");
+ bodyElement.setAttribute("data-jp-theme-name", "JupyterLab Dark");
+ } else {
+ bodyElement.setAttribute("data-jp-theme-light", "true");
+ bodyElement.setAttribute("data-jp-theme-name", "JupyterLab Light");
+ }
+ }
+ } else {
+ document.documentElement.removeAttribute("data-theme");
+ }
+
+ localStorage.setItem("theme", theme);
+
+ // Updates the background of medium-zoom overlay.
+ if (typeof medium_zoom !== "undefined") {
+ medium_zoom.update({
+ background: getComputedStyle(document.documentElement).getPropertyValue("--global-bg-color") + "ee", // + 'ee' for trasparency.
+ });
+ }
+};
+
+let setHighlight = (theme) => {
+ if (theme == "dark") {
+ document.getElementById("highlight_theme_light").media = "none";
+ document.getElementById("highlight_theme_dark").media = "";
+ } else {
+ document.getElementById("highlight_theme_dark").media = "none";
+ document.getElementById("highlight_theme_light").media = "";
+ }
+};
+
+let setGiscusTheme = (theme) => {
+ function sendMessage(message) {
+ const iframe = document.querySelector("iframe.giscus-frame");
+ if (!iframe) return;
+ iframe.contentWindow.postMessage({ giscus: message }, "https://giscus.app");
+ }
+
+ sendMessage({
+ setConfig: {
+ theme: theme,
+ },
+ });
+};
+
+let addMermaidZoom = (records, observer) => {
+ var svgs = d3.selectAll(".mermaid svg");
+ svgs.each(function () {
+ var svg = d3.select(this);
+ svg.html("" + svg.html() + " ");
+ var inner = svg.select("g");
+ var zoom = d3.zoom().on("zoom", function (event) {
+ inner.attr("transform", event.transform);
+ });
+ svg.call(zoom);
+ });
+ observer.disconnect();
+};
+
+let setMermaidTheme = (theme) => {
+ if (theme == "light") {
+ // light theme name in mermaid is 'default'
+ // https://mermaid.js.org/config/theming.html#available-themes
+ theme = "default";
+ }
+
+ /* Re-render the SVG, based on https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_includes/mermaid.html */
+ document.querySelectorAll(".mermaid").forEach((elem) => {
+ // Get the code block content from previous element, since it is the mermaid code itself as defined in Markdown, but it is hidden
+ let svgCode = elem.previousSibling.childNodes[0].innerHTML;
+ elem.removeAttribute("data-processed");
+ elem.innerHTML = svgCode;
+ });
+
+ mermaid.initialize({ theme: theme });
+ window.mermaid.init(undefined, document.querySelectorAll(".mermaid"));
+
+ const observable = document.querySelector(".mermaid svg");
+ if (observable !== null) {
+ var observer = new MutationObserver(addMermaidZoom);
+ const observerOptions = { childList: true };
+ observer.observe(observable, observerOptions);
+ }
+};
+
+let setDiff2htmlTheme = (theme) => {
+ document.querySelectorAll(".diff2html").forEach((elem) => {
+ // Get the code block content from previous element, since it is the diff code itself as defined in Markdown, but it is hidden
+ let textData = elem.previousSibling.childNodes[0].innerHTML;
+ elem.innerHTML = "";
+ const configuration = { colorScheme: theme, drawFileList: true, highlight: true, matching: "lines" };
+ const diff2htmlUi = new Diff2HtmlUI(elem, textData, configuration);
+ diff2htmlUi.draw();
+ });
+};
+
+let setEchartsTheme = (theme) => {
+ document.querySelectorAll(".echarts").forEach((elem) => {
+ // Get the code block content from previous element, since it is the echarts code itself as defined in Markdown, but it is hidden
+ let jsonData = elem.previousSibling.childNodes[0].innerHTML;
+ echarts.dispose(elem);
+
+ if (theme === "dark") {
+ var chart = echarts.init(elem, "dark-fresh-cut");
+ } else {
+ var chart = echarts.init(elem);
+ }
+
+ chart.setOption(JSON.parse(jsonData));
+ });
+};
+
+let setVegaLiteTheme = (theme) => {
+ document.querySelectorAll(".vega-lite").forEach((elem) => {
+ // Get the code block content from previous element, since it is the vega lite code itself as defined in Markdown, but it is hidden
+ let jsonData = elem.previousSibling.childNodes[0].innerHTML;
+ elem.innerHTML = "";
+ if (theme === "dark") {
+ vegaEmbed(elem, JSON.parse(jsonData), { theme: "dark" });
+ } else {
+ vegaEmbed(elem, JSON.parse(jsonData));
+ }
+ });
+};
+
+let transTheme = () => {
+ document.documentElement.classList.add("transition");
+ window.setTimeout(() => {
+ document.documentElement.classList.remove("transition");
+ }, 500);
+};
+
+let initTheme = (theme) => {
+ if (theme == null || theme == "null") {
+ const userPref = window.matchMedia;
+ if (userPref && userPref("(prefers-color-scheme: dark)").matches) {
+ theme = "dark";
+ }
+ }
+
+ setTheme(theme);
+};
+
+initTheme(localStorage.getItem("theme"));
+
+document.addEventListener("DOMContentLoaded", function () {
+ const mode_toggle = document.getElementById("light-toggle");
+
+ mode_toggle.addEventListener("click", function () {
+ toggleTheme(localStorage.getItem("theme"));
+ });
+});
diff --git a/assets/js/zoom.js b/assets/js/zoom.js
index da4ea3c7..299b8869 100644
--- a/assets/js/zoom.js
+++ b/assets/js/zoom.js
@@ -1,6 +1,6 @@
-// Initialize medium zoom.
-$(document).ready(function () {
- medium_zoom = mediumZoom("[data-zoomable]", {
- background: getComputedStyle(document.documentElement).getPropertyValue("--global-bg-color") + "ee", // + 'ee' for trasparency.
- });
-});
+// Initialize medium zoom.
+$(document).ready(function () {
+ medium_zoom = mediumZoom("[data-zoomable]", {
+ background: getComputedStyle(document.documentElement).getPropertyValue("--global-bg-color") + "ee", // + 'ee' for trasparency.
+ });
+});
diff --git a/assets/json/table_data.json b/assets/json/table_data.json
index 0e81f030..a44a088a 100644
--- a/assets/json/table_data.json
+++ b/assets/json/table_data.json
@@ -1,128 +1,128 @@
-[
- {
- "id": 0,
- "name": "Item 0",
- "price": "$0",
- "amount": 3
- },
- {
- "id": 1,
- "name": "Item 1",
- "price": "$1",
- "amount": 4
- },
- {
- "id": 2,
- "name": "Item 2",
- "price": "$2",
- "amount": 8
- },
- {
- "id": 3,
- "name": "Item 3",
- "price": "$3",
- "amount": 2
- },
- {
- "id": 4,
- "name": "Item 4",
- "price": "$4",
- "amount": 90
- },
- {
- "id": 5,
- "name": "Item 5",
- "price": "$5",
- "amount": 2
- },
- {
- "id": 6,
- "name": "Item 6",
- "price": "$6",
- "amount": 3
- },
- {
- "id": 7,
- "name": "Item 7",
- "price": "$7",
- "amount": 7
- },
- {
- "id": 8,
- "name": "Item 8",
- "price": "$8",
- "amount": 39
- },
- {
- "id": 9,
- "name": "Item 9",
- "price": "$9",
- "amount": 78
- },
- {
- "id": 10,
- "name": "Item 10",
- "price": "$10",
- "amount": 30
- },
- {
- "id": 11,
- "name": "Item 11",
- "price": "$11",
- "amount": 32
- },
- {
- "id": 12,
- "name": "Item 12",
- "price": "$12",
- "amount": 12
- },
- {
- "id": 13,
- "name": "Item 13",
- "price": "$13",
- "amount": 76
- },
- {
- "id": 14,
- "name": "Item 14",
- "price": "$14",
- "amount": 10
- },
- {
- "id": 15,
- "name": "Item 15",
- "price": "$15",
- "amount": 9
- },
- {
- "id": 16,
- "name": "Item 16",
- "price": "$16",
- "amount": 8
- },
- {
- "id": 17,
- "name": "Item 17",
- "price": "$17",
- "amount": 1
- },
- {
- "id": 18,
- "name": "Item 18",
- "price": "$18",
- "amount": 99
- },
- {
- "id": 19,
- "name": "Item 19",
- "price": "$19",
- "amount": 100
- },
- {
- "id": 20,
- "name": "Item 20",
- "price": "$20",
- "amount": 109
- }
-]
+[
+ {
+ "id": 0,
+ "name": "Item 0",
+ "price": "$0",
+ "amount": 3
+ },
+ {
+ "id": 1,
+ "name": "Item 1",
+ "price": "$1",
+ "amount": 4
+ },
+ {
+ "id": 2,
+ "name": "Item 2",
+ "price": "$2",
+ "amount": 8
+ },
+ {
+ "id": 3,
+ "name": "Item 3",
+ "price": "$3",
+ "amount": 2
+ },
+ {
+ "id": 4,
+ "name": "Item 4",
+ "price": "$4",
+ "amount": 90
+ },
+ {
+ "id": 5,
+ "name": "Item 5",
+ "price": "$5",
+ "amount": 2
+ },
+ {
+ "id": 6,
+ "name": "Item 6",
+ "price": "$6",
+ "amount": 3
+ },
+ {
+ "id": 7,
+ "name": "Item 7",
+ "price": "$7",
+ "amount": 7
+ },
+ {
+ "id": 8,
+ "name": "Item 8",
+ "price": "$8",
+ "amount": 39
+ },
+ {
+ "id": 9,
+ "name": "Item 9",
+ "price": "$9",
+ "amount": 78
+ },
+ {
+ "id": 10,
+ "name": "Item 10",
+ "price": "$10",
+ "amount": 30
+ },
+ {
+ "id": 11,
+ "name": "Item 11",
+ "price": "$11",
+ "amount": 32
+ },
+ {
+ "id": 12,
+ "name": "Item 12",
+ "price": "$12",
+ "amount": 12
+ },
+ {
+ "id": 13,
+ "name": "Item 13",
+ "price": "$13",
+ "amount": 76
+ },
+ {
+ "id": 14,
+ "name": "Item 14",
+ "price": "$14",
+ "amount": 10
+ },
+ {
+ "id": 15,
+ "name": "Item 15",
+ "price": "$15",
+ "amount": 9
+ },
+ {
+ "id": 16,
+ "name": "Item 16",
+ "price": "$16",
+ "amount": 8
+ },
+ {
+ "id": 17,
+ "name": "Item 17",
+ "price": "$17",
+ "amount": 1
+ },
+ {
+ "id": 18,
+ "name": "Item 18",
+ "price": "$18",
+ "amount": 99
+ },
+ {
+ "id": 19,
+ "name": "Item 19",
+ "price": "$19",
+ "amount": 100
+ },
+ {
+ "id": 20,
+ "name": "Item 20",
+ "price": "$20",
+ "amount": 109
+ }
+]
diff --git a/docker-compose-slim.yml b/docker-compose-slim.yml
index d305d726..43f6ebd0 100644
--- a/docker-compose-slim.yml
+++ b/docker-compose-slim.yml
@@ -1,11 +1,11 @@
-version: "3"
-# this file uses prebuilt image in dockerhub
-services:
- jekyll:
- image: amirpourmand/al-folio:slim
- build: .
- ports:
- - 8080:8080
- - 35729:35729
- volumes:
- - .:/srv/jekyll
+version: "3"
+# this file uses prebuilt image in dockerhub
+services:
+ jekyll:
+ image: amirpourmand/al-folio:slim
+ build: .
+ ports:
+ - 8080:8080
+ - 35729:35729
+ volumes:
+ - .:/srv/jekyll
diff --git a/docker-compose.yml b/docker-compose.yml
index 3054e97a..71db9b6a 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,11 +1,11 @@
-version: "3"
-# this file uses prebuilt image in dockerhub
-services:
- jekyll:
- image: georgegca/multi-language-al-folio:latest
- build: .
- ports:
- - 8080:8080
- - 35729:35729
- volumes:
- - .:/srv/jekyll
+version: "3"
+# this file uses prebuilt image in dockerhub
+services:
+ jekyll:
+ image: georgegca/multi-language-al-folio:latest
+ build: .
+ ports:
+ - 8080:8080
+ - 35729:35729
+ volumes:
+ - .:/srv/jekyll
diff --git a/package-lock.json b/package-lock.json
index 3e816ec9..1317af27 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,94 +1,69 @@
-{
- "name": "multi-language-al-folio",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "devDependencies": {
- "@shopify/prettier-plugin-liquid": "1.4.0",
- "prettier": "^3.1.1"
- }
- },
- "node_modules/@shopify/liquid-html-parser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@shopify/liquid-html-parser/-/liquid-html-parser-2.0.0.tgz",
- "integrity": "sha512-1jqA50g2/WFTnnBnaiaNVammkJLIkt+z2QU2stFN2ljnYR28ln3q0VqlXqGNS0uRojEFaVNYrJl95IzAmjP5bQ==",
- "dev": true,
- "dependencies": {
- "line-column": "^1.0.2",
- "ohm-js": "^16.3.0"
- }
- },
- "node_modules/@shopify/prettier-plugin-liquid": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@shopify/prettier-plugin-liquid/-/prettier-plugin-liquid-1.4.0.tgz",
- "integrity": "sha512-Fd0QiPi0bpSapUG0plri1+bLew9j//Q0MFKkBjkIG4RTJC76dycVysf5Dy7JvbvIjSJ4YFxaT0PBW5v9O7JItQ==",
- "dev": true,
- "dependencies": {
- "@shopify/liquid-html-parser": "^2.0.0",
- "html-styles": "^1.0.0"
- },
- "peerDependencies": {
- "prettier": "^2.0.0 || ^3.0.0"
- }
- },
- "node_modules/html-styles": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/html-styles/-/html-styles-1.0.0.tgz",
- "integrity": "sha512-cDl5dcj73oI4Hy0DSUNh54CAwslNLJRCCoO+RNkVo+sBrjA/0+7E/xzvj3zH/GxbbBLGJhE0hBe1eg+0FINC6w==",
- "dev": true
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "node_modules/isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
- "dev": true,
- "dependencies": {
- "isarray": "1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/line-column": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz",
- "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==",
- "dev": true,
- "dependencies": {
- "isarray": "^1.0.0",
- "isobject": "^2.0.0"
- }
- },
- "node_modules/ohm-js": {
- "version": "16.6.0",
- "resolved": "https://registry.npmjs.org/ohm-js/-/ohm-js-16.6.0.tgz",
- "integrity": "sha512-X9P4koSGa7swgVQ0gt71UCYtkAQGOjciJPJAz74kDxWt8nXbH5HrDOQG6qBDH7SR40ktNv4x61BwpTDE9q4lRA==",
- "dev": true,
- "engines": {
- "node": ">=0.12.1"
- }
- },
- "node_modules/prettier": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
- "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
- "dev": true,
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- }
- }
-}
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@shopify/liquid-html-parser": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@shopify/liquid-html-parser/-/liquid-html-parser-2.0.3.tgz",
+ "integrity": "sha512-aIkZ5TJWG7/ztd1sZm5XNpBNTG3B+Q0gv3WN/QahmNQzm2wmKYSHiRLOA8JALAnOGTmH0uqOJ7jzdqoATcZSxw==",
+ "dev": true,
+ "requires": {
+ "line-column": "^1.0.2",
+ "ohm-js": "^16.3.0"
+ }
+ },
+ "@shopify/prettier-plugin-liquid": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@shopify/prettier-plugin-liquid/-/prettier-plugin-liquid-1.4.0.tgz",
+ "integrity": "sha512-Fd0QiPi0bpSapUG0plri1+bLew9j//Q0MFKkBjkIG4RTJC76dycVysf5Dy7JvbvIjSJ4YFxaT0PBW5v9O7JItQ==",
+ "dev": true,
+ "requires": {
+ "@shopify/liquid-html-parser": "^2.0.0",
+ "html-styles": "^1.0.0"
+ }
+ },
+ "html-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/html-styles/-/html-styles-1.0.0.tgz",
+ "integrity": "sha512-cDl5dcj73oI4Hy0DSUNh54CAwslNLJRCCoO+RNkVo+sBrjA/0+7E/xzvj3zH/GxbbBLGJhE0hBe1eg+0FINC6w==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "line-column": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz",
+ "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==",
+ "dev": true,
+ "requires": {
+ "isarray": "^1.0.0",
+ "isobject": "^2.0.0"
+ }
+ },
+ "ohm-js": {
+ "version": "16.6.0",
+ "resolved": "https://registry.npmjs.org/ohm-js/-/ohm-js-16.6.0.tgz",
+ "integrity": "sha512-X9P4koSGa7swgVQ0gt71UCYtkAQGOjciJPJAz74kDxWt8nXbH5HrDOQG6qBDH7SR40ktNv4x61BwpTDE9q4lRA==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz",
+ "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
index 642eea2e..d6511153 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
-{
- "devDependencies": {
- "@shopify/prettier-plugin-liquid": "1.4.0",
- "prettier": "^3.1.1"
- }
-}
+{
+ "devDependencies": {
+ "@shopify/prettier-plugin-liquid": "^1.4.0",
+ "prettier": "^3.3.1"
+ }
+}
diff --git a/purgecss.config.js b/purgecss.config.js
index 33d0d459..2add9d2f 100644
--- a/purgecss.config.js
+++ b/purgecss.config.js
@@ -1,6 +1,6 @@
-module.exports = {
- content: ["_site/**/*.html", "_site/**/*.js"],
- css: ["_site/assets/css/*.css"],
- output: "_site/assets/css/",
- skippedContentGlobs: ["_site/assets/**/*.html"],
-};
+module.exports = {
+ content: ["_site/**/*.html", "_site/**/*.js"],
+ css: ["_site/assets/css/*.css"],
+ output: "_site/assets/css/",
+ skippedContentGlobs: ["_site/assets/**/*.html"],
+};