Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wangchucheng/hugo-eureka.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWang Chucheng <me@wangchucheng.com>2020-12-27 21:06:11 +0300
committerWang Chucheng <me@wangchucheng.com>2020-12-27 21:06:11 +0300
commitc33985a935b5bf5706bed27bc112f700df2f2903 (patch)
tree431d55abb64e7d125b9056475e31abc26ede6a33
parent3023aca70db61f681db293c21341769de8111a59 (diff)
feat: widget system for configuring homepagev0.4.0
BREAKING CHANGE: Param 'hero' in params.toml is deprecated. BREAKING CHANGE: Param 'icon_pack' in %q is deprecated. Use 'iconPack'. BREAKING CHANGE: 'doc_list' in doc layout is deprecated. Use 'doc-list'. Closes #11
-rw-r--r--README.md9
-rw-r--r--README.zh.md9
-rw-r--r--archetypes/authors/_index.md4
-rw-r--r--archetypes/docs/_index.md2
-rw-r--r--archetypes/widgets/about.md46
-rw-r--r--archetypes/widgets/blank.html30
-rw-r--r--archetypes/widgets/pages.md37
-rw-r--r--archetypes/widgets/vintage.md35
-rw-r--r--assets/css/tailwind.config.js6
-rw-r--r--assets/js/eureka.js2
-rw-r--r--data/eureka.toml1
-rw-r--r--exampleSite/config/_default/menus.toml2
-rw-r--r--exampleSite/config/_default/params.toml6
-rw-r--r--exampleSite/content/about.md28
-rw-r--r--exampleSite/content/authors/example-author/_index.md8
-rw-r--r--exampleSite/content/authors/example-author/avatar.jpgbin129894 -> 0 bytes
-rw-r--r--exampleSite/content/authors/hugo-authors/_index.md6
-rw-r--r--exampleSite/content/docs/_index.md2
-rw-r--r--exampleSite/content/homepage/about.md72
-rw-r--r--exampleSite/content/homepage/blank.html34
-rw-r--r--exampleSite/content/homepage/index.md3
-rw-r--r--exampleSite/content/homepage/pages.md37
-rw-r--r--exampleSite/content/homepage/vintage.md34
-rw-r--r--images/screenshot.pngbin85222 -> 95593 bytes
-rw-r--r--images/tn.pngbin41571 -> 48227 bytes
-rw-r--r--layouts/_default/baseof.html6
-rw-r--r--layouts/_default/list.html8
-rw-r--r--layouts/_default/single.html16
-rw-r--r--layouts/authors/list.html56
-rw-r--r--layouts/docs/doc-list.html3
-rw-r--r--layouts/docs/doc_list.html22
-rw-r--r--layouts/docs/list.html2
-rw-r--r--layouts/docs/single.html2
-rw-r--r--layouts/index.html200
-rw-r--r--layouts/partials/comment.html4
-rw-r--r--layouts/partials/components/doc-layout.html (renamed from layouts/partials/doc_layout.html)52
-rw-r--r--layouts/partials/components/doc-list.html12
-rw-r--r--layouts/partials/components/masonry.html (renamed from layouts/partials/masonry.html)2
-rw-r--r--layouts/partials/components/opengraph.html (renamed from layouts/partials/opengraph.html)8
-rw-r--r--layouts/partials/components/post-author.html (renamed from layouts/partials/post_author.html)5
-rw-r--r--layouts/partials/components/post-edit.html (renamed from layouts/partials/post_edit.html)4
-rw-r--r--layouts/partials/components/post-footer.html (renamed from layouts/partials/post_footer.html)0
-rw-r--r--layouts/partials/components/post-metadata.html (renamed from layouts/partials/post_metadata.html)2
-rw-r--r--layouts/partials/components/post-series.html (renamed from layouts/partials/post_series.html)0
-rw-r--r--layouts/partials/components/post-tags.html (renamed from layouts/partials/post_tags.html)0
-rw-r--r--layouts/partials/components/post-toc.html (renamed from layouts/partials/post_toc.html)0
-rw-r--r--layouts/partials/components/schema-node.html (renamed from layouts/partials/schema_node.html)4
-rw-r--r--layouts/partials/components/schema-page.html (renamed from layouts/partials/schema_page.html)10
-rw-r--r--layouts/partials/components/schema.html (renamed from layouts/partials/schema.html)15
-rw-r--r--layouts/partials/components/summary-card.html3
-rw-r--r--layouts/partials/components/summary-list-card.html5
-rw-r--r--layouts/partials/components/summary-list-masonry.html15
-rw-r--r--layouts/partials/components/summary-list-plain.html8
-rw-r--r--layouts/partials/components/summary-masonry.html17
-rw-r--r--layouts/partials/components/summary-plain.html12
-rw-r--r--layouts/partials/custom-head.html (renamed from layouts/partials/custom_head.html)0
-rw-r--r--layouts/partials/get_featured.html9
-rw-r--r--layouts/partials/head.html44
-rw-r--r--layouts/partials/horizontal_summary.html43
-rw-r--r--layouts/partials/stacked_summary.html17
-rw-r--r--layouts/partials/utils/get-featured.html9
-rw-r--r--layouts/partials/utils/get-image.html (renamed from layouts/partials/get_image.html)0
-rw-r--r--layouts/partials/utils/get-summary.html29
-rw-r--r--layouts/partials/utils/get-video.html (renamed from layouts/partials/get_video.html)0
-rw-r--r--layouts/partials/utils/hyphenate.html1
-rw-r--r--layouts/partials/utils/standardize-classes.html4
-rw-r--r--layouts/partials/widgets/about.html13
-rw-r--r--layouts/partials/widgets/blank.html1
-rw-r--r--layouts/partials/widgets/details.html3
-rw-r--r--layouts/partials/widgets/pages.html49
-rw-r--r--layouts/partials/widgets/vintage.html21
-rw-r--r--resources/_gen/assets/css/css/eureka.css_fc3f76d7bee2760c3a903059afc3d9b2.content2
72 files changed, 887 insertions, 264 deletions
diff --git a/README.md b/README.md
index 4b3090f..751d85f 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,8 @@ Read [Getting Started](https://www.wangchucheng.com/en/docs/eureka/getting-start
## View Document
- **[Getting Started](https://www.wangchucheng.com/en/docs/eureka/getting-started/)**: In [Getting Started](https://www.wangchucheng.com/en/docs/eureka/getting-started/) you will learn how to quickly build a Hugo site with Eureka.
-- **[Content Management](https://www.wangchucheng.com/en/docs/eureka/content-management/)**: In [Getting Started](https://www.wangchucheng.com/en/docs/eureka/getting-started/), I believe you have successfully run the Hugo site using Eureka. Next we will add some content. Content Management will lead you to understand site content structure and editing skills.
-- **[Customize Eureka](https://www.wangchucheng.com/en/docs/eureka/customize-eureka/)**: In [Content Management](https://www.wangchucheng.com/en/docs/eureka/content-management/), you have already learned about all kinds of content of Eureka. Next, we will introduce Eureka's customization options. [Customize Eureka](https://www.wangchucheng.com/en/docs/eureka/customize-eureka/) will lead you to understand how Eureka is configured and its options.
-- **[Multilingual Mode](https://www.wangchucheng.com/en/docs/eureka/multilingual-mode/)**: In addition to [Content Management](https://www.wangchucheng.com/en/docs/eureka/content-management/) and [Customize Eureka](https://www.wangchucheng.com/en/docs/eureka/customize-eureka/) described above, Eureka also supports [Multilingual Mode](https://www.wangchucheng.com/en/docs/eureka/multilingual-mode/). [Multilingual Mode](https://www.wangchucheng.com/en/docs/eureka/multilingual-mode/) will lead you to understand how to build a multilingual site.
-- **[Update Eureka](https://www.wangchucheng.com/en/docs/eureka/update-eureka/)**: [Update Eureka](https://www.wangchucheng.com/en/docs/eureka/update-eureka/) will introduce different ways to update Eureka. \ No newline at end of file
+- **[Homepage Configuration](https://www.wangchucheng.com/en/docs/eureka/homepage-configuration/)**: In [Getting Started](https://www.wangchucheng.com/en/docs/eureka/getting-started/), I believe you have successfully run the Hugo site using Eureka. In [Homepage Configuration](https://www.wangchucheng.com/en/docs/eureka/homepage-configuration/) you will learn how to customize the website homepage.
+- **[Content Management](https://www.wangchucheng.com/en/docs/eureka/content-management/)**: You have configured the website homepage in [Homepage Configuration](https://www.wangchucheng.com/en/docs/eureka/homepage-configuration/). Next we will add some content. Content Management will lead you to understand site content structure and editing skills.
+- **[Customize Eureka](https://www.wangchucheng.com/en/docs/eureka/customization/)**: In [Content Management](https://www.wangchucheng.com/en/docs/eureka/content-management/), you have already learned about all kinds of content of Eureka. Next, we will introduce Eureka's customization options. [Customize Eureka](https://www.wangchucheng.com/en/docs/eureka/customization/) will lead you to understand how Eureka is configured and its options.
+- **[Multilingual Mode](https://www.wangchucheng.com/en/docs/eureka/multilingual-mode/)**: In addition to [Content Management](https://www.wangchucheng.com/en/docs/eureka/content-management/) and [Customize Eureka](https://www.wangchucheng.com/en/docs/eureka/customization/) described above, Eureka also supports [Multilingual Mode](https://www.wangchucheng.com/en/docs/eureka/multilingual-mode/). [Multilingual Mode](https://www.wangchucheng.com/en/docs/eureka/multilingual-mode/) will lead you to understand how to build a multilingual site.
+- **[Update Eureka](https://www.wangchucheng.com/en/docs/eureka/update/)**: [Update Eureka](https://www.wangchucheng.com/en/docs/eureka/update/) will introduce different ways to update Eureka. \ No newline at end of file
diff --git a/README.zh.md b/README.zh.md
index 0a1b68d..c937e80 100644
--- a/README.zh.md
+++ b/README.zh.md
@@ -17,7 +17,8 @@ Eureka致力于为[Hugo](https://gohugo.io/)提供一个优雅,功能丰富且
## 阅读文档
- **[入门](https://www.wangchucheng.com/zh/docs/eureka/getting-started/)**:在[入门](https://www.wangchucheng.com/zh/docs/eureka/getting-started/)中你将了解到如何快速搭建一个Eureka主题的Hugo网站。
-- **[内容管理](https://www.wangchucheng.com/zh/docs/eureka/content-management/)**:在[入门](https://www.wangchucheng.com/zh/docs/eureka/getting-started/)中,相信你已经成功运行了使用Eureka主题的Hugo网站。接下来我们将添加一些内容。[内容管理](https://www.wangchucheng.com/zh/docs/eureka/content-management/)将带领你了解网站内容结构及编辑技巧。
-- **[定制Eureka](https://www.wangchucheng.com/zh/docs/eureka/customize-eureka/)**:在[内容管理](https://www.wangchucheng.com/zh/docs/eureka/content-management/)中,你已经了解了Eureka的各类内容。接下来我们将介绍Eureka的定制化选项。[定制Eureka](https://www.wangchucheng.com/zh/docs/eureka/customize-eureka/)将带领你了解Eureka的配置方式及其选项。
-- **[多语言模式](https://www.wangchucheng.com/zh/docs/eureka/multilingual-mode/)**:除了前文的[内容管理](https://www.wangchucheng.com/zh/docs/eureka/content-management/)以及[定制Eureka](https://www.wangchucheng.com/zh/docs/eureka/customize-eureka/),Eureka也支持[多语言模式](https://www.wangchucheng.com/zh/docs/eureka/multilingual-mode/)。[多语言模式](https://www.wangchucheng.com/zh/docs/eureka/multilingual-mode/)将带领你了解如何构建一个多语言网站。
-- **[更新Eureka](https://www.wangchucheng.com/zh/docs/eureka/update-eureka/)**:[更新Eureka](https://www.wangchucheng.com/zh/docs/eureka/update-eureka/)将介绍通过不同方式更新Eureka的方法。 \ No newline at end of file
+- **[主页配置](https://www.wangchucheng.com/zh/docs/eureka/homepage-configuration)**:在[入门](https://www.wangchucheng.com/zh/docs/eureka/getting-started)中,相信你已经成功运行了使用Eureka主题的Hugo网站。在[主页配置](https://www.wangchucheng.com/zh/docs/eureka/homepage-configuration)中你将了解如何自定义网站主页。
+- **[内容管理](https://www.wangchucheng.com/zh/docs/eureka/content-management)**:在[主页配置](https://www.wangchucheng.com/zh/docs/eureka/homepage-configuration)中你已经配置好了主页样式。接下来我们将添加一些内容。[内容管理](https://www.wangchucheng.com/zh/docs/eureka/content-management)将带领你了解网站内容结构及编辑技巧。
+- **[定制Eureka](https://www.wangchucheng.com/zh/docs/eureka/customization/)**:在[内容管理](https://www.wangchucheng.com/zh/docs/eureka/content-management/)中,你已经了解了Eureka的各类内容。接下来我们将介绍Eureka的定制化选项。[定制Eureka](https://www.wangchucheng.com/zh/docs/eureka/customization/)将带领你了解Eureka的配置方式及其选项。
+- **[多语言模式](https://www.wangchucheng.com/zh/docs/eureka/multilingual-mode/)**:除了前文的[内容管理](https://www.wangchucheng.com/zh/docs/eureka/content-management/)以及[定制Eureka](https://www.wangchucheng.com/zh/docs/eureka/customization/),Eureka也支持[多语言模式](https://www.wangchucheng.com/zh/docs/eureka/multilingual-mode/)。[多语言模式](https://www.wangchucheng.com/zh/docs/eureka/multilingual-mode/)将带领你了解如何构建一个多语言网站。
+- **[更新Eureka](https://www.wangchucheng.com/zh/docs/eureka/update/)**:[更新Eureka](https://www.wangchucheng.com/zh/docs/eureka/update/)将介绍通过不同方式更新Eureka的方法。 \ No newline at end of file
diff --git a/archetypes/authors/_index.md b/archetypes/authors/_index.md
index 383f7aa..49103fa 100644
--- a/archetypes/authors/_index.md
+++ b/archetypes/authors/_index.md
@@ -11,9 +11,9 @@ avatar = ""
# Check the available icons on https://fontawesome.com/.
# You can get similar results like this <i class="fab fa-github"></i> after searching.
-# Then icon is github and icon_pack is fab for this case.
+# Then icon is github and iconPack is fab for this case.
[[social]]
icon = ""
- icon_pack = ""
+ iconPack = ""
url = ""
+++ \ No newline at end of file
diff --git a/archetypes/docs/_index.md b/archetypes/docs/_index.md
index 0b3d6bd..dd1c906 100644
--- a/archetypes/docs/_index.md
+++ b/archetypes/docs/_index.md
@@ -1,4 +1,4 @@
+++
title = "Docs"
-layout = "doc_list" #Do not modify
+layout = "doc-list" #Do not modify
+++ \ No newline at end of file
diff --git a/archetypes/widgets/about.md b/archetypes/widgets/about.md
new file mode 100644
index 0000000..5ec465c
--- /dev/null
+++ b/archetypes/widgets/about.md
@@ -0,0 +1,46 @@
++++
+title = "{{ replace .Name "-" " " | title }}"
+weight = 1
+draft = false
+
+role = ""
+bio = ""
+avatar = ""
+
+[organization]
+ name = ""
+ url = ""
+
+# Check the available icons on https://fontawesome.com/.
+# You can get similar results like this <i class="fab fa-github"></i> after searching.
+# Then icon is github and iconPack is fab for this case.
+[[social]]
+ icon = ""
+ iconPack = ""
+ url = ""
+
+[widget]
+ handler = "about"
+
+ # Options: sm, md, lg and xl. Default is md.
+ width = ""
+
+ [widget.sidebar]
+ # Options: left and right. Leave blank to hide.
+ position = ""
+ # Options: sm, md, lg and xl. Default is md.
+ scale = ""
+
+ [widget.background]
+ # Options: primary, secondary, tertiary or any valid color value. Default is primary.
+ color = ""
+
+ # See TODO
+ image = ""
+ # Options: auto, cover and contain. Default is auto.
+ size = ""
+ # Options: center, top, right, bottom, left.
+ position = ""
+ # Options: fixed, local, scroll.
+ attachment = ""
++++ \ No newline at end of file
diff --git a/archetypes/widgets/blank.html b/archetypes/widgets/blank.html
new file mode 100644
index 0000000..1c9e237
--- /dev/null
+++ b/archetypes/widgets/blank.html
@@ -0,0 +1,30 @@
++++
+title = "{{ replace .Name "-" " " | title }}"
+weight = 1
+draft = false
+
+[widget]
+ handler = "blank"
+
+ # Options: sm, md, lg and xl. Default is md.
+ width = ""
+
+ [widget.sidebar]
+ # Options: left and right. Leave blank to hide.
+ position = ""
+ # Options: sm, md, lg and xl. Default is md.
+ scale = ""
+
+ [widget.background]
+ # Options: primary, secondary, tertiary or any valid color value. Default is primary.
+ color = ""
+
+ # See TODO
+ image = ""
+ # Options: auto, cover and contain. Default is auto.
+ size = ""
+ # Options: center, top, right, bottom, left.
+ position = ""
+ # Options: fixed, local, scroll.
+ attachment = ""
++++ \ No newline at end of file
diff --git a/archetypes/widgets/pages.md b/archetypes/widgets/pages.md
new file mode 100644
index 0000000..e0ca162
--- /dev/null
+++ b/archetypes/widgets/pages.md
@@ -0,0 +1,37 @@
++++
+title = "{{ replace .Name "-" " " | title }}"
+weight = 1
+draft = false
+
+# Section you want to display
+section = "posts"
+# Pages count
+count = 5
+# Options: card, plain and masonry.
+style = "card"
+
+[widget]
+ handler = "pages"
+
+ # Options: sm, md, lg and xl. Default is md.
+ width = ""
+
+ [widget.sidebar]
+ # Options: left and right. Leave blank to hide.
+ position = ""
+ # Options: sm, md, lg and xl. Default is md.
+ scale = ""
+
+ [widget.background]
+ # Options: primary, secondary, tertiary or any valid color value. Default is primary.
+ color = ""
+
+ # See TODO
+ image = ""
+ # Options: auto, cover and contain. Default is auto.
+ size = ""
+ # Options: center, top, right, bottom, left.
+ position = ""
+ # Options: fixed, local, scroll.
+ attachment = ""
++++ \ No newline at end of file
diff --git a/archetypes/widgets/vintage.md b/archetypes/widgets/vintage.md
new file mode 100644
index 0000000..99307ae
--- /dev/null
+++ b/archetypes/widgets/vintage.md
@@ -0,0 +1,35 @@
++++
+title = "{{ replace .Name "-" " " | title }}"
+weight = 1
+draft = false
+
+slogan = ""
+# See TODO
+imgLeft = ""
+imgRight = ""
+
+[widget]
+ handler = "vintage"
+
+ # Options: sm, md, lg and xl. Default is md.
+ width = ""
+
+ [widget.sidebar]
+ # Options: left and right. Leave blank to hide.
+ position = ""
+ # Options: sm, md, lg and xl. Default is md.
+ scale = ""
+
+ [widget.background]
+ # Options: primary, secondary, tertiary or any valid color value. Default is primary.
+ color = ""
+
+ # See TODO
+ image = ""
+ # Options: auto, cover and contain. Default is auto.
+ size = ""
+ # Options: center, top, right, bottom, left.
+ position = ""
+ # Options: fixed, local, scroll.
+ attachment = ""
++++ \ No newline at end of file
diff --git a/assets/css/tailwind.config.js b/assets/css/tailwind.config.js
index 7e28272..cb8a45d 100644
--- a/assets/css/tailwind.config.js
+++ b/assets/css/tailwind.config.js
@@ -17,6 +17,12 @@ module.exports = {
'mono': ['SFMono-Regular', 'Menlo'],
},
extend: {
+ height: {
+ '(screen-16)': 'calc(100vh - 4rem)',
+ '96': '24rem',
+ '128': '32rem',
+ '160': '40rem',
+ },
minHeight: {
'16': '4rem',
},
diff --git a/assets/js/eureka.js b/assets/js/eureka.js
index bcc3d14..469a34d 100644
--- a/assets/js/eureka.js
+++ b/assets/js/eureka.js
@@ -112,7 +112,7 @@ function resizeInstance(instance) {
resizeGridItem(item);
}
-//color schema
+//color components/schema
function getcolorscheme() {
let storageColorScheme = localStorage.getItem("lightDarkMode")
let element = document.getElementById('lightDarkMode');
diff --git a/data/eureka.toml b/data/eureka.toml
new file mode 100644
index 0000000..e31d26f
--- /dev/null
+++ b/data/eureka.toml
@@ -0,0 +1 @@
+version = "0.4.0" \ No newline at end of file
diff --git a/exampleSite/config/_default/menus.toml b/exampleSite/config/_default/menus.toml
index a18c35b..4bb7e2f 100644
--- a/exampleSite/config/_default/menus.toml
+++ b/exampleSite/config/_default/menus.toml
@@ -1,6 +1,6 @@
[[main]]
name = "About"
- url = "/about/"
+ url = "#about"
weight = 1
[[main]]
diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml
index 90ca210..1df2db0 100644
--- a/exampleSite/config/_default/params.toml
+++ b/exampleSite/config/_default/params.toml
@@ -18,12 +18,6 @@ icon = "images/icon.png"
publisherName = "C. Wang"
publisherLogo = ""
-[hero]
- slogan = "We are all in the gutter, but some of us are looking at the stars."
- # Specify the image name in `assets/images/` folder.
- imgLeft = "images/hero-left.jpg"
- imgRight = "images/hero-right.jpg"
-
[math]
handler = "katex"
diff --git a/exampleSite/content/about.md b/exampleSite/content/about.md
deleted file mode 100644
index a412806..0000000
--- a/exampleSite/content/about.md
+++ /dev/null
@@ -1,28 +0,0 @@
-+++
-title = "About"
-description = "Hugo, the world’s fastest framework for building websites"
-date = "2019-02-28"
-aliases = ["about-us","about-hugo","contact"]
-author = "Hugo Authors"
-+++
-
-Written in Go, Hugo is an open source static site generator available under the [Apache Licence 2.0.](https://github.com/gohugoio/hugo/blob/master/LICENSE) Hugo supports TOML, YAML and JSON data file types, Markdown and HTML content files and uses shortcodes to add rich content. Other notable features are taxonomies, multilingual mode, image processing, custom output formats, HTML/CSS/JS minification and support for Sass SCSS workflows.
-
-Hugo makes use of a variety of open source projects including:
-
-* https://github.com/yuin/goldmark
-* https://github.com/alecthomas/chroma
-* https://github.com/muesli/smartcrop
-* https://github.com/spf13/cobra
-* https://github.com/spf13/viper
-
-Hugo is ideal for blogs, corporate websites, creative portfolios, online magazines, single page applications or even a website with thousands of pages.
-
-Hugo is for people who want to hand code their own website without worrying about setting up complicated runtimes, dependencies and databases.
-
-Websites built with Hugo are extremelly fast, secure and can be deployed anywhere including, AWS, GitHub Pages, Heroku, Netlify and any other hosting provider.
-
-Learn more and contribute on [GitHub](https://github.com/gohugoio).
-
-
-
diff --git a/exampleSite/content/authors/example-author/_index.md b/exampleSite/content/authors/example-author/_index.md
index 093095b..5c0ac29 100644
--- a/exampleSite/content/authors/example-author/_index.md
+++ b/exampleSite/content/authors/example-author/_index.md
@@ -3,7 +3,7 @@
title = "Example Author"
role = "Example Role"
bio = "Aenean vel bibendum quam. Aliquam at mollis quam. Proin efficitur."
-avatar = "images/avatar.jpg"
+avatar = "images/icon.png"
[organization]
name = "Example Organization"
@@ -11,17 +11,17 @@ avatar = "images/avatar.jpg"
[[social]]
icon = "envelope"
- icon_pack = "fas"
+ iconPack = "fas"
url = "mailto:example@example.com"
[[social]]
icon = "twitter"
- icon_pack = "fab"
+ iconPack = "fab"
url = "https://example.com/"
[[social]]
icon = "github"
- icon_pack = "fab"
+ iconPack = "fab"
url = "https://example.com/"
+++
diff --git a/exampleSite/content/authors/example-author/avatar.jpg b/exampleSite/content/authors/example-author/avatar.jpg
deleted file mode 100644
index 671b36a..0000000
--- a/exampleSite/content/authors/example-author/avatar.jpg
+++ /dev/null
Binary files differ
diff --git a/exampleSite/content/authors/hugo-authors/_index.md b/exampleSite/content/authors/hugo-authors/_index.md
index aa22950..5f1a4f4 100644
--- a/exampleSite/content/authors/hugo-authors/_index.md
+++ b/exampleSite/content/authors/hugo-authors/_index.md
@@ -11,17 +11,17 @@ shortContent = "Example Short Content"
[[social]]
icon = "envelope"
- icon_pack = "fas"
+ iconPack = "fas"
url = "mailto:example@example.com"
[[social]]
icon = "twitter"
- icon_pack = "fab"
+ iconPack = "fab"
url = "https://example.com/"
[[social]]
icon = "github"
- icon_pack = "fab"
+ iconPack = "fab"
url = "https://example.com/"
+++
diff --git a/exampleSite/content/docs/_index.md b/exampleSite/content/docs/_index.md
index 2da1512..9f7529d 100644
--- a/exampleSite/content/docs/_index.md
+++ b/exampleSite/content/docs/_index.md
@@ -1,4 +1,4 @@
+++
title = "Docs"
-layout = "doc_list"
+layout = "doc-list"
+++ \ No newline at end of file
diff --git a/exampleSite/content/homepage/about.md b/exampleSite/content/homepage/about.md
new file mode 100644
index 0000000..c0f99af
--- /dev/null
+++ b/exampleSite/content/homepage/about.md
@@ -0,0 +1,72 @@
++++
+title = "Example Author"
+weight = 1
+draft = false
+
+role = "Example Role"
+bio = "Aenean vel bibendum quam. Aliquam at mollis quam. Proin efficitur."
+avatar = "images/icon.png"
+
+[organization]
+ name = "Example Organization"
+ url = "https://example.com/"
+
+[[social]]
+ icon = "envelope"
+ iconPack = "fas"
+ url = "mailto:example@example.com"
+
+[[social]]
+ icon = "twitter"
+ iconPack = "fab"
+ url = "https://example.com/"
+
+[[social]]
+ icon = "github"
+ iconPack = "fab"
+ url = "https://example.com/"
+
+[widget]
+ handler = "about"
+
+ # Options: sm, md, lg and xl. Default is md.
+ width = ""
+
+ [widget.sidebar]
+ # Options: left and right. Leave blank to hide.
+ position = ""
+ # Options: sm, md, lg and xl. Default is md.
+ scale = ""
+
+ [widget.background]
+ # Options: primary, secondary, tertiary or any valid color value. Default is primary.
+ color = "secondary"
+
+ # See TODO
+ image = ""
+ # Options: auto, cover and contain. Default is auto.
+ size = ""
+ # Options: center, top, right, bottom, left.
+ position = ""
+ # Options: fixed, local, scroll.
+ attachment = ""
++++
+
+## Self Introduction
+
+Cras ex dui, tristique a libero eget, consectetur semper ligula. Nunc augue arcu, malesuada a nisi et, molestie finibus metus. Sed lacus odio, ultricies a nisl vitae, sollicitudin tempor ipsum. Vivamus quis feugiat arcu. Sed mi nunc, efficitur quis tellus vitae, posuere mattis metus. Phasellus in mattis dui. Nullam blandit, augue non ullamcorper dapibus, lacus dui molestie massa, in iaculis purus lectus eu lectus. Duis hendrerit lacinia tellus, sit amet feugiat dolor placerat id. Aenean ac velit massa. Vivamus feugiat dui at magna viverra, ut dictum nunc rutrum. Duis eget sapien finibus, lobortis orci id, vestibulum tellus. Maecenas lobortis urna libero, quis fermentum lectus lobortis nec. Nullam laoreet volutpat libero, ac mattis magna ullamcorper quis. Duis eget ipsum eu nisi mattis cursus et vitae turpis.
+
+Aliquam pretium diam eget leo feugiat finibus. Donec malesuada commodo ipsum. Aenean a massa in lacus venenatis vestibulum. Duis vel sem quis elit iaculis consectetur et quis dolor. Morbi eu ipsum hendrerit, malesuada ante sed, dapibus est. Suspendisse feugiat nulla ut gravida convallis. Phasellus id massa posuere, rhoncus justo ut, porttitor dolor. Nulla ultrices malesuada egestas. Nunc fermentum tincidunt sem ac vulputate. Donec mollis sollicitudin justo eget varius. Donec ornare velit et felis blandit, id molestie sapien lobortis. Morbi eget tristique justo. Mauris posuere, nibh eu laoreet ultricies, ligula erat iaculis sapien, vel dapibus lacus libero ut diam. Etiam viverra ante felis, et scelerisque nunc pellentesque vitae. Praesent feugiat dictum molestie.
+
+## Details
+
+Nunc pellentesque vitae:
+- Morbi accumsan nibh efficitur diam molestie, non dignissim diam facilisis.
+- Donec dignissim leo in mollis faucibus.
+- Donec blandit lacus a pellentesque fermentum.
+
+Donec mollis sollicitudin:
+- Nunc dictum purus ornare purus consectetur, eu pellentesque massa ullamcorper.
+- Aliquam eu leo vitae justo aliquam tincidunt.
+- Fusce non massa id augue interdum feugiat sed et nulla.
+- Vivamus molestie augue in tristique laoreet. \ No newline at end of file
diff --git a/exampleSite/content/homepage/blank.html b/exampleSite/content/homepage/blank.html
new file mode 100644
index 0000000..05041bd
--- /dev/null
+++ b/exampleSite/content/homepage/blank.html
@@ -0,0 +1,34 @@
++++
+title = "Blank"
+weight = 4
+draft = false
+
+[widget]
+ handler = "blank"
+
+ # Options: sm, md, lg and xl. Default is md.
+ width = ""
+
+ [widget.sidebar]
+ # Options: left and right. Leave blank to hide.
+ position = ""
+ # Options: sm, md, lg and xl. Default is md.
+ scale = ""
+
+ [widget.background]
+ # Options: primary, secondary, tertiary or any valid color value. Default is primary.
+ color = ""
+
+ # See TODO
+ image = "images/hero-left.jpg"
+ # Options: auto, cover and contain. Default is auto.
+ size = "cover"
+ # Options: center, top, right, bottom, left.
+ position = ""
+ # Options: fixed, local, scroll.
+ attachment = ""
++++
+
+<div style="text-align:center">
+ <p>Write anything you like here!</p>
+</div> \ No newline at end of file
diff --git a/exampleSite/content/homepage/index.md b/exampleSite/content/homepage/index.md
new file mode 100644
index 0000000..2ae2541
--- /dev/null
+++ b/exampleSite/content/homepage/index.md
@@ -0,0 +1,3 @@
++++
+headless = true
++++ \ No newline at end of file
diff --git a/exampleSite/content/homepage/pages.md b/exampleSite/content/homepage/pages.md
new file mode 100644
index 0000000..0b4b1b5
--- /dev/null
+++ b/exampleSite/content/homepage/pages.md
@@ -0,0 +1,37 @@
++++
+title = "Pages"
+weight = 2
+draft = false
+
+# Section you want to display
+section = "posts"
+# Pages count
+count = 5
+# Options: card, plain and masonry.
+style = "plain"
+
+[widget]
+ handler = "pages"
+
+ # Options: sm, md, lg and xl. Default is md.
+ width = ""
+
+ [widget.sidebar]
+ # Options: left and right. Leave blank to hide.
+ position = ""
+ # Options: sm, md, lg and xl. Default is md.
+ scale = ""
+
+ [widget.background]
+ # Options: primary, secondary, tertiary or any valid color value. Default is primary.
+ color = ""
+
+ # See TODO
+ image = ""
+ # Options: auto, cover and contain. Default is auto.
+ size = ""
+ # Options: center, top, right, bottom, left.
+ position = ""
+ # Options: fixed, local, scroll.
+ attachment = ""
++++ \ No newline at end of file
diff --git a/exampleSite/content/homepage/vintage.md b/exampleSite/content/homepage/vintage.md
new file mode 100644
index 0000000..cdd3541
--- /dev/null
+++ b/exampleSite/content/homepage/vintage.md
@@ -0,0 +1,34 @@
++++
+title = "Vintage"
+weight = 3
+draft = false
+
+slogan = "We are all in the gutter, but some of us are looking at the stars."
+imgLeft = "images/hero-left.jpg"
+imgRight = "images/hero-right.jpg"
+
+[widget]
+ handler = "vintage"
+
+ # Options: sm, md, lg and xl. Default is md.
+ width = ""
+
+ [widget.sidebar]
+ # Options: left and right. Leave blank to hide.
+ position = ""
+ # Options: sm, md, lg and xl. Default is md.
+ scale = ""
+
+ [widget.background]
+ # Options: primary, secondary, tertiary or any valid color value. Default is primary.
+ color = "secondary"
+
+ # See TODO
+ image = ""
+ # Options: auto, cover and contain. Default is auto.
+ size = ""
+ # Options: center, top, right, bottom, left.
+ position = ""
+ # Options: fixed, local, scroll.
+ attachment = ""
++++ \ No newline at end of file
diff --git a/images/screenshot.png b/images/screenshot.png
index e42c4c9..a523876 100644
--- a/images/screenshot.png
+++ b/images/screenshot.png
Binary files differ
diff --git a/images/tn.png b/images/tn.png
index 9987ea0..e23e9aa 100644
--- a/images/tn.png
+++ b/images/tn.png
Binary files differ
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 0b11f59..37360b6 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -1,11 +1,11 @@
<!DOCTYPE html>
<html lang='{{ .Site.LanguageCode }}' {{ if eq .Site.Params.colorScheme "dark" }}class="dark" {{ end }}>
-{{- partial "head.html" . }}
+{{- partial "head" . }}
<body class="flex flex-col min-h-screen">
<header class="fixed flex items-center w-full min-h-16 pl-scrollbar z-50 bg-secondary-bg shadow-sm">
<div class="w-full max-w-screen-xl mx-auto">
- {{- partial "header.html" . -}}
+ {{- partial "header" . -}}
</div>
</header>
<main class="flex-grow pt-16">
@@ -21,7 +21,7 @@
</main>
<footer class="pl-scrollbar">
<div class="w-full max-w-screen-xl mx-auto">
- {{- partial "footer.html" . -}}
+ {{- partial "footer" . -}}
</div>
</footer>
</body>
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 0d02552..47725d5 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -7,12 +7,8 @@
</div>
{{ end }}
</article>
-<div class="bg-secondary-bg rounded overflow-hidden px-4 divide-y">
- {{ range .Paginator.Pages }}
- <div class="px-2 py-6">
- {{ partial "horizontal_summary.html" . }}
- </div>
- {{ end }}
+<div class="bg-secondary-bg rounded px-6">
+ {{ partial "components/summary-list-plain" .Paginator.Pages }}
</div>
{{ template "_internal/pagination.html" . }}
{{ end }} \ No newline at end of file
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index a9053bf..8656069 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -5,9 +5,9 @@
<div
class="col-span-2 {{ if not $hasSidebar }} {{- print "lg:col-start-2" -}} {{ end }} lg:col-span-6 bg-secondary-bg rounded px-6 py-8">
<h1 class="font-bold text-3xl text-primary-text">{{ .Title }}</h1>
- {{ partial "post_metadata.html" . }}
+ {{ partial "components/post-metadata" . }}
- {{ $featured := partial "get_featured" . }}
+ {{ $featured := partial "utils/get-featured" . }}
{{ with $featured }}
<div class="my-4">
{{ . }}
@@ -18,27 +18,27 @@
{{ .Content}}
</div>
{{ with .GetTerms "tags" }}
- {{ partial "post_tags.html" . }}
+ {{ partial "components/post-tags" . }}
{{ end }}
{{ if or .Site.Params.repoURL .Site.Params.repoEditURL }}
- {{ partial "post_edit.html" . }}
+ {{ partial "components/post-edit" . }}
{{ end }}
{{ with .GetTerms "authors" }}
- {{ partial "post_author.html" . }}
+ {{ partial "components/post-author" . }}
{{ end }}
- {{ partial "post_footer.html" . }}
+ {{ partial "components/post-footer" . }}
{{ partial "comment.html" . }}
</div>
{{ if $hasSidebar}}
<div class="col-span-2">
{{ if .GetTerms "series" }}
- {{ partial "post_series.html" . }}
+ {{ partial "components/post-series" . }}
{{ end }}
{{ if $hasToc }}
- {{ partial "post_toc.html" . }}
+ {{ partial "components/post-toc" . }}
{{ end }}
</div>
{{ end }}
diff --git a/layouts/authors/list.html b/layouts/authors/list.html
index 7d288ed..90d5fb3 100644
--- a/layouts/authors/list.html
+++ b/layouts/authors/list.html
@@ -1,10 +1,60 @@
{{ define "main" }}
<div class="lg:pt-12">
<div class="bg-secondary-bg rounded primary-text px-6 md:px-16 lg:px-32">
- {{ partial "widgets/about.html" . }}
- {{ partial "widgets/details.html" . }}
+ <div class="flex flex-col lg:flex-row items-center justify-center py-12">
+ {{ $img := partial "utils/get-image" (dict "context" . "url" .Params.avatar "keyword" "*avatar*")}}
+ {{ with $img }}
+ <div class="w-48 mx-auto lg:-my-8 lg:ml-0 lg:mr-8 lg:pr-8 lg:py-8 lg:border-r">
+ <img src="{{ . }}" class="rounded-full" alt="Avatar">
+ </div>
+ {{ end }}
+ <div class="flex-grow mt-4 md:mt-0">
+ <div class="text-3xl leading-tight py-4">{{ .Title }}</div>
+ <div class="w-3/12 xl:w-2/12 border-b"></div>
+
+ <div class="flex items-center pt-4">
+ {{ with or (.Params.role) (.Params.organizations)}}
+ <i class="fas fa-user-tag"></i>
+ {{ end }}
+ <div class="flex flex-wrap">
+ {{ with .Params.role }}
+ <span class="pl-4">{{ . }}</span>
+ {{ end }}
+
+ {{ with .Params.organization }}
+ <a href="{{ .url }}" class="pl-4">{{ .name }}</a>
+ {{ end }}
+ </div>
+
+ </div>
+
+ {{ with .Params.bio }}
+ <div class="py-8 text-lg leading-normal">
+ {{ . }}
+ </div>
+ {{ end }}
+ </div>
+ <div class="flex lg:flex-col justify-center items-end ml-8">
+ {{ $brand := $.Param "social"}}
+ {{ range $brand }}
+ {{/* Deprecation warning(v1.0.0) starts */}}
+ {{ if .icon_pack }}
+ {{ warnf "Param 'icon_pack' in %q is deprecated and will be removed in Eureka v1.0.0. Use 'iconPack' instead." $.File.Path }}
+ {{ end }}
+ {{ $iconPack := .iconPack | default .icon_pack }}
+ {{/* Deprecation warning(v1.0.0) ends */}}
+ {{ $src := print $iconPack " fa-" .icon }}
+ <div class="pb-2 pr-4 lg:pr-0 pt-4 lg:pt-0">
+ <a href="{{ .url }}"><i class="{{ print $src }}"></i></a>
+ </div>
+ {{ end }}
+ </div>
+ </div>
+ <div class="content pb-20">
+ {{ .Content }}
+ </div>
</div>
{{ $pages := .Pages }}
- {{ partial "masonry.html" $pages }}
+ {{ partial "components/masonry" $pages }}
</div>
{{ end }} \ No newline at end of file
diff --git a/layouts/docs/doc-list.html b/layouts/docs/doc-list.html
new file mode 100644
index 0000000..3a0513b
--- /dev/null
+++ b/layouts/docs/doc-list.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+{{ partial "components/doc-list" . }}
+{{ end }} \ No newline at end of file
diff --git a/layouts/docs/doc_list.html b/layouts/docs/doc_list.html
index 0d02552..a349171 100644
--- a/layouts/docs/doc_list.html
+++ b/layouts/docs/doc_list.html
@@ -1,18 +1,6 @@
+{{/* Deprecation warning(v1.0.0) starts */}}
{{ define "main" }}
-<article class="mx-6 my-8">
- <h1 class="font-bold text-3xl text-primary-text">{{ .Title }}</h1>
- {{ with .Content }}
- <div class="content">
- {{ . }}
- </div>
- {{ end }}
-</article>
-<div class="bg-secondary-bg rounded overflow-hidden px-4 divide-y">
- {{ range .Paginator.Pages }}
- <div class="px-2 py-6">
- {{ partial "horizontal_summary.html" . }}
- </div>
- {{ end }}
-</div>
-{{ template "_internal/pagination.html" . }}
-{{ end }} \ No newline at end of file
+{{ warnf "Value 'doc_list' of layout param in %q is deprecated and will be removed in Eureka v1.0.0. Use 'doc-list' instead." .File.Path }}
+{{ partial "components/doc-list" . }}
+{{ end }}
+{{/* Deprecation warning(v1.0.0) ends */}} \ No newline at end of file
diff --git a/layouts/docs/list.html b/layouts/docs/list.html
index fcee3bb..4abc302 100644
--- a/layouts/docs/list.html
+++ b/layouts/docs/list.html
@@ -1,3 +1,3 @@
{{ define "main" }}
-{{ partial "doc_layout.html" . }}
+{{ partial "components/doc-layout" . }}
{{ end }} \ No newline at end of file
diff --git a/layouts/docs/single.html b/layouts/docs/single.html
index 6244028..09026bf 100644
--- a/layouts/docs/single.html
+++ b/layouts/docs/single.html
@@ -1,3 +1,3 @@
{{ define "main" }}
-{{ partial "doc_layout.html" . }}
+{{ partial "components/doc-layout" . }}
{{ end }}
diff --git a/layouts/index.html b/layouts/index.html
index 9935dc8..84ab544 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -1,34 +1,176 @@
{{- define "main" }}
-<div class="bg-secondary-bg pl-scrollbar">
- <div class="max-w-screen-xl mx-auto">
- <div class="grid grid-cols-9 grid-rows-5 h-screen -mt-16">
- {{- $imgLeft := partial "get_image.html" (dict "context" . "url" .Site.Params.hero.imgLeft)}}
- {{- with $imgLeft }}
- <div class="col-start-2 col-span-4 row-start-3 row-span-2 bg-local bg-cover z-10 shadow-2xl"
- style="background-image: url({{ . }});"></div>
- {{- end }}
-
- <div class="col-start-3 col-span-5 row-start-2 row-span-3 z-20">
- <div class="flex flex-col items-center justify-center min-h-full">
- <div class="bg-white bg-opacity-75 shadow-2xl -m-12 p-12">
- <span
- class="font-bold text-black text-opacity-75 text-2xl md:text-3xl">{{ .Site.Params.hero.slogan }}</span>
- </div>
- </div>
- </div>
- {{- $imgRight := partial "get_image.html" (dict "context" . "url" .Site.Params.hero.imgRight)}}
- {{- with $imgRight }}
- <div class="col-start-5 col-span-4 row-start-2 row-span-2 bg-local bg-cover shadow-2xl"
- style="background-image: url({{ . }});">
+ {{ $homepage := .Site.GetPage "homepage" }}
+ {{ $widgets := $homepage.Resources }}
+ {{ range $widgets }}
+ {{ if .Params.widget.handler }}
+ {{ partial "widgets/load" . }}
+ {{ else }}
+ {{ errorf "Failed to find widget param in %q" .Path }}
+ {{ end }}
+
+ {{/* Deprecation warning(v1.0.0) starts */}}
+ {{ else }}
+ {{ warnf "Param 'hero' in params.toml is deprecated and will be removed in Eureka v1.0.0. See https://www.wangchucheng.com/en/docs/eureka/homepage-configuration/" }}
+ <div class="bg-secondary-bg pl-scrollbar">
+ <div class="max-w-screen-xl mx-auto">
+ <div class="grid grid-cols-9 grid-rows-5 h-(screen-16)">
+ {{- $imgLeft := partial "utils/get-image" (dict "context" . "url" .Site.Params.hero.imgLeft)}}
+ {{- with $imgLeft }}
+ <div class="col-start-2 col-span-4 row-start-3 row-span-2 bg-local bg-cover z-10 shadow-2xl"
+ style="background-image: url({{ . }});"></div>
+ {{- end }}
+
+ <div class="col-start-3 col-span-5 row-start-2 row-span-3 z-20">
+ <div class="flex flex-col items-center justify-center min-h-full">
+ <div class="bg-white bg-opacity-75 shadow-2xl -m-12 p-12">
+ <span class="font-bold text-black text-opacity-75 text-2xl md:text-3xl">{{ .Site.Params.hero.slogan }}</span>
+ </div>
</div>
- {{- end }}
+ </div>
+ {{- $imgRight := partial "utils/get-image" (dict "context" . "url" .Site.Params.hero.imgRight)}}
+ {{- with $imgRight }}
+ <div class="col-start-5 col-span-4 row-start-2 row-span-2 bg-local bg-cover shadow-2xl"
+ style="background-image: url({{ . }});">
+ </div>
+ {{- end }}
+ </div>
+ </div>
+ </div>
+ <div class="pl-scrollbar">
+ <div class="max-w-screen-xl mx-auto">
+ <div class="pt-12 md:px-4 xl:px-8">
+ {{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}
+ {{- partial "components/masonry" $pages }}
</div>
+ </div>
+ </div>
+ {{/* Deprecation warning(v1.0.0) ends */}}
+
+ {{ end }}
+{{- end }}
+
+{{ define "partials/widgets/load" }}
+ {{ $widget := .Params.widget }}
+
+ {{ $fullScreenWidgets := slice "vintage" }}
+
+ {{/* background config */}}
+ {{ $backgroundClass := "" }}
+ {{ $backgroundStyle := "" }}
+
+ {{ if $widget.background.image }}
+ {{ $image := partial "utils/get-image.html" (dict "context" . "url" $widget.background.image) }}
+ {{ $backgroundStyle = print $backgroundStyle "background-image: url(" $image ");" }}
+ {{/* background size */}}
+ {{ $size := $widget.background.size }}
+ {{ $sizeOptions := dict "auto" "bg-auto" "cover" "bg-cover" "contain" "bg-contain" }}
+ {{ if $size }}
+ {{ $size = index $sizeOptions $size }}
+ {{ if $size }}
+ {{ $backgroundClass = print $backgroundClass " " $size }}
+ {{ else }}
+ {{/* TODO error */}}
+ {{ end }}
+ {{ end }}
+
+ {{/* background position */}}
+ {{ $position := $widget.background.position }}
+ {{ $positionOptions := dict "center" "bg-center" "top" "bg-top" "right" "bg-right" "bottom" "bg-bottom" "left" "bg-left" }}
+ {{ if $position }}
+ {{ $position = index $positionOptions $position }}
+ {{ if $position }}
+ {{ $backgroundClass = print $backgroundClass " " $position }}
+ {{ else }}
+ {{/* TODO error */}}
+ {{ end }}
+ {{ end }}
+
+ {{/* background position */}}
+ {{ $attachment := $widget.background.attachment }}
+ {{ $attachmentOptions := dict "fixed" "bg-fixed" "local" "bg-local" "scroll" "bg-scroll" }}
+ {{ if $attachment }}
+ {{ $attachment = index $attachmentOptions $attachment }}
+ {{ if $attachment }}
+ {{ $backgroundClass = print $backgroundClass " " $attachment }}
+ {{ else }}
+ {{/* TODO error */}}
+ {{ end }}
+ {{ end }}
+
+ {{ else }}
+ {{/* background color */}}
+ {{ $color := $widget.background.color }}
+ {{ $colorOptions := dict "primary" "bg-primary-bg" "secondary" "bg-secondary-bg" "tertiary" "bg-tertiary-bg" }}
+ {{ if $color }}
+ {{ $colorClass := index $colorOptions $color }}
+ {{ if $colorClass }}
+ {{ $backgroundClass = print $backgroundClass " " $colorClass }}
+ {{ else }}
+ {{ $backgroundStyle = print $backgroundStyle "background-color: " $color ";"}}
+ {{ end }}
+ {{ else }}
+ {{ $colorClass := index $colorOptions "primary" }}
+ {{ $backgroundClass = print $backgroundClass " " $colorClass }}
+ {{ end }}
+ {{ end }}
+
+ {{/* widget config */}}
+ {{ $widgetClass := "" }}
+
+ {{ if not (in $fullScreenWidgets $widget.handler) }}
+ {{/* widget width */}}
+ {{ $width := $widget.width }}
+ {{ $widthOptions := dict "sm" "lg:w-2/3" "md" "lg:w-3/4" "lg" "lg:w-4/5" "xl" "w-full" }}
+ {{ if $width }}
+ {{ $widthClass := index $widthOptions $width }}
+ {{ if $widthClass }}
+ {{ $widgetClass = print $widgetClass " " $widthClass }}
+ {{ end }}
+ {{ else }}
+ {{ $widthClass := index $widthOptions "md" }}
+ {{ $widgetClass = print $widgetClass " " $widthClass }}
+ {{ end }}
+
+ {{/* widget height */}}
+ {{ $height := $widget.height }}
+ {{ $heightOptions := dict "sm" "h-64" "md" "h-96" "lg" "h-128" "xl" "h-160" "screen" "h-(screen-16)" }}
+ {{ if $height }}
+ {{ $heightClass := index $heightOptions $height }}
+ {{ if $heightClass }}
+ {{ $widgetClass = print $widgetClass " " $heightClass }}
+ {{ end }}
+ {{ end }}
+ {{ $widgetClass = print $widgetClass " mx-auto px-6 md:px-8 xl:px-12 py-12" }}
+ {{ end }}
+
+ <div class="pl-scrollbar {{ with $backgroundClass -}}{{ partial "utils/standardize-classes" . }}{{- end }}"
+ {{ with $backgroundStyle }} style="{{ . | safeCSS }}" {{ end }}>
+ <div class="max-w-screen-xl mx-auto">
+ <div id="{{ .File.BaseFileName }}" class="{{ with $widgetClass -}}{{ partial "utils/standardize-classes" . }}{{- end }}">
+ {{ partial "widgets/load-sidebar" . }}
+ </div>
</div>
-</div>
-<div class="max-w-screen-xl mx-auto">
- <div class="pt-12 md:px-4 xl:px-8">
- {{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}
- {{- partial "masonry" $pages }}
+ </div>
+{{ end }}
+
+{{ define "partials/widgets/load-sidebar" }}
+ {{ $sidebar := .Params.widget.sidebar }}
+
+ {{ if $sidebar.position }}
+
+ {{ $scaleOptions := dict "sm" "lg:w-1/5" "md" "lg:w-1/4" "lg" "lg:w-1/3" "xl" "lg:w-1/2" }}
+ {{ $scaleClass := index $scaleOptions $sidebar.scale | default (index $scaleOptions "md") }}
+ <div class="flex flex-col {{ if eq $sidebar.position "right" -}} lg:flex-row-reverse {{- else -}} lg:flex-row {{- end }}">
+ {{ if $sidebar.position }}
+ <div class="flex-none {{ with $scaleClass -}}{{ partial "utils/standardize-classes" . }}{{- end }} {{ if eq $sidebar.position "left" -}} lg:mr-4 {{- else -}} lg:ml-4 {{- end }}">
+ <h2 class="font-bold text-3xl my-4">{{ .Params.Title }}</h2>
+ </div>
+ {{ end }}
+ <div class="flex-grow {{ if eq $sidebar.position "right" -}} lg:mr-4 {{- else -}} lg:ml-4 {{- end }}">
+ {{ partial (printf "widgets/%s" .Params.widget.handler) . }}
+ </div>
</div>
-</div>
-{{- end }} \ No newline at end of file
+ {{ else }}
+ {{ partial (printf "widgets/%s" .Params.widget.handler) . }}
+ {{ end }}
+{{ end }} \ No newline at end of file
diff --git a/layouts/partials/comment.html b/layouts/partials/comment.html
index eca996b..96e8a9d 100644
--- a/layouts/partials/comment.html
+++ b/layouts/partials/comment.html
@@ -1,5 +1,5 @@
{{ if eq .Site.Params.comment.platform "disqus" }}
-{{ partial "comment/disqus.html" . }}
+{{ partial "comment/disqus" . }}
{{ else if eq .Site.Params.comment.platform "commento" }}
-{{ partial "comment/commento.html" . }}
+{{ partial "comment/commento" . }}
{{ end }} \ No newline at end of file
diff --git a/layouts/partials/doc_layout.html b/layouts/partials/components/doc-layout.html
index 4cf57bc..7217030 100644
--- a/layouts/partials/doc_layout.html
+++ b/layouts/partials/components/doc-layout.html
@@ -4,18 +4,18 @@
<div class="flex flex-col md:flex-row bg-secondary-bg rounded">
<div class="md:w-1/4 lg:w-1/5 border-r">
<div class="sticky top-16 pt-6">
- {{ template "doc_sidebar" (dict "context" . "permalink" .Permalink) }}
+ {{ template "doc-sidebar" (dict "context" . "permalink" .Permalink) }}
</div>
</div>
<div class="w-full md:w-3/4 lg:w-4/5 pb-8 pt-2 md:pt-8">
<div class="w-full lg:w-3/4 pl-6 ml-0 mr-auto">
<h1 class="font-bold text-3xl text-primary-text">{{ .Title }}</h1>
- {{ partial "post_metadata.html" . }}
+ {{ partial "components/post-metadata" . }}
</div>
<div class="flex">
<div class="w-full lg:w-3/4 px-6">
- {{ $featured := partial "get_featured" . }}
+ {{ $featured := partial "utils/get-featured" . }}
{{ with $featured }}
<div class="my-4">
{{ . }}
@@ -25,23 +25,23 @@
{{ .Content}}
</div>
{{ with .GetTerms "tags" }}
- {{ partial "post_tags.html" . }}
+ {{ partial "components/post-tags" . }}
{{ end }}
{{ with .GetTerms "authors" }}
- {{ partial "post_author.html" . }}
+ {{ partial "components/post-author" . }}
{{ end }}
{{ if or .Site.Params.repoURL .Site.Params.repoEditURL }}
- {{ partial "post_edit.html" . }}
+ {{ partial "components/post-edit" . }}
{{ end }}
- {{ partial "post_footer.html" . }}
- {{ partial "comment.html" . }}
+ {{ partial "components/post-footer" . }}
+ {{ partial "comment" . }}
</div>
{{ if $hasSidebar}}
<div class="hidden lg:block lg:w-1/4">
{{ if ne $hasToc false }}
- {{ partial "post_toc.html" . }}
+ {{ partial "components/post-toc" . }}
{{ end }}
</div>
{{ end }}
@@ -61,17 +61,20 @@
})
</script>
-{{ define "doc_sidebar" }}
-{{ if eq .context.Parent.Params.layout "doc_list" }}
-{{ template "list_pages" (dict "context" .context "permalink" .permalink) }}
+{{ define "doc-sidebar" }}
+{{/* Deprecation warning(v1.0.0) starts */}}
+{{ $parentLayout := partial "utils/hyphenate" (.context.Parent.Layout | default .context.Parent.Type) }}
+{{/* Deprecation warning(v1.0.0) ends */}}
+{{ if eq $parentLayout "doc-list" }}
+{{ template "list-pages" (dict "context" .context "permalink" .permalink) }}
{{ else if (findRE "v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?/$" .context.Permalink) }}
-{{ template "list_pages" (dict "context" .context "permalink" .permalink) }}
+{{ template "list-pages" (dict "context" .context "permalink" .permalink) }}
{{ else }}
-{{ template "doc_sidebar" (dict "context" .context.Parent "permalink" .permalink) }}
+{{ template "doc-sidebar" (dict "context" .context.Parent "permalink" .permalink) }}
{{ end }}
{{ end }}
-{{ define "list_pages" }}
+{{ define "list-pages" }}
<div id="sidebar-title" class="md:hidden mx-4 px-2 pt-4 pb-2 md:border-b text-tertiary-text md:text-primary-text">
<span class="font-semibold">{{ i18n "toc" }}</span>
<i class="fas fa-caret-right ml-1"></i>
@@ -83,7 +86,7 @@
<a class="{{ if eq .context.Permalink .permalink }}text-eureka{{ end }} hover:text-eureka"
href="{{ .context.Permalink }}">{{ .context.LinkTitle }}</a>
- {{ $versions := partial "get_versions" (dict "context" .context) }}
+ {{ $versions := partial "get-versions" (dict "context" .context) }}
{{ if $versions }}
<div class="relative ml-2 cursor-pointer">
<div id="doc-version" class="flex items-center bg-primary-bg md:bg-secondary-bg">
@@ -116,11 +119,11 @@
</div>
- {{ template "list_items" (dict "context" .context "permalink" .permalink) }}
+ {{ template "list-items" (dict "context" .context "permalink" .permalink) }}
</div>
{{ end }}
-{{ define "list_items"}}
+{{ define "list-items"}}
<ul class="pl-6">
{{ range .context.Pages }}
{{ $version := findRE "v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?/$" .Permalink }}
@@ -131,7 +134,7 @@
href="{{ .Permalink }}">{{ .LinkTitle }}</a>
</div>
{{ if .IsSection }}
- {{ template "list_items" (dict "context" . "permalink" $.permalink) }}
+ {{ template "list-items" (dict "context" . "permalink" $.permalink) }}
{{ end }}
</li>
{{ end }}
@@ -139,10 +142,11 @@
</ul>
{{ end }}
-{{ define "partials/get_versions" }}
-{{ if eq .context.Parent.Params.layout "doc_list" }}
-{{/* {{ $latest := slice .context.Permalink }}
-{{ $.context.Scratch.Add "versions" $latest }} */}}
+{{ define "partials/get-versions" }}
+{{/* Deprecation warning(v1.0.0) starts */}}
+{{ $parentLayout := partial "utils/hyphenate" (.context.Parent.Layout | default .context.Parent.Type) }}
+{{/* Deprecation warning(v1.0.0) ends */}}
+{{ if eq $parentLayout "doc-list" }}
{{ range .context.Pages.Reverse }}
{{ $hasVersion := findRE "v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?/$" .Permalink }}
{{ if $hasVersion}}
@@ -151,8 +155,6 @@
{{ end }}
{{ end }}
{{ else }}
-{{/* {{ $latest := slice .context.Parent.Permalink }}
-{{ $.context.Scratch.Add "versions" $latest }} */}}
{{ range .context.Parent.Pages.Reverse }}
{{ $hasVersion := findRE "v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?/$" .Permalink }}
{{ if $hasVersion }}
diff --git a/layouts/partials/components/doc-list.html b/layouts/partials/components/doc-list.html
new file mode 100644
index 0000000..51e71b3
--- /dev/null
+++ b/layouts/partials/components/doc-list.html
@@ -0,0 +1,12 @@
+<article class="mx-6 my-8">
+ <h1 class="font-bold text-3xl text-primary-text">{{ .Title }}</h1>
+ {{ with .Content }}
+ <div class="content">
+ {{ . }}
+ </div>
+ {{ end }}
+</article>
+<div class="bg-secondary-bg rounded px-6">
+ {{ partial "components/summary-list-plain" .Paginator.Pages }}
+</div>
+{{ template "_internal/pagination.html" . }} \ No newline at end of file
diff --git a/layouts/partials/masonry.html b/layouts/partials/components/masonry.html
index fc2f1ac..8bfb4a2 100644
--- a/layouts/partials/masonry.html
+++ b/layouts/partials/components/masonry.html
@@ -7,7 +7,7 @@
{{ range first 10 . }}
<div class="item">
<div class="grid-content">
- {{ partial "stacked_summary.html" . }}
+ {{ partial "components/summary-masonry" . }}
</div>
</div>
{{ end }}
diff --git a/layouts/partials/opengraph.html b/layouts/partials/components/opengraph.html
index 6065b98..a0b9bba 100644
--- a/layouts/partials/opengraph.html
+++ b/layouts/partials/components/opengraph.html
@@ -1,6 +1,6 @@
-<meta property="og:title" content="{{ partial "get_title" . }}" />
+<meta property="og:title" content="{{ partial "get-title" . }}" />
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}" />
-{{ $icon := partial "get_image.html" (dict "context" . "url" .Site.Params.icon) }}
+{{ $icon := partial "utils/get-image" (dict "context" . "url" .Site.Params.icon) }}
{{ with $icon }}
<meta property="og:image" content="{{ . }}">
{{ end }}
@@ -64,11 +64,11 @@
{{ end }}
{{ if .GetTerms "series" }}
-{{ $page_link := .Permalink }}
+{{ $pageLink := .Permalink }}
{{ $series := .Site.Taxonomies.series}}
{{ range (.GetTerms "series") }}
{{ range .Pages }}
-{{ if ne .Page.Permalink $page_link }}
+{{ if ne .Page.Permalink $pageLink }}
<meta property="og:see_also" content="{{ .Page.Permalink }}" />
{{ end }}
{{ end }}
diff --git a/layouts/partials/post_author.html b/layouts/partials/components/post-author.html
index 72f3c5f..2695d97 100644
--- a/layouts/partials/post_author.html
+++ b/layouts/partials/components/post-author.html
@@ -2,7 +2,7 @@
{{ range . }}
<div class="flex flex-col md:flex-row items-center my-8">
<a href="{{ .Permalink }}" class="w-24 h-24 md:mr-4">
- {{ $img := partial "get_image.html" (dict "context" . "url" .Params.avatar "keyword" "*avatar*")}}
+ {{ $img := partial "utils/get-image" (dict "context" . "url" .Params.avatar "keyword" "*avatar*")}}
{{ with $img }}
<img src="{{ . }}" class="w-full bg-primary-bg rounded-full" alt="Avatar">
{{ else }}
@@ -13,6 +13,9 @@
<a href="{{ .Permalink }}" class="block font-bold text-lg pb-1 mb-2 border-b">{{ .LinkTitle }}</a>
<span class="block pb-2">{{ .Params.bio }}</span>
{{ range .Params.social }}
+ {{/* Deprecation warning(v1.0.0) starts */}}
+ {{ $iconPack := .iconPack | default .icon_pack }}
+ {{/* Deprecation warning(v1.0.0) ends */}}
{{ $src := print .icon_pack " fa-" .icon }}
<a href="{{ .url }}" class="mr-1">
<i class="{{ print $src }}"></i>
diff --git a/layouts/partials/post_edit.html b/layouts/partials/components/post-edit.html
index 254b9e7..14c07af 100644
--- a/layouts/partials/post_edit.html
+++ b/layouts/partials/components/post-edit.html
@@ -1,5 +1,5 @@
<div class="flex md:justify-end my-4">
- {{ $repoEditURL := partial "get_edit_url" . }}
+ {{ $repoEditURL := partial "get-edit-url" . }}
{{ $contentDir := cond .Site.IsMultiLingual .Site.Params.contentDir "/content/" }}
{{ $path := path.Join $repoEditURL $contentDir .File.Path }}
{{ $path := replace $path "http:/" "http://" 1 }}
@@ -11,7 +11,7 @@
</a>
</div>
-{{ define "partials/get_edit_url" }}
+{{ define "partials/get-edit-url" }}
{{ with .Site.Params.repoEditURL }}
{{ $.Scratch.Set "repoEditURL" . }}
{{ else }}
diff --git a/layouts/partials/post_footer.html b/layouts/partials/components/post-footer.html
index 90db30f..90db30f 100644
--- a/layouts/partials/post_footer.html
+++ b/layouts/partials/components/post-footer.html
diff --git a/layouts/partials/post_metadata.html b/layouts/partials/components/post-metadata.html
index eacaadd..9fa9a40 100644
--- a/layouts/partials/post_metadata.html
+++ b/layouts/partials/components/post-metadata.html
@@ -1,4 +1,4 @@
-<div class="flex flex-wrap flex-row items-center my-2 text-tertiary-text">
+<div class="flex flex-wrap flex-row items-center mt-2 text-tertiary-text">
<div class="mr-6 my-2">
<i class="fas fa-calendar mr-1"></i>
<span>{{ .Date.Format (.Site.Params.dateFormat | default "2006-01-02") }}</span>
diff --git a/layouts/partials/post_series.html b/layouts/partials/components/post-series.html
index ebc3810..ebc3810 100644
--- a/layouts/partials/post_series.html
+++ b/layouts/partials/components/post-series.html
diff --git a/layouts/partials/post_tags.html b/layouts/partials/components/post-tags.html
index cac5fba..cac5fba 100644
--- a/layouts/partials/post_tags.html
+++ b/layouts/partials/components/post-tags.html
diff --git a/layouts/partials/post_toc.html b/layouts/partials/components/post-toc.html
index 66fd401..66fd401 100644
--- a/layouts/partials/post_toc.html
+++ b/layouts/partials/components/post-toc.html
diff --git a/layouts/partials/schema_node.html b/layouts/partials/components/schema-node.html
index ec4fda0..0c4cba5 100644
--- a/layouts/partials/schema_node.html
+++ b/layouts/partials/components/schema-node.html
@@ -6,7 +6,7 @@
{{- with $pages }}
<script type="application/ld+json">
{
- "@context":"https://schema.org",
+ "@context":"https://components/schema.org",
"@type":"ItemList",
"itemListElement":[
{{- range $index, $value := . -}}
@@ -16,7 +16,7 @@
"position": {{ add $index 1 }},
"name": {{ .Title }},
"description": {{ if .Description }}{{ .Description }}{{ else if .Summary }}{{ .Summary }}{{ else if .Site.Params.Description }}{{ .Site.Params.Description }}{{ end }},
- {{- $img := partial "get_image.html" (dict "context" . "url" .Params.featuredImage "keyword" "*featured*") }}
+ {{- $img := partial "utils/get-image" (dict "context" . "url" .Params.featuredImage "keyword" "*featured*") }}
{{- with $img }}
"image": {{ . }},
{{- end }}
diff --git a/layouts/partials/schema_page.html b/layouts/partials/components/schema-page.html
index b231b0a..4829647 100644
--- a/layouts/partials/schema_page.html
+++ b/layouts/partials/components/schema-page.html
@@ -1,13 +1,13 @@
<script type="application/ld+json">
{
- "@context": "https://schema.org",
+ "@context": "https://components/schema.org",
"@type": "Article",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": {{ .Permalink }}
},
- "headline": "{{ partial "get_title" . }}",
- {{- $img := partial "get_image.html" (dict "context" . "url" .Params.featuredImage "keyword" "*featured*") }}
+ "headline": "{{ partial "get-title" . }}",
+ {{- $img := partial "utils/get-image" (dict "context" . "url" .Params.featuredImage "keyword" "*featured*") }}
{{- with $img }}
"image": {{ . }},
{{ end -}}
@@ -43,8 +43,8 @@
{{ else -}}
"name": {{ .Site.Title }},
{{ end -}}
- {{ $publisherLogo := partial "get_image.html" (dict "context" . "url" .Site.Params.publisherLogo) -}}
- {{ $icon := partial "get_image.html" (dict "context" . "url" .Site.Params.icon) -}}
+ {{ $publisherLogo := partial "utils/get-image" (dict "context" . "url" .Site.Params.publisherLogo) -}}
+ {{ $icon := partial "utils/get-image" (dict "context" . "url" .Site.Params.icon) -}}
{{ if $publisherLogo -}}
"logo": {
"@type": "ImageObject",
diff --git a/layouts/partials/schema.html b/layouts/partials/components/schema.html
index 6be8946..03b840c 100644
--- a/layouts/partials/schema.html
+++ b/layouts/partials/components/schema.html
@@ -1,11 +1,11 @@
<meta name="description"
content="{{ if .Description }}{{ .Description }}{{ else if .Summary }}{{ .Summary }}{{ else if .Site.Params.Description }}{{ .Site.Params.Description }}{{ end }}">
-{{- $bundles := partial "get_bundles" . }}
+{{- $bundles := partial "get-bundles" . }}
{{- if gt (len $bundles) 1 }}
<script type="application/ld+json">
{
- "@context": "https://schema.org",
+ "@context": "https://components/schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{{- range $index, $value := $bundles.Reverse -}}
@@ -22,10 +22,13 @@
</script>
{{- end }}
-{{- if and (eq .Type "docs") (ne .Params.layout "doc_list") }}
-{{- partial "schema_page.html" . }}
+{{/* Deprecation warning(v1.0.0) starts */}}
+{{ $layout := partial "utils/hyphenate" (.Layout | default .Type) }}
+{{/* Deprecation warning(v1.0.0) ends */}}
+{{- if and (eq .Type "docs") (ne $layout "doc-list") }}
+{{- partial "components/schema-page" . }}
{{- else if or (eq .Kind "section") (eq .Kind "term") }}
-{{- partial "schema_node.html" . }}
+{{- partial "components/schema-node" . }}
{{- else if .IsPage }}
-{{- partial "schema_page.html" . }}
+{{- partial "components/schema-page" . }}
{{- end }} \ No newline at end of file
diff --git a/layouts/partials/components/summary-card.html b/layouts/partials/components/summary-card.html
new file mode 100644
index 0000000..f38d6b7
--- /dev/null
+++ b/layouts/partials/components/summary-card.html
@@ -0,0 +1,3 @@
+<div class="bg-secondary-bg rounded border shadow hover:shadow-lg transition ease-in-out duration-200 px-6 pt-6 pb-4">
+ {{ partial "components/summary-plain" . }}
+</div> \ No newline at end of file
diff --git a/layouts/partials/components/summary-list-card.html b/layouts/partials/components/summary-list-card.html
new file mode 100644
index 0000000..3829230
--- /dev/null
+++ b/layouts/partials/components/summary-list-card.html
@@ -0,0 +1,5 @@
+{{ range . }}
+<div class="mb-6">
+ {{ partial "components/summary-card" . }}
+</div>
+{{ end }} \ No newline at end of file
diff --git a/layouts/partials/components/summary-list-masonry.html b/layouts/partials/components/summary-list-masonry.html
new file mode 100644
index 0000000..8e82a6e
--- /dev/null
+++ b/layouts/partials/components/summary-list-masonry.html
@@ -0,0 +1,15 @@
+<div class="masonry grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-8">
+ {{ range . }}
+ <div class="item">
+ <div class="grid-content">
+ {{ partial "components/summary-masonry" . }}
+ </div>
+ </div>
+ {{ end }}
+
+</div>
+<script>
+ document.addEventListener('DOMContentLoaded', () => {
+ enableMasonry()
+ })
+</script> \ No newline at end of file
diff --git a/layouts/partials/components/summary-list-plain.html b/layouts/partials/components/summary-list-plain.html
new file mode 100644
index 0000000..78d324c
--- /dev/null
+++ b/layouts/partials/components/summary-list-plain.html
@@ -0,0 +1,8 @@
+<div class="overflow-hidden divide-y">
+ {{ range . }}
+ <div class="py-6">
+ {{ partial "components/summary-plain" . }}
+ </div>
+ {{ end }}
+</div>
+
diff --git a/layouts/partials/components/summary-masonry.html b/layouts/partials/components/summary-masonry.html
new file mode 100644
index 0000000..1ee347a
--- /dev/null
+++ b/layouts/partials/components/summary-masonry.html
@@ -0,0 +1,17 @@
+<div class="bg-secondary-bg rounded overflow-hidden border shadow hover:shadow-lg transition ease-in-out duration-200">
+ {{ $featured := partial "utils/get-featured" . }}
+ {{ with $featured }}
+ {{ . }}
+ {{ end }}
+ <div class="px-6 pt-6">
+ <div class="font-bold text-xl text-primary-text mb-2">
+ <a href="{{ .Permalink }}" class="hover:text-eureka">{{ .LinkTitle }}</a>
+ </div>
+ <div class="">
+ {{- .Summary | plainify -}}
+ </div>
+ </div>
+ <div class="px-6 pb-2">
+ {{ partial "components/post-metadata" . }}
+ </div>
+</div> \ No newline at end of file
diff --git a/layouts/partials/components/summary-plain.html b/layouts/partials/components/summary-plain.html
new file mode 100644
index 0000000..981ab36
--- /dev/null
+++ b/layouts/partials/components/summary-plain.html
@@ -0,0 +1,12 @@
+<div class="flex flex-col-reverse lg:flex-row justify-between">
+ {{ $featured := partial "utils/get-featured" . }}
+ <div class="w-full {{ with $featured }}lg:w-2/3{{ end }}">
+ {{ partial "utils/get-summary" . }}
+ </div>
+
+ {{ with $featured }}
+ <div class="w-full lg:w-1/3 mb-4 lg:mb-0 lg:ml-8">
+ {{ . }}
+ </div>
+ {{ end }}
+</div> \ No newline at end of file
diff --git a/layouts/partials/custom_head.html b/layouts/partials/custom-head.html
index f9424d4..f9424d4 100644
--- a/layouts/partials/custom_head.html
+++ b/layouts/partials/custom-head.html
diff --git a/layouts/partials/get_featured.html b/layouts/partials/get_featured.html
deleted file mode 100644
index aa99e78..0000000
--- a/layouts/partials/get_featured.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{{ $video := partial "get_video" (dict "context" . "url" .Params.featuredVideo "keyword" "*featured*") }}
-{{ $image := partial "get_image.html" (dict "context" . "url" .Params.featuredImage "keyword" "*featured*") }}
-{{ $featured := ""}}
-{{ if $video }}
-{{ $featured = $video }}
-{{ else if $image }}
-{{ $featured = print "<img src=\"" $image "\" class=\"w-full\" alt=\"Featured Image\">" | safeHTML }}
-{{ end }}
-{{ return $featured }} \ No newline at end of file
diff --git a/layouts/partials/head.html b/layouts/partials/head.html
index 8a831a5..258e5b1 100644
--- a/layouts/partials/head.html
+++ b/layouts/partials/head.html
@@ -1,7 +1,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
-{{ define "partials/get_title" }}
+{{ define "partials/get-title" }}
{{ $separator := .Site.Params.titleSeparator | default "|" }}
{{ $primarySep := $separator }}
{{ $secondarySep := $separator }}
@@ -14,12 +14,19 @@
{{ $prefix := "" }}
{{ if .Params.Title }}
{{ $prefix = .Params.Title }}
-{{ if and (eq .Type "docs") (ne .Layout "doc_list") }}
+{{/* Deprecation warning(v1.0.0) starts */}}
+{{ $layout := partial "utils/hyphenate" (.Layout | default .Type) }}
+{{/* Deprecation warning(v1.0.0) ends */}}
+{{ if and (eq .Type "docs") (ne $layout "doc-list") }}
{{ $docTitle := "" }}
-{{ $bundles := partial "get_bundles" . }}
+{{ $bundles := partial "get-bundles" . }}
{{ range $bundles.Reverse }}
{{ $version := findRE "v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?" (path.Base .Permalink) }}
-{{ if and (eq .Parent.Layout "doc_list") (ne .Layout "doc_list") }}
+{{/* Deprecation warning(v1.0.0) starts */}}
+{{ $parentLayout := partial "utils/hyphenate" (.Parent.Layout | default .Parent.Type) }}
+{{ $layout := partial "utils/hyphenate" (.Layout | default .Type) }}
+{{/* Deprecation warning(v1.0.0) ends */}}
+{{ if and (eq $parentLayout "doc-list") (ne $layout "doc-list") }}
{{ $docTitle = .Title }}
{{ else if $version }}
{{ $docTitle = .Title }}
@@ -27,7 +34,10 @@
{{ end }}
{{/* Doc title */}}
{{ $version := findRE "v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?" (path.Base .Permalink) }}
-{{ if or (eq .Parent.Layout "doc_list") $version }}
+{{/* Deprecation warning(v1.0.0) starts */}}
+{{ $parentLayout := partial "utils/hyphenate" (.Parent.Layout | default .Parent.Type) }}
+{{/* Deprecation warning(v1.0.0) ends */}}
+{{ if or (eq $parentLayout "doc-list") $version }}
{{ $prefix = $docTitle }}
{{ else }}
{{ $prefix = print $prefix " " $secondarySep " " $docTitle }}
@@ -40,7 +50,7 @@
{{ end }}
{{ return $title }}
{{ end }}
-<title>{{ partial "get_title" . }}</title>
+<title>{{ partial "get-title" . }}</title>
{{- $eurekaCSS := resources.Get "css/eureka.css" | postCSS (dict "config" "./assets/css/postcss.config.js") }}
{{- $eurekaCSS := $eurekaCSS | minify }}
@@ -63,11 +73,11 @@
<script defer src="{{ printf $assets.fontawesome.js.url $assets.fontawesome.version }}"
{{ with $assets.fontawesome.js.sri }} integrity="{{ . }}" {{ end }} crossorigin></script>
-{{ define "partials/get_bundles" }}
+{{ define "partials/get-bundles" }}
{{ $currentPage := . }}
{{ $bundles := slice $currentPage }}
{{ if and (ne $currentPage.Kind "taxonomy") (or (ne $currentPage $currentPage.FirstSection) (eq $currentPage.Kind "term")) }}
-{{ $currentBundles := partial "get_bundles" $currentPage.Parent }}
+{{ $currentBundles := partial "get-bundles" $currentPage.Parent }}
{{ $bundles = $bundles | append $currentBundles }}
{{ end }}
{{ return $bundles }}
@@ -75,7 +85,7 @@
{{- $enableMath := false }}
{{- if .Site.Params.math.handler }}
-{{- $bundles := partial "get_bundles" . }}
+{{- $bundles := partial "get-bundles" . }}
{{- $enableMath = true }}
{{- range $bundles.Reverse }}
{{- if and (ne .Params.math nil) (ne .Params.math "") }}
@@ -122,21 +132,21 @@
</script>
{{- end }}
-{{ partial "custom_head.html" . }}
+{{ partial "custom-head" . }}
{{- with .Site.Params.icon }}
-<link rel="icon" type="image/png" sizes="32x32" href="{{ (partial "get_icon" (dict "icon" . "size" 32)).Permalink }}">
-<link rel="apple-touch-icon" sizes="180x180" href="{{ (partial "get_icon" (dict "icon" . "size" 180)).Permalink }}">
+<link rel="icon" type="image/png" sizes="32x32" href="{{ (partial "get-icon" (dict "icon" . "size" 32)).Permalink }}">
+<link rel="apple-touch-icon" sizes="180x180" href="{{ (partial "get-icon" (dict "icon" . "size" 180)).Permalink }}">
{{- end }}
-{{ define "partials/get_icon" }}
+{{ define "partials/get-icon" }}
{{ $icon := resources.GetMatch .icon }}
-{{ $icon_resized := $icon.Fill (printf "%sx%s Center" (string .size) (string .size)) }}
-{{ return $icon_resized }}
+{{ $iconResized := $icon.Fill (printf "%sx%s Center" (string .size) (string .size)) }}
+{{ return $iconResized }}
{{ end }}
-{{- partial "schema.html" . }}
-{{- partial "opengraph.html" . }}
+{{- partial "components/schema" . }}
+{{- partial "components/opengraph" . }}
{{- range .AlternativeOutputFormats }}
{{- printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
{{- end }} \ No newline at end of file
diff --git a/layouts/partials/horizontal_summary.html b/layouts/partials/horizontal_summary.html
deleted file mode 100644
index d95cb52..0000000
--- a/layouts/partials/horizontal_summary.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<div class="flex flex-col-reverse lg:flex-row justify-between">
- {{ $featured := partial "get_featured" . }}
- <div class="w-full {{ with $featured }}lg:w-2/3{{ end }}">
- <div class="my-2">
- <div class="mb-4">
- <a href="{{ .Permalink }}" class="font-bold text-xl hover:text-eureka">{{ .LinkTitle }}</a>
- </div>
- <div class="content">
- {{ .Summary | plainify }}
- </div>
- </div>
- {{ if eq .Type "docs" }}
- <div class="px-6 pt-4">
- {{ range $index, $value := first 3 .Pages }}
- {{ if gt $index 0 }}
- <div class="-mx-4 my-4 border-t"></div>
- {{ end -}}
- <div class="">
- <div class="mb-2">
- <a href="{{ .Permalink }}" class="font-semibold hover:text-eureka">{{ .LinkTitle }}</a>
- </div>
- <div class="">
- {{- .Summary | plainify -}}
- </div>
- </div>
- {{ end }}
- <div class="pt-6 hover:text-eureka">
- <a href="{{ .Permalink }}" class="font-semibold">{{ i18n "readMore" }}</a>
- <i class="fas fa-caret-right ml-1"></i>
- </div>
-
- </div>
- {{ else }}
- {{ partial "post_metadata.html" . }}
- {{ end }}
- </div>
-
- {{ with $featured }}
- <div class="w-full lg:w-1/3 mb-4 lg:mb-0 lg:ml-8">
- {{ . }}
- </div>
- {{ end }}
-</div> \ No newline at end of file
diff --git a/layouts/partials/stacked_summary.html b/layouts/partials/stacked_summary.html
deleted file mode 100644
index b354d40..0000000
--- a/layouts/partials/stacked_summary.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<div class="bg-secondary-bg rounded overflow-hidden hover:shadow-lg transition ease-in-out duration-200">
- {{ $featured := partial "get_featured" . }}
- {{ with $featured }}
- {{ . }}
- {{ end }}
- <div class="px-6 pt-6">
- <div class="font-bold text-xl text-primary-text mb-2">
- <a href="{{ .Permalink }}" class="hover:text-eureka">{{ .LinkTitle }}</a>
- </div>
- <div class="">
- {{- .Summary | plainify -}}
- </div>
- </div>
- <div class="px-6 pb-2">
- {{ partial "post_metadata.html" . }}
- </div>
-</div> \ No newline at end of file
diff --git a/layouts/partials/utils/get-featured.html b/layouts/partials/utils/get-featured.html
new file mode 100644
index 0000000..89483ae
--- /dev/null
+++ b/layouts/partials/utils/get-featured.html
@@ -0,0 +1,9 @@
+{{ $video := partial "utils/get-video" (dict "context" . "url" .Params.featuredVideo "keyword" "*featured*") }}
+{{ $image := partial "utils/get-image" (dict "context" . "url" .Params.featuredImage "keyword" "*featured*") }}
+{{ $featured := ""}}
+{{ if $video }}
+{{ $featured = $video }}
+{{ else if $image }}
+{{ $featured = print "<img src=\"" $image "\" class=\"w-full\" alt=\"Featured Image\">" | safeHTML }}
+{{ end }}
+{{ return $featured }} \ No newline at end of file
diff --git a/layouts/partials/get_image.html b/layouts/partials/utils/get-image.html
index 59785f2..59785f2 100644
--- a/layouts/partials/get_image.html
+++ b/layouts/partials/utils/get-image.html
diff --git a/layouts/partials/utils/get-summary.html b/layouts/partials/utils/get-summary.html
new file mode 100644
index 0000000..311acdf
--- /dev/null
+++ b/layouts/partials/utils/get-summary.html
@@ -0,0 +1,29 @@
+<div class="mb-4">
+ <a href="{{ .Permalink }}" class="font-bold text-xl hover:text-eureka">{{ .LinkTitle }}</a>
+</div>
+<div class="content">
+ {{ .Summary | plainify }}
+</div>
+{{ if eq .Type "docs" }}
+<div class="px-6 pt-4">
+ {{ range $index, $value := first 3 .Pages }}
+ {{ if gt $index 0 }}
+ <div class="-mx-4 my-4 border-t"></div>
+ {{ end -}}
+ <div class="">
+ <div class="mb-2">
+ <a href="{{ .Permalink }}" class="font-semibold hover:text-eureka">{{ .LinkTitle }}</a>
+ </div>
+ <div class="">
+ {{- .Summary | plainify -}}
+ </div>
+ </div>
+ {{ end }}
+ <div class="pt-6 hover:text-eureka">
+ <a href="{{ .Permalink }}" class="font-semibold">{{ i18n "readMore" }}</a>
+ <i class="fas fa-caret-right ml-1"></i>
+ </div>
+</div>
+{{ else }}
+{{ partial "components/post-metadata" . }}
+{{ end }} \ No newline at end of file
diff --git a/layouts/partials/get_video.html b/layouts/partials/utils/get-video.html
index a0a1cd9..a0a1cd9 100644
--- a/layouts/partials/get_video.html
+++ b/layouts/partials/utils/get-video.html
diff --git a/layouts/partials/utils/hyphenate.html b/layouts/partials/utils/hyphenate.html
new file mode 100644
index 0000000..9533068
--- /dev/null
+++ b/layouts/partials/utils/hyphenate.html
@@ -0,0 +1 @@
+{{ return replace . "_" "-" }} \ No newline at end of file
diff --git a/layouts/partials/utils/standardize-classes.html b/layouts/partials/utils/standardize-classes.html
new file mode 100644
index 0000000..035943c
--- /dev/null
+++ b/layouts/partials/utils/standardize-classes.html
@@ -0,0 +1,4 @@
+{{ $classes := replaceRE " +" " " . }}
+{{ $classes = strings.TrimLeft " " $classes }}
+{{ $classes = strings.TrimRight " " $classes }}
+{{ return $classes }} \ No newline at end of file
diff --git a/layouts/partials/widgets/about.html b/layouts/partials/widgets/about.html
index 744527f..e761c53 100644
--- a/layouts/partials/widgets/about.html
+++ b/layouts/partials/widgets/about.html
@@ -1,5 +1,5 @@
<div class="flex flex-col lg:flex-row items-center justify-center py-12">
- {{ $img := partial "get_image.html" (dict "context" . "url" .Params.avatar "keyword" "*avatar*")}}
+ {{ $img := partial "utils/get-image" (dict "context" . "url" .Params.avatar "keyword" "*avatar*")}}
{{ with $img }}
<div class="w-48 mx-auto lg:-my-8 lg:ml-0 lg:mr-8 lg:pr-8 lg:py-8 lg:border-r">
<img src="{{ . }}" class="rounded-full" alt="Avatar">
@@ -34,10 +34,19 @@
<div class="flex lg:flex-col justify-center items-end ml-8">
{{ $brand := $.Param "social"}}
{{ range $brand }}
- {{ $src := print .icon_pack " fa-" .icon }}
+ {{/* Deprecation warning(v1.0.0) starts */}}
+ {{ if .icon_pack }}
+ {{ warnf "Param 'icon_pack' in %q is deprecated and will be removed in Eureka v1.0.0. Use 'iconPack' instead." $.File.Path }}
+ {{ end }}
+ {{ $iconPack := .iconPack | default .icon_pack }}
+ {{/* Deprecation warning(v1.0.0) ends */}}
+ {{ $src := print $iconPack " fa-" .icon }}
<div class="pb-2 pr-4 lg:pr-0 pt-4 lg:pt-0">
<a href="{{ .url }}"><i class="{{ print $src }}"></i></a>
</div>
{{ end }}
</div>
+</div>
+<div class="content">
+ {{ .Content }}
</div> \ No newline at end of file
diff --git a/layouts/partials/widgets/blank.html b/layouts/partials/widgets/blank.html
new file mode 100644
index 0000000..fb3ffc2
--- /dev/null
+++ b/layouts/partials/widgets/blank.html
@@ -0,0 +1 @@
+{{ .Content }} \ No newline at end of file
diff --git a/layouts/partials/widgets/details.html b/layouts/partials/widgets/details.html
deleted file mode 100644
index df381b0..0000000
--- a/layouts/partials/widgets/details.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="content pb-20">
- {{ .Content }}
-</div> \ No newline at end of file
diff --git a/layouts/partials/widgets/pages.html b/layouts/partials/widgets/pages.html
new file mode 100644
index 0000000..be201b0
--- /dev/null
+++ b/layouts/partials/widgets/pages.html
@@ -0,0 +1,49 @@
+{{ if not .Params.widget.sidebar.position }}
+<h2 class=" font-bold text-3xl my-4">{{ .Params.Title }}</h2>
+{{ end }}
+{{ if eq .Params.style "plain" }}
+{{ partial "widgets/pages-plain" . }}
+{{ else if eq .Params.style "masonry" }}
+{{ partial "widgets/pages-masonry" . }}
+{{ else }}
+{{ partial "widgets/pages-card" . }}
+{{ end }}
+
+{{ define "partials/widgets/pages-get" }}
+{{- $section := .Site.GetPage .Params.section }}
+{{ $pages := $section.Pages }}
+{{ $count := .Params.count | default 5 }}
+{{ with $count }}
+{{ $pages = first $count $pages }}
+{{ end }}
+{{ return $pages }}
+{{ end }}
+
+{{ define "partials/widgets/pages-plain" }}
+{{ $pages := partial "widgets/pages-get" . }}
+{{ partial "components/summary-list-plain" $pages }}
+<div class="pt-2 hover:text-eureka">
+ <a href="{{ .Permalink }}" class="font-semibold">{{ i18n "readMore" }}</a>
+ <i class="fas fa-caret-right ml-1"></i>
+</div>
+{{ end }}
+
+{{ define "partials/widgets/pages-card" }}
+{{ $pages := partial "widgets/pages-get" . }}
+<div class="overflow-hidden">
+ {{ partial "components/summary-list-card" $pages }}
+ <div class="px-8 pt-2 hover:text-eureka">
+ <a href="{{ .Permalink }}" class="font-semibold">{{ i18n "readMore" }}</a>
+ <i class="fas fa-caret-right ml-1"></i>
+ </div>
+</div>
+{{ end }}
+
+{{ define "partials/widgets/pages-masonry" }}
+<div class="pb-2 text-right hover:text-eureka">
+ <a href="{{ .Permalink }}" class="font-semibold">{{ i18n "readMore" }}</a>
+ <i class="fas fa-caret-right ml-1"></i>
+</div>
+{{ $pages := partial "widgets/pages-get" . }}
+{{ partial "components/summary-list-masonry" $pages }}
+{{ end }} \ No newline at end of file
diff --git a/layouts/partials/widgets/vintage.html b/layouts/partials/widgets/vintage.html
new file mode 100644
index 0000000..9075f4b
--- /dev/null
+++ b/layouts/partials/widgets/vintage.html
@@ -0,0 +1,21 @@
+<div class="grid grid-cols-9 grid-rows-5 h-(screen-16)">
+ {{- $imgLeft := partial "utils/get-image" (dict "context" . "url" .Params.imgLeft)}}
+ {{- with $imgLeft }}
+ <div class="col-start-2 col-span-4 row-start-3 row-span-2 bg-local bg-cover z-10 shadow-2xl"
+ style="background-image: url({{ . }});"></div>
+ {{- end }}
+
+ <div class="col-start-3 col-span-5 row-start-2 row-span-3 z-20">
+ <div class="flex flex-col items-center justify-center min-h-full">
+ <div class="bg-white bg-opacity-75 shadow-2xl -m-12 p-12">
+ <span class="font-bold text-black text-opacity-75 text-2xl md:text-3xl">{{ .Params.slogan }}</span>
+ </div>
+ </div>
+ </div>
+ {{- $imgRight := partial "utils/get-image" (dict "context" . "url" .Params.imgRight)}}
+ {{- with $imgRight }}
+ <div class="col-start-5 col-span-4 row-start-2 row-span-2 bg-local bg-cover shadow-2xl"
+ style="background-image: url({{ . }});">
+ </div>
+ {{- end }}
+</div> \ No newline at end of file
diff --git a/resources/_gen/assets/css/css/eureka.css_fc3f76d7bee2760c3a903059afc3d9b2.content b/resources/_gen/assets/css/css/eureka.css_fc3f76d7bee2760c3a903059afc3d9b2.content
index b174001..3644c74 100644
--- a/resources/_gen/assets/css/css/eureka.css_fc3f76d7bee2760c3a903059afc3d9b2.content
+++ b/resources/_gen/assets/css/css/eureka.css_fc3f76d7bee2760c3a903059afc3d9b2.content
@@ -1 +1 @@
-/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;line-height:1.5}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e2e8f0}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}button,[role=button]{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}:root{font-family:Lora,Noto Serif SC,serif;background-color:var(--color-primary-bg);color:var(--color-primary-text);--color-eureka: #38B2AC;--color-primary-bg: rgba(242,242,247,1.00);--color-secondary-bg: rgba(255,255,255,1.00);--color-tertiary-bg: rgba(242,242,247,1.00);--color-primary-text: rgba(0,0,0,0.85);--color-secondary-text: rgba(0,0,0,0.7);--color-tertiary-text: rgba(0,0,0,0.55)}.dark{--color-eureka: #38B2AC;--color-primary-bg: rgba(0,0,0,1.00);--color-secondary-bg: rgba(28,28,30,1.00);--color-tertiary-bg: rgba(44,44,46,1.00);--color-primary-text: rgba(255,255,255,0.85);--color-secondary-text: rgba(255,255,255,0.7);--color-tertiary-text: rgba(255,255,255,0.55)}a:hover{color:var(--color-eureka)}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}.content{color:var(--color-primary-text);line-height:1.5;word-wrap:break-word;overflow-wrap:break-word}.content>*+*{margin-top:0;margin-bottom:1rem}.content li+li{margin-top:.25rem}.content li>p+p{margin-top:1.5rem}.content strong{font-weight:600}.content a{color:var(--color-eureka)}.content a:hover{color:var(--color-eureka);text-decoration:underline}.content strong a{font-weight:700}.content h1{line-height:1.25;border-bottom-width:1px;font-size:2.25rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem;padding-bottom:.5rem}.content h2{line-height:1.25;border-bottom-width:1px;font-size:1.5rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem;padding-bottom:.5rem}.content h3{line-height:1.375;font-size:1.125rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h4{line-height:1;font-size:1rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h5{line-height:1.25;font-size:.875rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h6{line-height:1.25;font-size:.875rem;font-weight:600;color:var(--color-secondary-text);margin-bottom:1rem;margin-top:1.5rem}.content blockquote{font-size:1rem;border-left-width:4px;border-color:var(--color-tertiary-text);padding-left:1rem;padding-right:1rem;color:var(--color-secondary-text)}.content code{font-family:SFMono-Regular,Menlo;font-size:.875rem;color:var(--color-tertiary-text);display:inline;background-color:var(--color-tertiary-bg);border-radius:.25rem;padding:.25rem}.content pre{background-color:var(--color-tertiary-bg);border-radius:.25rem;padding:1rem}.content pre code{display:block;background-color:transparent;padding:0;overflow:auto;border-radius:0}.content ul{font-size:1rem;padding-left:2rem;list-style-type:disc}.content ol{font-size:1rem;padding-left:2rem;list-style-type:decimal}.content kbd{font-size:.75rem;display:inline-block;border-radius:.25rem;border-width:1px;padding:.25rem;vertical-align:middle;font-weight:400;font-family:SFMono-Regular,Menlo;box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.content table{display:block;font-size:1rem;border-color:var(--color-secondary-text);overflow:auto}.content th{border-width:1px;padding-top:.25rem;padding-bottom:.25rem;padding-left:.75rem;padding-right:.75rem}.content td{border-width:1px;padding-top:.25rem;padding-bottom:.25rem;padding-left:.75rem;padding-right:.75rem}.content .katex *{border-color:var(--color-primary-text)}.content *:target{padding-top:4rem;margin-top:-4rem}.sticky-toc{position:-webkit-sticky;position:sticky;top:8rem;z-index:0;transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:300ms}.sticky-toc a{color:var(--color-primary-text);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:200ms}.sticky-toc a:hover{color:var(--color-eureka)}.sticky-toc ul{font-size:1rem;padding-left:2rem;list-style-type:disc}.sticky-toc ol{font-size:1rem;padding-left:2rem;list-style-type:decimal}.sticky-toc li+li{margin-top:.25rem}.sticky-toc li>p+p{margin-top:1.5rem}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.pagination{display:flex;justify-content:center}.pagination .page-item{display:flex;align-items:center}.pagination .page-item .page-link{padding:.5rem;margin:.5rem}.pagination .active{color:var(--color-eureka)}.pagination .page-item:not(.disabled):hover{color:var(--color-eureka)}.divide-y>:not(template)~:not(template){--divide-y-reverse: 0 !important;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--divide-y-reverse))!important}.bg-local{background-attachment:local!important}.bg-white{--bg-opacity: 1 !important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}.bg-primary-bg{background-color:var(--color-primary-bg)!important}.bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.bg-tertiary-bg{background-color:var(--color-tertiary-bg)!important}.bg-opacity-75{--bg-opacity: 0.75 !important}.bg-cover{background-size:cover!important}.border-tertiary-bg{border-color:var(--color-tertiary-bg)!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.border{border-width:1px!important}.border-t{border-top-width:1px!important}.border-r{border-right-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.cursor-default{cursor:default!important}.cursor-pointer{cursor:pointer!important}.block{display:block!important}.inline-block{display:inline-block!important}.flex{display:flex!important}.table{display:table!important}.grid{display:grid!important}.hidden{display:none!important}.flex-row{flex-direction:row!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.flex-grow{flex-grow:1!important}.font-semibold{font-weight:600!important}.font-bold{font-weight:700!important}.h-4{height:1rem!important}.h-24{height:6rem!important}.h-full{height:100%!important}.h-screen{height:100vh!important}.text-sm{font-size:.875rem!important}.text-lg{font-size:1.125rem!important}.text-xl{font-size:1.25rem!important}.text-2xl{font-size:1.5rem!important}.text-3xl{font-size:1.875rem!important}.leading-tight{line-height:1.25!important}.leading-normal{line-height:1.5!important}.-m-12{margin:-3rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-8{margin-top:2rem!important;margin-bottom:2rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.ml-0{margin-left:0!important}.mr-1{margin-right:.25rem!important}.ml-1{margin-left:.25rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mr-6{margin-right:1.5rem!important}.mr-8{margin-right:2rem!important}.ml-8{margin-left:2rem!important}.mt-12{margin-top:3rem!important}.mr-auto{margin-right:auto!important}.-mr-2{margin-right:-.5rem!important}.-mt-10{margin-top:-2.5rem!important}.-mt-16{margin-top:-4rem!important}.max-w-screen-xl{max-width:1280px!important}.min-h-16{min-height:4rem!important}.min-h-full{min-height:100%!important}.min-h-screen{min-height:100vh!important}.opacity-0{opacity:0!important}.overflow-hidden{overflow:hidden!important}.overflow-y-auto{overflow-y:auto!important}.p-2{padding:.5rem!important}.p-4{padding:1rem!important}.p-6{padding:1.5rem!important}.p-12{padding:3rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-8{padding-top:2rem!important;padding-bottom:2rem!important}.py-12{padding-top:3rem!important;padding-bottom:3rem!important}.py-32{padding-top:8rem!important;padding-bottom:8rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.pt-2{padding-top:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.pt-6{padding-top:1.5rem!important}.pr-6{padding-right:1.5rem!important}.pb-6{padding-bottom:1.5rem!important}.pl-6{padding-left:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pt-10{padding-top:2.5rem!important}.pt-12{padding-top:3rem!important}.pt-16{padding-top:4rem!important}.pb-20{padding-bottom:5rem!important}.pl-scrollbar{padding-left:calc(100vw - 100%)!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:-webkit-sticky!important;position:sticky!important}.inset-0{top:0!important;right:0!important;bottom:0!important;left:0!important}.left-0{left:0!important}.top-16{top:4rem!important}.right-auto{right:auto!important}.shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}.hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}.text-center{text-align:center!important}.text-black{--text-opacity: 1 !important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}.text-eureka{color:var(--color-eureka)!important}.text-primary-text{color:var(--color-primary-text)!important}.text-tertiary-text{color:var(--color-tertiary-text)!important}.hover\:text-eureka:hover{color:var(--color-eureka)!important}.text-opacity-75{--text-opacity: 0.75 !important}.hover\:underline:hover{text-decoration:underline!important}.w-4{width:1rem!important}.w-24{width:6rem!important}.w-48{width:12rem!important}.w-3\/12{width:25%!important}.w-full{width:100%!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-50{z-index:50!important}.gap-4{grid-gap:1rem!important;gap:1rem!important}.gap-8{grid-gap:2rem!important;gap:2rem!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}.col-span-2{grid-column:span 2/span 2!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-start-2{grid-column-start:2!important}.col-start-3{grid-column-start:3!important}.col-start-5{grid-column-start:5!important}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}.row-span-2{grid-row:span 2/span 2!important}.row-span-3{grid-row:span 3/span 3!important}.row-start-2{grid-row-start:2!important}.row-start-3{grid-row-start:3!important}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important}.ease-in-out{transition-timing-function:cubic-bezier(0.4,0,0.2,1)!important}.duration-200{transition-duration:200ms!important}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}@-webkit-keyframes ping{75%,100%{transform:scale(2);opacity:0}}@keyframes ping{75%,100%{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}@keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}@media(min-width:640px){.sm\:container{width:100%}@media(min-width:640px){.sm\:container{max-width:640px}}@media(min-width:768px){.sm\:container{max-width:768px}}@media(min-width:1024px){.sm\:container{max-width:1024px}}@media(min-width:1280px){.sm\:container{max-width:1280px}}}@media(min-width:768px){.md\:container{width:100%}@media(min-width:640px){.md\:container{max-width:640px}}@media(min-width:768px){.md\:container{max-width:768px}}@media(min-width:1024px){.md\:container{max-width:1024px}}@media(min-width:1280px){.md\:container{max-width:1280px}}.md\:bg-transparent{background-color:transparent!important}.md\:bg-primary-bg{background-color:var(--color-primary-bg)!important}.md\:bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.md\:border-b-0{border-bottom-width:0!important}.md\:border-b{border-bottom-width:1px!important}.md\:block{display:block!important}.md\:inline-block{display:inline-block!important}.md\:flex{display:flex!important}.md\:hidden{display:none!important}.md\:flex-row{flex-direction:row!important}.md\:items-center{align-items:center!important}.md\:justify-end{justify-content:flex-end!important}.md\:justify-between{justify-content:space-between!important}.md\:flex-grow{flex-grow:1!important}.md\:text-3xl{font-size:1.875rem!important}.md\:mx-0{margin-left:0!important;margin-right:0!important}.md\:mt-0{margin-top:0!important}.md\:mr-4{margin-right:1rem!important}.md\:max-h-doc-sidebar{max-height:calc(100vh - 4rem - var(--height-doc-title,4rem))!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:px-16{padding-left:4rem!important;padding-right:4rem!important}.md\:pt-0{padding-top:0!important}.md\:pb-0{padding-bottom:0!important}.md\:pt-8{padding-top:2rem!important}.md\:right-0{right:0!important}.md\:left-auto{left:auto!important}.md\:text-right{text-align:right!important}.md\:text-primary-text{color:var(--color-primary-text)!important}.md\:w-auto{width:auto!important}.md\:w-1\/4{width:25%!important}.md\:w-3\/4{width:75%!important}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media(min-width:1024px){.lg\:container{width:100%}@media(min-width:640px){.lg\:container{max-width:640px}}@media(min-width:768px){.lg\:container{max-width:768px}}@media(min-width:1024px){.lg\:container{max-width:1024px}}@media(min-width:1280px){.lg\:container{max-width:1280px}}.lg\:border-r{border-right-width:1px!important}.lg\:block{display:block!important}.lg\:flex-row{flex-direction:row!important}.lg\:flex-col{flex-direction:column!important}.lg\:-my-8{margin-top:-2rem!important;margin-bottom:-2rem!important}.lg\:mb-0{margin-bottom:0!important}.lg\:ml-0{margin-left:0!important}.lg\:mr-8{margin-right:2rem!important}.lg\:ml-8{margin-left:2rem!important}.lg\:px-4{padding-left:1rem!important;padding-right:1rem!important}.lg\:py-8{padding-top:2rem!important;padding-bottom:2rem!important}.lg\:px-32{padding-left:8rem!important;padding-right:8rem!important}.lg\:pt-0{padding-top:0!important}.lg\:pr-0{padding-right:0!important}.lg\:pr-8{padding-right:2rem!important}.lg\:pt-12{padding-top:3rem!important}.lg\:w-1\/3{width:33.333333%!important}.lg\:w-2\/3{width:66.666667%!important}.lg\:w-1\/4{width:25%!important}.lg\:w-3\/4{width:75%!important}.lg\:w-1\/5{width:20%!important}.lg\:w-4\/5{width:80%!important}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}.lg\:col-span-6{grid-column:span 6/span 6!important}.lg\:col-start-2{grid-column-start:2!important}}@media(min-width:1280px){.xl\:container{width:100%}@media(min-width:640px){.xl\:container{max-width:640px}}@media(min-width:768px){.xl\:container{max-width:768px}}@media(min-width:1024px){.xl\:container{max-width:1024px}}@media(min-width:1280px){.xl\:container{max-width:1280px}}.xl\:mx-16{margin-left:4rem!important;margin-right:4rem!important}.xl\:px-8{padding-left:2rem!important;padding-right:2rem!important}.xl\:w-2\/12{width:16.666667%!important}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}} \ No newline at end of file
+/*!normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css*/html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;line-height:1.5}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e2e8f0}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}button,[role=button]{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}:root{font-family:Lora,Noto Serif SC,serif;background-color:var(--color-primary-bg);color:var(--color-primary-text);--color-eureka: #38B2AC;--color-primary-bg: rgba(242,242,247,1.00);--color-secondary-bg: rgba(255,255,255,1.00);--color-tertiary-bg: rgba(242,242,247,1.00);--color-primary-text: rgba(0,0,0,0.85);--color-secondary-text: rgba(0,0,0,0.7);--color-tertiary-text: rgba(0,0,0,0.55)}.dark{--color-eureka: #38B2AC;--color-primary-bg: rgba(0,0,0,1.00);--color-secondary-bg: rgba(28,28,30,1.00);--color-tertiary-bg: rgba(44,44,46,1.00);--color-primary-text: rgba(255,255,255,0.85);--color-secondary-text: rgba(255,255,255,0.7);--color-tertiary-text: rgba(255,255,255,0.55)}a:hover{color:var(--color-eureka)}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}.content{color:var(--color-primary-text);line-height:1.5;word-wrap:break-word;overflow-wrap:break-word}.content>*+*{margin-top:0;margin-bottom:1rem}.content li+li{margin-top:.25rem}.content li>p+p{margin-top:1.5rem}.content strong{font-weight:600}.content a{color:var(--color-eureka)}.content a:hover{color:var(--color-eureka);text-decoration:underline}.content strong a{font-weight:700}.content h1{line-height:1.25;border-bottom-width:1px;font-size:2.25rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem;padding-bottom:.5rem}.content h2{line-height:1.25;border-bottom-width:1px;font-size:1.5rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem;padding-bottom:.5rem}.content h3{line-height:1.375;font-size:1.125rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h4{line-height:1;font-size:1rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h5{line-height:1.25;font-size:.875rem;font-weight:600;margin-bottom:1rem;margin-top:1.5rem}.content h6{line-height:1.25;font-size:.875rem;font-weight:600;color:var(--color-secondary-text);margin-bottom:1rem;margin-top:1.5rem}.content blockquote{font-size:1rem;border-left-width:4px;border-color:var(--color-tertiary-text);padding-left:1rem;padding-right:1rem;color:var(--color-secondary-text)}.content code{font-family:SFMono-Regular,Menlo;font-size:.875rem;color:var(--color-tertiary-text);display:inline;background-color:var(--color-tertiary-bg);border-radius:.25rem;padding:.25rem}.content pre{background-color:var(--color-tertiary-bg);border-radius:.25rem;padding:1rem}.content pre code{display:block;background-color:transparent;padding:0;overflow:auto;border-radius:0}.content ul{font-size:1rem;padding-left:2rem;list-style-type:disc}.content ol{font-size:1rem;padding-left:2rem;list-style-type:decimal}.content kbd{font-size:.75rem;display:inline-block;border-radius:.25rem;border-width:1px;padding:.25rem;vertical-align:middle;font-weight:400;font-family:SFMono-Regular,Menlo;box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.content table{display:block;font-size:1rem;border-color:var(--color-secondary-text);overflow:auto}.content th{border-width:1px;padding-top:.25rem;padding-bottom:.25rem;padding-left:.75rem;padding-right:.75rem}.content td{border-width:1px;padding-top:.25rem;padding-bottom:.25rem;padding-left:.75rem;padding-right:.75rem}.content .katex *{border-color:var(--color-primary-text)}.content *:target{padding-top:4rem;margin-top:-4rem}.sticky-toc{position:-webkit-sticky;position:sticky;top:8rem;z-index:0;transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:300ms}.sticky-toc a{color:var(--color-primary-text);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:200ms}.sticky-toc a:hover{color:var(--color-eureka)}.sticky-toc ul{font-size:1rem;padding-left:2rem;list-style-type:disc}.sticky-toc ol{font-size:1rem;padding-left:2rem;list-style-type:decimal}.sticky-toc li+li{margin-top:.25rem}.sticky-toc li>p+p{margin-top:1.5rem}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.pagination{display:flex;justify-content:center}.pagination .page-item{display:flex;align-items:center}.pagination .page-item .page-link{padding:.5rem;margin:.5rem}.pagination .active{color:var(--color-eureka)}.pagination .page-item:not(.disabled):hover{color:var(--color-eureka)}.divide-y>:not(template)~:not(template){--divide-y-reverse: 0 !important;border-top-width:calc(1px * calc(1 - var(--divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--divide-y-reverse))!important}.bg-fixed{background-attachment:fixed!important}.bg-local{background-attachment:local!important}.bg-scroll{background-attachment:scroll!important}.bg-white{--bg-opacity: 1 !important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important}.bg-primary-bg{background-color:var(--color-primary-bg)!important}.bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.bg-tertiary-bg{background-color:var(--color-tertiary-bg)!important}.bg-opacity-75{--bg-opacity: 0.75 !important}.bg-bottom{background-position:bottom!important}.bg-center{background-position:50%!important}.bg-left{background-position:0!important}.bg-right{background-position:100%!important}.bg-top{background-position:top!important}.bg-auto{background-size:auto!important}.bg-cover{background-size:cover!important}.bg-contain{background-size:contain!important}.border-tertiary-bg{border-color:var(--color-tertiary-bg)!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.border{border-width:1px!important}.border-t{border-top-width:1px!important}.border-r{border-right-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.cursor-default{cursor:default!important}.cursor-pointer{cursor:pointer!important}.block{display:block!important}.inline-block{display:inline-block!important}.flex{display:flex!important}.table{display:table!important}.grid{display:grid!important}.hidden{display:none!important}.flex-row{flex-direction:row!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.flex-none{flex:none!important}.flex-grow{flex-grow:1!important}.font-semibold{font-weight:600!important}.font-bold{font-weight:700!important}.h-4{height:1rem!important}.h-24{height:6rem!important}.h-64{height:16rem!important}.h-96{height:24rem!important}.h-128{height:32rem!important}.h-160{height:40rem!important}.h-full{height:100%!important}.h-\(screen-16\){height:calc(100vh - 4rem)!important}.text-sm{font-size:.875rem!important}.text-lg{font-size:1.125rem!important}.text-xl{font-size:1.25rem!important}.text-2xl{font-size:1.5rem!important}.text-3xl{font-size:1.875rem!important}.leading-tight{line-height:1.25!important}.leading-normal{line-height:1.5!important}.-m-12{margin:-3rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-6{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-8{margin-top:2rem!important;margin-bottom:2rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.-mx-2{margin-left:-.5rem!important;margin-right:-.5rem!important}.-mx-4{margin-left:-1rem!important;margin-right:-1rem!important}.ml-0{margin-left:0!important}.mr-1{margin-right:.25rem!important}.ml-1{margin-left:.25rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mr-6{margin-right:1.5rem!important}.mb-6{margin-bottom:1.5rem!important}.mr-8{margin-right:2rem!important}.ml-8{margin-left:2rem!important}.mt-12{margin-top:3rem!important}.mr-auto{margin-right:auto!important}.-mr-2{margin-right:-.5rem!important}.-mt-10{margin-top:-2.5rem!important}.-mt-16{margin-top:-4rem!important}.max-w-screen-xl{max-width:1280px!important}.min-h-16{min-height:4rem!important}.min-h-full{min-height:100%!important}.min-h-screen{min-height:100vh!important}.opacity-0{opacity:0!important}.overflow-hidden{overflow:hidden!important}.overflow-y-auto{overflow-y:auto!important}.p-2{padding:.5rem!important}.p-4{padding:1rem!important}.p-6{padding:1.5rem!important}.p-12{padding:3rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-8{padding-top:2rem!important;padding-bottom:2rem!important}.px-8{padding-left:2rem!important;padding-right:2rem!important}.py-12{padding-top:3rem!important;padding-bottom:3rem!important}.py-32{padding-top:8rem!important;padding-bottom:8rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.pt-2{padding-top:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.pt-6{padding-top:1.5rem!important}.pr-6{padding-right:1.5rem!important}.pb-6{padding-bottom:1.5rem!important}.pl-6{padding-left:1.5rem!important}.pb-8{padding-bottom:2rem!important}.pt-10{padding-top:2.5rem!important}.pt-12{padding-top:3rem!important}.pt-16{padding-top:4rem!important}.pb-20{padding-bottom:5rem!important}.pl-scrollbar{padding-left:calc(100vw - 100%)!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:-webkit-sticky!important;position:sticky!important}.inset-0{top:0!important;right:0!important;bottom:0!important;left:0!important}.left-0{left:0!important}.top-16{top:4rem!important}.right-auto{right:auto!important}.shadow-sm{box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)!important}.shadow-2xl{box-shadow:0 25px 50px -12px rgba(0,0,0,.25)!important}.hover\:shadow-lg:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-black{--text-opacity: 1 !important;color:#000!important;color:rgba(0,0,0,var(--text-opacity))!important}.text-eureka{color:var(--color-eureka)!important}.text-primary-text{color:var(--color-primary-text)!important}.text-tertiary-text{color:var(--color-tertiary-text)!important}.hover\:text-eureka:hover{color:var(--color-eureka)!important}.text-opacity-75{--text-opacity: 0.75 !important}.hover\:underline:hover{text-decoration:underline!important}.w-4{width:1rem!important}.w-24{width:6rem!important}.w-48{width:12rem!important}.w-3\/12{width:25%!important}.w-full{width:100%!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-30{z-index:30!important}.z-40{z-index:40!important}.z-50{z-index:50!important}.gap-4{grid-gap:1rem!important;gap:1rem!important}.gap-8{grid-gap:2rem!important;gap:2rem!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))!important}.col-span-2{grid-column:span 2/span 2!important}.col-span-4{grid-column:span 4/span 4!important}.col-span-5{grid-column:span 5/span 5!important}.col-start-2{grid-column-start:2!important}.col-start-3{grid-column-start:3!important}.col-start-5{grid-column-start:5!important}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))!important}.row-span-2{grid-row:span 2/span 2!important}.row-span-3{grid-row:span 3/span 3!important}.row-start-2{grid-row-start:2!important}.row-start-3{grid-row-start:3!important}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important}.ease-in-out{transition-timing-function:cubic-bezier(0.4,0,0.2,1)!important}.duration-200{transition-duration:200ms!important}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}@-webkit-keyframes ping{75%,100%{transform:scale(2);opacity:0}}@keyframes ping{75%,100%{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}@keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}@media(min-width:640px){.sm\:container{width:100%}@media(min-width:640px){.sm\:container{max-width:640px}}@media(min-width:768px){.sm\:container{max-width:768px}}@media(min-width:1024px){.sm\:container{max-width:1024px}}@media(min-width:1280px){.sm\:container{max-width:1280px}}}@media(min-width:768px){.md\:container{width:100%}@media(min-width:640px){.md\:container{max-width:640px}}@media(min-width:768px){.md\:container{max-width:768px}}@media(min-width:1024px){.md\:container{max-width:1024px}}@media(min-width:1280px){.md\:container{max-width:1280px}}.md\:bg-transparent{background-color:transparent!important}.md\:bg-primary-bg{background-color:var(--color-primary-bg)!important}.md\:bg-secondary-bg{background-color:var(--color-secondary-bg)!important}.md\:border-b-0{border-bottom-width:0!important}.md\:border-b{border-bottom-width:1px!important}.md\:block{display:block!important}.md\:inline-block{display:inline-block!important}.md\:flex{display:flex!important}.md\:hidden{display:none!important}.md\:flex-row{flex-direction:row!important}.md\:items-center{align-items:center!important}.md\:justify-end{justify-content:flex-end!important}.md\:justify-between{justify-content:space-between!important}.md\:flex-grow{flex-grow:1!important}.md\:text-3xl{font-size:1.875rem!important}.md\:mx-0{margin-left:0!important;margin-right:0!important}.md\:mt-0{margin-top:0!important}.md\:mr-4{margin-right:1rem!important}.md\:max-h-doc-sidebar{max-height:calc(100vh - 4rem - var(--height-doc-title,4rem))!important}.md\:px-4{padding-left:1rem!important;padding-right:1rem!important}.md\:px-8{padding-left:2rem!important;padding-right:2rem!important}.md\:px-16{padding-left:4rem!important;padding-right:4rem!important}.md\:pt-0{padding-top:0!important}.md\:pb-0{padding-bottom:0!important}.md\:pt-8{padding-top:2rem!important}.md\:right-0{right:0!important}.md\:left-auto{left:auto!important}.md\:text-right{text-align:right!important}.md\:text-primary-text{color:var(--color-primary-text)!important}.md\:w-auto{width:auto!important}.md\:w-1\/4{width:25%!important}.md\:w-3\/4{width:75%!important}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}}@media(min-width:1024px){.lg\:container{width:100%}@media(min-width:640px){.lg\:container{max-width:640px}}@media(min-width:768px){.lg\:container{max-width:768px}}@media(min-width:1024px){.lg\:container{max-width:1024px}}@media(min-width:1280px){.lg\:container{max-width:1280px}}.lg\:border-r{border-right-width:1px!important}.lg\:block{display:block!important}.lg\:flex-row{flex-direction:row!important}.lg\:flex-row-reverse{flex-direction:row-reverse!important}.lg\:flex-col{flex-direction:column!important}.lg\:-my-8{margin-top:-2rem!important;margin-bottom:-2rem!important}.lg\:mb-0{margin-bottom:0!important}.lg\:ml-0{margin-left:0!important}.lg\:mr-4{margin-right:1rem!important}.lg\:ml-4{margin-left:1rem!important}.lg\:mr-8{margin-right:2rem!important}.lg\:ml-8{margin-left:2rem!important}.lg\:px-4{padding-left:1rem!important;padding-right:1rem!important}.lg\:py-8{padding-top:2rem!important;padding-bottom:2rem!important}.lg\:px-32{padding-left:8rem!important;padding-right:8rem!important}.lg\:pt-0{padding-top:0!important}.lg\:pr-0{padding-right:0!important}.lg\:pr-8{padding-right:2rem!important}.lg\:pt-12{padding-top:3rem!important}.lg\:w-1\/2{width:50%!important}.lg\:w-1\/3{width:33.333333%!important}.lg\:w-2\/3{width:66.666667%!important}.lg\:w-1\/4{width:25%!important}.lg\:w-3\/4{width:75%!important}.lg\:w-1\/5{width:20%!important}.lg\:w-4\/5{width:80%!important}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))!important}.lg\:col-span-6{grid-column:span 6/span 6!important}.lg\:col-start-2{grid-column-start:2!important}}@media(min-width:1280px){.xl\:container{width:100%}@media(min-width:640px){.xl\:container{max-width:640px}}@media(min-width:768px){.xl\:container{max-width:768px}}@media(min-width:1024px){.xl\:container{max-width:1024px}}@media(min-width:1280px){.xl\:container{max-width:1280px}}.xl\:mx-16{margin-left:4rem!important;margin-right:4rem!important}.xl\:px-8{padding-left:2rem!important;padding-right:2rem!important}.xl\:px-12{padding-left:3rem!important;padding-right:3rem!important}.xl\:w-2\/12{width:16.666667%!important}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}} \ No newline at end of file