From 97e0a6e7e79ff0fad1e9a525efe8652b107ffcf1 Mon Sep 17 00:00:00 2001 From: Ruidy Date: Fri, 31 Dec 2021 10:37:31 -0400 Subject: [PATCH] Doc site (#5) * docs: install compose theme * docs: create collections page * docs: create collections page * docs: change logo Co-authored-by: Ruidy --- .gitmodules | 3 + Makefile | 5 +- docs/.hugo_build.lock | 0 docs/archetypes/default.md | 6 + docs/assets/sass/_variables.sass | 46 ++++ docs/config.toml | 12 + docs/content/docs/_index.md | 12 + docs/content/docs/collections.md | 212 ++++++++++++++++++ ...s_ca26857cefa9076967ab300682271513.content | 3 + ...sass_ca26857cefa9076967ab300682271513.json | 1 + docs/static/logo.png | Bin 0 -> 3438 bytes docs/themes/compose | 1 + docs/underscore.png | Bin 10694 -> 0 bytes 13 files changed, 300 insertions(+), 1 deletion(-) create mode 100644 .gitmodules create mode 100644 docs/.hugo_build.lock create mode 100644 docs/archetypes/default.md create mode 100644 docs/assets/sass/_variables.sass create mode 100644 docs/config.toml create mode 100644 docs/content/docs/_index.md create mode 100644 docs/content/docs/collections.md create mode 100644 docs/resources/_gen/assets/sass/sass/main.sass_ca26857cefa9076967ab300682271513.content create mode 100644 docs/resources/_gen/assets/sass/sass/main.sass_ca26857cefa9076967ab300682271513.json create mode 100644 docs/static/logo.png create mode 160000 docs/themes/compose delete mode 100644 docs/underscore.png diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4a2ae0d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/themes/compose"] + path = docs/themes/compose + url = https://github.com/onweru/compose/ diff --git a/Makefile b/Makefile index d5f5f3d..b6e2835 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,5 @@ test: - docker build . \ No newline at end of file + docker build . + +doc: + cd docs && hugo server -D \ No newline at end of file diff --git a/docs/.hugo_build.lock b/docs/.hugo_build.lock new file mode 100644 index 0000000..e69de29 diff --git a/docs/archetypes/default.md b/docs/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/docs/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/docs/assets/sass/_variables.sass b/docs/assets/sass/_variables.sass new file mode 100644 index 0000000..ff3969a --- /dev/null +++ b/docs/assets/sass/_variables.sass @@ -0,0 +1,46 @@ +html + --color-mode: "light" + --light: #fff + --dark: rgb(28,28,30) + --haze: #f2f5f7 + --bubble: rgb(36,36,38) + --accent: var(--haze) + --bg: var(--light) + --code-bg: var(--accent) + --overlay: var(--light) + --text: #111 + --font: 'Metropolis', sans-serif + --border-color: #eee + --inline-color: darkgoldenrod + --theme: #209CEE + --ease: ease + + @mixin darkmode + --color-mode: "dark" + --theme: #209CEE + --bg: var(--dark) + --text: #eee + --accent: var(--bubble) + --overlay: var(--bubble) + --border-color: transparent + * + box-shadow: none !important + + &[data-mode="dark"] + @include darkmode + .color + &_choice + &::after + background-image: url(../icons/moon.svg) + + &.dark:not([data-mode="light"]) + @media (prefers-color-scheme: dark) + @include darkmode + +%narrow + max-width: 750px + margin: 0 auto + +blockquote + + .highlight_wrap + margin-top: 2.25rem \ No newline at end of file diff --git a/docs/config.toml b/docs/config.toml new file mode 100644 index 0000000..0750f5f --- /dev/null +++ b/docs/config.toml @@ -0,0 +1,12 @@ +baseURL = 'http://example.org/' +languageCode = 'en-us' +title = 'Underscore' +theme = "compose" # edit this if you'ld rather use a fork of this repo +enableRobotsTXT = true +[outputs] +home = ["HTML", "RSS","JSON"] +[params] +logo.lightMode = "logo.png" +logo.darkMode = "logo.png" +author.name = "Ruidy" +author.url = "https://github.com/rjNemo" diff --git a/docs/content/docs/_index.md b/docs/content/docs/_index.md new file mode 100644 index 0000000..90c71a3 --- /dev/null +++ b/docs/content/docs/_index.md @@ -0,0 +1,12 @@ ++++ title = "Underscore" +[data] +baseChartOn = 3 +colors = ["#627c62", "#11819b", "#ef7f1a", "#4e1154"] +columnTitles = ["Section", "Status", "Author"] ++++ + +{{< column >}} + +`underscore` is a `Go` library providing useful functional programming helpers without extending any built-in objects. + +It is mostly a port from the `underscore.js` library based on generics brought by `go1.18`. diff --git a/docs/content/docs/collections.md b/docs/content/docs/collections.md new file mode 100644 index 0000000..6432a0b --- /dev/null +++ b/docs/content/docs/collections.md @@ -0,0 +1,212 @@ +--- +title: "Collections" +date: 2021-12-30T13:24:39-04:00 +--- + +## Each + +`Each` iterates over a slice of elements, yielding each in turn to an action function. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + names := []string{"Alice", "Bob", "Charles"} + res := make([]string, 0) + + u.Each(names, func(n string) { + res = append(res, fmt.Sprintf("Hi %s", n)) + }) + fmt.Println(res) // {"Hi Alice", "Hi Bob", "Hi Charles"} +} +``` + +## Every + +`Every` returns true if all the values in the slice pass the predicate truth test.\ +Short-circuits and stops traversing the slice if a false element is found. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{1, 3, 5, 7, 9} + isOdd := func(n int) bool { return n%2 != 0 } + fmt.Println(u.Every(nums, isOdd)) // true +} +``` + +## Filter + +`Filter` looks through each value in the slice, returning a slice of all the values that pass a truth test (predicate). + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} + isEven := func(n int) bool { return n%2 == 0 } + fmt.Println(u.Filter(nums, isEven)) // {0, 2, 4, 6, 8} +} +``` + +## Find + +Find looks through each value in the slice, returning the first one that passes a truth test (predicate), or the default +value for the type and an error if no value passes the test. The function returns as soon as it finds an acceptable +element, and doesn't traverse the entire slice. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{2, 4, 5, 6, 8, 0} + isOdd := func(n int) bool { return n%2 != 0 } + + n, err := u.Find(nums, isOdd) + fmt.Println(n) // 5 + fmt.Println(err) // nil +} +``` + +## Map + +`Map` produces a new slice of values by mapping each value in the slice through a transform function. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{1, 2, 3} + toSquare := func(n int) int { + return n * n + } + fmt.Println(u.Map(nums, toSquare)) // {1, 4, 9} +} +``` + +## Max + +`Max` returns the maximum value in the slice. This function can currently only compare numbers reliably. This function +uses operator `<`. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{1, 9, 2, 8, 3, 7, 4, 6, 5} + fmt.Println(u.Max(nums)) // 9 +} +``` + +## Min + +`Min` returns the minimum value in the slice. This function can currently only compare numbers reliably. This function +uses operator `<`. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{1, 9, 2, 8, 3, 7, 4, 6, 5} + fmt.Println(u.Min(nums)) // 1 +} +``` + +## Partition + +`Partition` splits the slice into two slices: one whose elements all satisfy predicate and one whose elements all do not +satisfy predicate. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} + isEven := func(n int) bool { return n%2 == 0 } + + evens, odds := u.Partition(nums, isEven) + fmt.Println(evens) // {0, 2, 4, 6, 8} + fmt.Println(odds) // {1, 3, 5, 7, 9} +} +``` + +## Reduce + +`Reduce` combine a list of values into a single value. `acc` is the initial state, and each successive step of it should +be returned by the reduction function. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} + sum := func(n, acc int) int { return n + acc } + fmt.Println(u.Reduce(nums, sum, 0)) // 45 +} +``` + +## Some + +`Some` returns true if any of the values in the slice pass the predicate truth test. Short-circuits and stops traversing +the slice if a true element is found. + +```go +package main + +import ( + "fmt" + u "github.com/rjNemo/underscore" +) + +func main() { + nums := []int{1, 2, 4, 6, 8} + isEven := func(n int) bool { return n%2 == 0 } + fmt.Println(u.Some(nums, isEven)) // true +} +``` \ No newline at end of file diff --git a/docs/resources/_gen/assets/sass/sass/main.sass_ca26857cefa9076967ab300682271513.content b/docs/resources/_gen/assets/sass/sass/main.sass_ca26857cefa9076967ab300682271513.content new file mode 100644 index 0000000..430c50a --- /dev/null +++ b/docs/resources/_gen/assets/sass/sass/main.sass_ca26857cefa9076967ab300682271513.content @@ -0,0 +1,3 @@ +html{--color-mode: "light";--light: #fff;--dark: rgb(28,28,30);--haze: #f2f5f7;--bubble: rgb(36,36,38);--accent: var(--haze);--bg: var(--light);--code-bg: var(--accent);--overlay: var(--light);--text: #111;--font: 'Metropolis', sans-serif;--border-color: #eee;--inline-color: darkgoldenrod;--theme: #209CEE;--ease: ease}html[data-mode="dark"]{--color-mode: "dark";--theme: #209CEE;--bg: var(--dark);--text: #eee;--accent: var(--bubble);--overlay: var(--bubble);--border-color: transparent}html[data-mode="dark"] *{box-shadow:none !important}html[data-mode="dark"] .color_choice::after{background-image:url(../icons/moon.svg)}@media (prefers-color-scheme: dark){html.dark:not([data-mode="light"]){--color-mode: "dark";--theme: #209CEE;--bg: var(--dark);--text: #eee;--accent: var(--bubble);--overlay: var(--bubble);--border-color: transparent}html.dark:not([data-mode="light"]) *{box-shadow:none !important}}blockquote+.highlight_wrap{margin-top:2.25rem}*{box-sizing:border-box;-webkit-appearance:none;margin:0;padding:0}body,html{scroll-behavior:smooth;scroll-padding-top:1rem;font-kerning:normal;-webkit-text-size-adjust:100%;font-size:18px}body{font-family:var(--font);background-color:var(--bg);color:var(--text);line-height:1.5;margin:0 auto;position:relative;font-kerning:normal;display:flex;flex-direction:column;justify-content:space-between;min-height:100vh;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-overflow-scrolling:touch;max-width:1440px}@media screen and (min-width: 1640px){body{max-width:1600px}}a{text-decoration:none;color:inherit}p{padding:0.75rem 0}p:empty{display:none}li,li p{padding:0.25rem 0}blockquote{opacity:0.8;padding:1rem;position:relative;quotes:"“" "”" "‘" "’";margin:0.75rem 0;display:flex;flex-flow:row wrap;background-repeat:no-repeat;background-size:5rem;background-position:50% 50%;position:relative;background-color:var(--accent);border-radius:0.25rem;overflow:hidden}blockquote::before{content:"";padding:2px;position:absolute;top:0;bottom:0;left:0;background:var(--theme)}blockquote p{padding-left:0.5rem !important;font-size:1.1rem !important;width:100%;font-style:italic}h1,h2,h3,h4,h5{font-family:inherit;font-weight:500;padding:0.33rem 0;color:inherit;line-height:1.35}h1{font-size:200%}h2{font-size:175%}h3{font-size:150%}h4{font-size:125%}h5{font-size:120%}h6{font-size:100%}img,svg,figure{max-width:100%;vertical-align:middle}img{height:auto;margin:1rem auto;padding:0}main{flex:1}@media screen and (min-width: 42rem){main{padding-bottom:45px}}ol,ul{list-style:none}b,strong{font-weight:500}hr{border:none;padding:0.5px;background:var(--text);opacity:0.5;margin:1rem 0}.aside{overflow-y:auto;background:var(--bg);border-radius:0.25rem;align-self:start;max-height:80vh;position:sticky;z-index:9999;top:0;padding:1rem 0}@media screen and (min-width: 42rem){.aside{padding:1rem 1.5rem;top:2.5rem;margin-top:1rem;padding-top:0}}.aside_inner{height:0;overflow:hidden}@media screen and (min-width: 42rem){.aside_inner{height:initial}}.aside.show .aside_inner{height:initial;overflow:visible}.aside_toggle{padding:1.5rem 0;margin:-1.5rem 0;display:flex;justify-content:space-between}@media screen and (min-width: 42rem){.aside_toggle{display:none}}.aside h3{position:relative}.aside ul{padding:0;list-style:none}th,td{padding:0.5rem;font-weight:400 !important}th:not(:first-child),td:not(:first-child){padding-left:1.5rem}thead{background:var(--theme);color:var(--light);font-weight:400;text-align:left}tbody tr:nth-child(even){background-color:var(--accent) !important;box-shadow:0 1rem 0.75rem -0.75rem rgba(0,0,0,0.07)}table{margin:1.5rem 0;width:100%}.main{flex:1}.page-home h1{font-weight:300}.content ul,.content ol{padding-left:1.1rem}.content ul{list-style:initial}.content ol{list-style:decimal}.content a:not(.button){color:var(--theme)}::placeholder{font-size:1rem}svg.icon_sort{fill:var(--light);height:0.7rem;width:0.7rem;display:inline-block;margin-left:auto;vertical-align:middle}canvas{margin:2.5rem auto 0 auto;max-width:450px !important;max-height:450px !important}footer{min-height:150px}del{opacity:0.5}#toTop{background:transparent;outline:0.5rem solid transparent;height:2rem;width:2rem;cursor:pointer;padding:0.5rem;display:flex;align-items:center;justify-content:center;position:fixed;right:0;bottom:2.25rem;transform:rotate(45deg) translate(5rem);opacity:0;transition:opacity 0.5s var(--ease),transform 0.25s var(--ease);z-index:5}#toTop.active{right:1.5rem;opacity:1;transform:rotate(45deg) translate(0)}#toTop::after,#toTop::before{position:absolute;display:block;width:1rem;height:1rem;content:"";border-left:1px solid var(--text);border-top:1px solid var(--text)}#toTop::after{width:0.67rem;height:0.67rem;transform:translate(0.1rem, 0.1rem)}.nav{display:grid;grid-gap:1rem;padding:0 1.5rem !important;align-items:center;background-color:var(--bg)}@media screen and (min-width: 992px){.nav{grid-template-columns:10rem 1fr}}.nav_brand{position:relative}.nav_brand picture,.nav_brand img{max-width:10rem}.nav_header{position:absolute;top:0;left:0;width:100%;background-color:var(--bg);z-index:999999}.nav_toggle{position:absolute;top:0;bottom:0;width:3rem;display:flex;align-items:center;justify-content:flex-end;text-align:center;right:0;color:var(--text)}@media screen and (min-width: 992px){.nav_toggle{display:none}}.nav_body{display:flex;flex-direction:column;background:var(--accent);position:fixed;left:0;top:0;bottom:0;height:100vh;transition:transform 0.25s var(--ease);transform:translateX(-101vw)}@media screen and (min-width: 992px){.nav_body{transform:translateX(0);position:relative;height:initial;justify-content:flex-end;background:transparent;flex-direction:row}}.nav.show .nav_body{transform:translateX(0);box-shadow:0 1rem 4rem rgba(0,0,0,0.1);background:var(--bg)}.nav.show .nav_body li:first-child{margin:1.5rem 1rem 0.5rem 1rem}.nav-link{display:inline-flex;padding:0.5rem 1rem}.nav-item{display:grid;align-items:center}@media screen and (min-width: 992px){.nav-item .search{margin-right:1.5rem}}.nav_repo picture,.nav_repo img{max-width:1.25rem}.section_title{font-size:1.25rem}.section_link{font-size:1rem;font-weight:400}.sidebar-link{display:grid;padding:0.2rem 0}.toc{border-left:2px solid var(--theme);padding:0 1rem;height:0;overflow:hidden;filter:opacity(0.87)}.toc_item{font-size:0.9rem}.toc_active{height:initial}.search{flex:1;display:flex;justify-content:flex-end;position:relative}.search_field{padding:0.5rem 1.5rem 0.5rem 2.5rem;border-radius:1.5rem;width:13.5rem;outline:none;border:none;background:transparent;color:var(--text);box-shadow:0 1rem 4rem rgba(0,0,0,0.17);font-size:1rem}.search_label{width:1rem;height:1rem;position:absolute;left:0.33rem;top:0.25rem;opacity:0.33}.search_label svg{width:100%;height:100%;fill:var(--text)}.search_result{padding:0.5rem 1rem}.search_result:not(.passive):hover{background-color:var(--theme);color:var(--light)}.search_result.passive{display:grid}.search_results{width:13.5rem;background-color:var(--overlay);border-radius:0 0 0.25rem 0.25rem;box-shadow:0 1rem 4rem rgba(0,0,0,0.17);position:absolute;top:125%;display:grid;overflow:hidden;z-index:5}.search_results:empty{display:none}.search_title{padding:0.5rem 1rem 0.5rem 1rem;background:var(--theme);color:var(--light);font-size:0.9rem;opacity:0.87;text-transform:uppercase}.button{background-color:var(--theme);color:var(--light);border-radius:0.25rem;display:inline-block;padding:0.75rem 1.25rem;text-align:center}.button:hover{opacity:0.84}.button+.button{background-color:var(--haze);color:var(--dark)}.button_grid{display:grid;max-width:15rem;grid-gap:1rem;grid-template-columns:repeat(auto-fit, minmax(12rem, 1fr))}@media screen and (min-width: 557px){.button_grid{max-width:25rem}}.video{overflow:hidden;padding-bottom:56.25%;position:relative;height:0;margin:1.5rem 0;border-radius:0.6rem;background-color:var(--bg);box-shadow:0 1rem 2rem rgba(0,0,0,0.17)}.video iframe{left:0;top:0;height:100%;width:100%;border:none;position:absolute;transform:scale(1.02)}.icon{width:1.1rem;height:1.1rem;display:inline-flex;justify-content:center;align-items:center;margin:0 0.5rem}.link{opacity:0;position:relative}.link_owner:hover .link{opacity:1}.link_yank{opacity:1}.link_yanked{position:absolute;right:-1rem;top:-2rem;background-color:var(--theme);color:var(--light);width:7rem;padding:0.25rem 0.5rem;font-size:0.9rem;border-radius:1rem;text-align:center}.link_yanked::after{position:absolute;top:1rem;content:"";border-color:var(--theme) transparent;border-style:solid;border-width:1rem 1rem 0 1rem;height:0;width:0;transform-origin:50% 50%;transform:rotate(145deg);right:0.45rem}.gallery{width:100%;column-count:3;column-gap:1rem}@media screen and (max-width: 667px){.gallery{column-count:2}}.gallery_item{background-color:transparent;margin:0 0 1rem}.gallery_image{margin:0 auto}.pager{display:flex;justify-content:space-between;align-items:center;padding-top:2rem;margin:2rem 0;max-width:100vw;overflow:hidden}.pager svg{filter:opacity(0.75);width:1.25rem;height:1rem;transform-origin:50% 50%}.pager_lean{justify-content:flex-end}.pager_label{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.pager_link{padding:0.5rem 1rem;border-radius:0.25rem;width:12.5rem;max-width:40vw;position:relative;display:flex;align-items:center;text-align:center;justify-content:center}.pager_link::before,.pager_link::after{background-image:url(../images/next.svg);height:0.8rem;width:0.8rem;background-size:100%;background-repeat:no-repeat;transform-origin:50% 50%}.pager_item{display:flex;flex-direction:column;flex:1;max-width:48%}.pager_item.prev{align-items:flex-start}.pager_item.next{align-items:flex-end}.pager_item.next::after{content:""}.pager_item.prev .pager_link::before{content:"";transform:rotate(180deg);margin-right:0.67rem}.pager_item.next .pager_link::after{content:"";margin-left:0.67rem}.pager_item.next .pager_link{grid-template-columns:1fr 1.5rem}.pager_meta{margin:0.5rem 0}.color_mode{height:1rem;margin-left:1.5rem}.color_choice{outline:none;border:none;-webkit-appearance:none;height:1rem;position:relative;width:1rem;border-radius:1rem;cursor:pointer;z-index:2;right:0;filter:contrast(0.8)}.color_choice::after{content:"";top:0.1rem;bottom:0;left:0;position:absolute;height:0.8rem;background:var(--accent);width:0.8rem;border-radius:0.25rem;z-index:3;transform:scale(1.67);transform-origin:50% 50%;transition:transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);will-change:transform;background-image:url(../icons/sun.svg);background-size:60%;background-repeat:no-repeat;background-position:center}.color_icon{height:1rem;width:1rem;margin:0;z-index:4;position:absolute;transform:translateY(-50%);transition:transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);right:3.5rem}.tip{padding:1.5rem 1rem 1.5rem 1.5rem;margin:1.5rem 0;border-left:0.2rem solid var(--theme);position:relative;background:var(--accent)}.tip blockquote{padding:0;margin:0;border:none}.tip blockquote::before{display:none}.tip p:first-child,.tip p~p{padding-top:0}.tip p:last-child{padding-bottom:0}.tip_warning{--theme: var(--inline-color)}.tip_warning::before{transform:rotate(180deg)}.tip::before{content:"";position:absolute;left:-0.85rem;top:1.5rem;z-index:3;padding:0.75rem;transform-origin:50% 50%;border-radius:50%;background-color:var(--theme);background-image:url(../icons/info.svg);background-size:12%;background-position:50% 50%;background-repeat:no-repeat}.mermaid{--theme: darkgoldenrod;background-color:transparent !important;margin-bottom:2.5rem}.mermaid svg{margin:0 auto;display:block}.mermaid .actor,.mermaid .labelBox,.mermaid .classGroup rect{fill:var(--theme) !important;stroke:var(--theme) !important}.mermaid .messageText,.mermaid tspan,.mermaid text{fill:var(--text) !important;stroke:var(--text) !important}.mermaid .messageLine0,.mermaid .loopLine{stroke:var(--theme) !important;fill:var(--theme) !important}.wrap{max-width:1240px}@media screen and (min-width: 1640px){.wrap{max-width:1600px}}.wrap,.wrap{width:100%;padding:0 25px;margin:0 auto}.pt-1{padding-top:1.5rem}.pb-1{padding-bottom:1.5rem}.mt-1{margin-top:1.5rem}.mb-1{margin-bottom:1.5rem}.pt-2{padding-top:3rem}.pb-2{padding-bottom:3rem}.mt-2{margin-top:3rem}.mb-2{margin-bottom:3rem}.pt-3{padding-top:4.5rem}.pb-3{padding-bottom:4.5rem}.mt-3{margin-top:4.5rem}.mb-3{margin-bottom:4.5rem}.pt-4{padding-top:6rem}.pb-4{padding-bottom:6rem}.mt-4{margin-top:6rem}.mb-4{margin-bottom:6rem}.grid-2,.grid-3,.grid-4,.grid-auto,.grid-reverse{display:grid;grid-template-columns:1fr}[class*='grid-']{grid-gap:2rem}@media screen and (min-width: 42rem){.grid-auto{grid-template-columns:2fr 5fr}.grid-reverse{grid-template-columns:3fr 1fr}.grid-2{grid-template-columns:repeat(2, 1fr)}.grid-3{grid-template-columns:repeat(auto-fit, minmax(15rem, 1fr))}.grid-4{grid-template-columns:repeat(auto-fit, minmax(12rem, 1fr))}}.active{color:var(--theme)}.is{background:var(--theme);color:var(--light)}.toggle svg{fill:var(--text);display:inline-block;transform-origin:50% 50%;transform:scale(1.2);cursor:pointer;margin:0}.scrollable{width:100%;overflow-x:hidden;max-width:calc(100vw - 48px)}@media screen and (min-width: 768px){.scrollable{max-width:100%}}.scrollable:hover{overflow-x:auto}.chart{display:grid;grid-gap:1.5rem;max-width:98vw !important;max-height:98vw !important}@keyframes pulse{0%{opacity:1}75%{opacity:0.1}100%{opacity:1}}code{font-size:15px;font-weight:400;overflow-y:hidden;display:block;font-family:'Monaco', monospace;word-break:break-all}code.noClass{color:var(--inline-color);display:inline;line-break:anywhere}.windows .highlight{overflow-x:hidden}.windows .highlight:hover{overflow-x:auto}.highlight{display:grid;width:100%;border-radius:0 0.2rem 0.2rem 0;overflow-x:auto;position:relative}.highlight_wrap{display:grid;background:var(--code-bg) !important;border-radius:0.5rem;position:relative;padding:0 1rem;margin:1.5rem auto 1rem auto}.highlight_wrap .highlight_wrap{margin:0;padding:0}.highlight_wrap+.highlight_wrap{margin-top:2.25rem}.highlight_wrap:hover>div{opacity:1}.highlight_wrap .lang{position:absolute;top:0;right:0;text-align:right;width:7.5rem;padding:0.5rem 1rem;font-style:italic;text-transform:uppercase;font-size:67%;opacity:0.5;color:var(--text)}.highlight_wrap:hover .lang{opacity:0.1}.highlight .highlight{margin:0}.highlight pre{color:var(--text) !important;border-radius:4px;font-family:'Monaco', monospace;padding-top:1.5rem;padding-bottom:2rem}.highlight table{display:grid;max-width:100%;margin-bottom:0;background:transparent}.highlight td,.highlight th{padding:0}.highlight .lntd{width:100%;border:none}.highlight .lntd:first-child,.highlight .lntd:first-child pre{width:2.5rem !important;padding-left:0;padding-right:0;color:rgba(255,255,255,0.5);user-select:none}.highlight .lntd:first-child pre{width:100%;display:flex;align-items:center;flex-direction:column}.err{color:#a61717}.hl{width:100%;background:var(--inline-color)}.ln,.lnt{margin-right:0.75rem;padding:0;transition:opacity 0.3s var(--ease)}.ln,.ln span,.lnt,.lnt span{color:var(--text);opacity:0.5;user-select:none}.k,.kc,.kd,.kn,.kp,.kr,.kt,.nt{color:#6ab825;font-weight:500}.kn,.kp{font-weight:400}.nb,.no,.nv{color:#24909d}.nc,.nf,.nn{color:#447fcf}.s,.sa,.sb,.sc,.dl,.sd,.s2,.se,.sh,.si,.sx,.sr,.s1,.ss{color:#ed9d13}.m,.mb,.mf,.mh,.mi,.il,.mo{color:#3677a9}.ow{color:#6ab825;font-weight:500}.c,.ch,.cm,.c1{color:#999;font-style:italic}.cs{color:#e50808;background-color:#520000;font-weight:500}.cp,.cpf{color:#cd2828;font-weight:500}.gd,.gr{color:#d22323}.ge{font-style:italic}.gh,.gu,.nd,.na,.ne{color:#ffa500;font-weight:500}.gi{color:#589819}.go{color:#ccc}.gp{color:#aaa}.gs{font-weight:500}.gt{color:#d22323}.w{color:#666}.hljs-string{color:#6ab825}.hljs-attr{color:#ed9d13}.p .hljs-attr{color:var(--light)}.pre_wrap{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.pre_nolines.ln{display:none}.panel_box{display:inline-flex;perspective:300px;grid-gap:0.5rem;transition:opacity 0.3s var(--easing);background:var(--code-bg);padding:0.5rem 1.5rem;border-radius:2rem;align-items:center;position:absolute;right:0rem;top:-2.1rem;opacity:0}.panel_icon{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0.1rem;transform-origin:50% 50%}.panel_icon.active{animation:pulse 0.1s linear}.panel_icon svg{fill:var(--text);width:1.5rem;height:1.5rem}.panel_hide{display:none}.panel_from{position:absolute;color:var(--theme);bottom:0;font-size:1.5rem;font-weight:500;padding:0.5rem 0;cursor:pointer;letter-spacing:0.1px;z-index:19}.panel_expanded .panel_from{display:none}@font-face{font-family:'Metropolis';font-style:normal;font-weight:400;src:local("Metropolis Regular"),local("Metropolis-Regular"),url("../fonts/Metropolis-Regular.woff2") format("woff2"),url("../fonts/Metropolis-Regular.woff") format("woff");font-display:swap}@font-face{font-family:'Metropolis';font-style:normal;font-weight:300;src:local("Metropolis Light"),local("Metropolis-Light"),url("../fonts/Metropolis-Light.woff2") format("woff2"),url("../fonts/Metropolis-Light.woff") format("woff");font-display:swap}@font-face{font-family:'Metropolis';font-style:italic;font-weight:300;src:local("Metropolis Light Italic"),local("Metropolis-LightItalic"),url("../fonts/Metropolis-LightItalic.woff2") format("woff2"),url("../fonts/Metropolis-LightItalic.woff") format("woff");font-display:swap}@font-face{font-family:'Metropolis';font-style:normal;font-weight:500;src:local("Metropolis Medium"),local("Metropolis-Medium"),url("../fonts/Metropolis-Medium.woff2") format("woff2"),url("../fonts/Metropolis-Medium.woff") format("woff");font-display:swap}@font-face{font-family:'Metropolis';font-style:italic;font-weight:500;src:local("Metropolis Medium Italic"),local("Metropolis-MediumItalic"),url("../fonts/Metropolis-MediumItalic.woff2") format("woff2"),url("../fonts/Metropolis-MediumItalic.woff") format("woff");font-display:swap}@font-face{font-family:'Cookie';font-style:normal;font-weight:400;src:local("Cookie-Regular"),url("../fonts/cookie-v10-latin-regular.woff2") format("woff2"),url("../fonts/cookie-v10-latin-regular.woff") format("woff");font-display:swap}@keyframes chartjs-render-animation{0%{opacity:.99}100%{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0} + +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/docs/resources/_gen/assets/sass/sass/main.sass_ca26857cefa9076967ab300682271513.json b/docs/resources/_gen/assets/sass/sass/main.sass_ca26857cefa9076967ab300682271513.json new file mode 100644 index 0000000..3a0df46 --- /dev/null +++ b/docs/resources/_gen/assets/sass/sass/main.sass_ca26857cefa9076967ab300682271513.json @@ -0,0 +1 @@ +{"Target":"css/styles.35cccf4dc83860130d466a273c4bd3f1342dc22b167106c704a21ae7307d2d98f4701138b92f3fe17054f928a248863a30ad7863fe6b3816582123ff58f21da6.css","MediaType":"text/css","Data":{"Integrity":"sha512-NczPTcg4YBMNRmonPEvT8TQtwisWcQbHBKIa5zB9LZj0cBE4uS8/4XBU+SiiSIY6MK14Y/5rOBZYISP/WPIdpg=="}} \ No newline at end of file diff --git a/docs/static/logo.png b/docs/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a72ca40945e5f9ac0933b49c35cdfaf96503a58a GIT binary patch literal 3438 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