├── docs
├── CNAME
├── images
│ └── charts.png
├── sitemap.xml
├── css
│ └── theme.css
├── 404.html
└── index.html
├── src
├── assets
│ ├── CNAME
│ └── images
│ │ └── charts.png
├── contents
│ ├── 404
│ │ └── index.md
│ ├── sitemap.xml
│ │ └── index.yml
│ └── index.md
├── themes
│ └── default
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── templates
│ │ ├── pages
│ │ │ ├── default.mustache
│ │ │ ├── 404.mustache
│ │ │ └── home.mustache
│ │ ├── partials
│ │ │ ├── footer.mustache
│ │ │ └── header.mustache
│ │ ├── sitemap.mustache
│ │ ├── redirect.mustache
│ │ └── html.mustache
│ │ ├── LICENSE
│ │ └── assets
│ │ └── css
│ │ └── theme.css
├── site.yml
├── config.yml
├── types
│ ├── page.yml
│ ├── not-found.yml
│ └── redirect.yml
├── pipelines
│ ├── 404.yml
│ ├── redirect.yml
│ ├── html.yml
│ └── sitemap.yml
└── blocks
│ └── youtube.yml
├── .gitignore
├── .gitmodules
├── Makefile
└── README.md
/docs/CNAME:
--------------------------------------------------------------------------------
1 | example.com
--------------------------------------------------------------------------------
/src/assets/CNAME:
--------------------------------------------------------------------------------
1 | example.com
--------------------------------------------------------------------------------
/src/contents/sitemap.xml/index.yml:
--------------------------------------------------------------------------------
1 | type: sitemap
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .swiftpm
3 | .vscode
4 | .build
5 |
--------------------------------------------------------------------------------
/src/themes/default/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .swiftpm
3 | .vscode
4 | .build
5 |
--------------------------------------------------------------------------------
/src/site.yml:
--------------------------------------------------------------------------------
1 | baseUrl: "https://artemnovichkov.github.io/awesome-swift-charts/"
2 | title: "Awesome Swift Charts"
--------------------------------------------------------------------------------
/docs/images/charts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/artemnovichkov/awesome-swift-charts/HEAD/docs/images/charts.png
--------------------------------------------------------------------------------
/src/assets/images/charts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/artemnovichkov/awesome-swift-charts/HEAD/src/assets/images/charts.png
--------------------------------------------------------------------------------
/src/themes/default/README.md:
--------------------------------------------------------------------------------
1 | # Minimal theme
2 |
3 | Just a minimal theme for the Toucan static site generator.
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "src/themes/default"]
2 | path = src/themes/default
3 | url = https://github.com/toucansites/minimal-theme
4 |
--------------------------------------------------------------------------------
/src/config.yml:
--------------------------------------------------------------------------------
1 | dateFormats:
2 | input:
3 | format: "yyyy-MM-dd HH:mm:ss"
4 | output:
5 | year:
6 | format: "y"
--------------------------------------------------------------------------------
/src/types/page.yml:
--------------------------------------------------------------------------------
1 | id: page
2 | default: true
3 |
4 | properties:
5 | title:
6 | type: string
7 | required: true
8 | default: null
9 |
--------------------------------------------------------------------------------
/src/types/not-found.yml:
--------------------------------------------------------------------------------
1 | id: not-found
2 | paths:
3 | - 404
4 |
5 | properties:
6 | title:
7 | type: string
8 | required: true
9 | default: null
10 |
--------------------------------------------------------------------------------
/src/themes/default/templates/pages/default.mustache:
--------------------------------------------------------------------------------
1 | {{
5 | {{& page.contents.html}}
6 |
7 |
8 | {{/main}}
9 | {{/html}}
10 |
--------------------------------------------------------------------------------
/src/themes/default/templates/pages/404.mustache:
--------------------------------------------------------------------------------
1 | {{
5 | {{& page.contents.html}}
6 |
7 |
8 | {{/main}}
9 | {{/html}}
10 |
--------------------------------------------------------------------------------
/src/types/redirect.yml:
--------------------------------------------------------------------------------
1 | id: redirect
2 |
3 | properties:
4 | to:
5 | type: string
6 | required: true
7 | code:
8 | type: int
9 | required: false
10 | default: 301
11 |
12 |
--------------------------------------------------------------------------------
/docs/sitemap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | https://artemnovichkov.github.io/awesome-swift-charts/
4 | 2025-06-10
5 |
6 |
--------------------------------------------------------------------------------
/src/contents/404/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | type: not-found
3 | title: "Not found"
4 | description: "This page does not exists."
5 | template: "pages.404"
6 | ---
7 |
8 | ## Not found
9 |
10 | This page does not exists.
11 |
12 | [Home](/)
13 |
--------------------------------------------------------------------------------
/src/pipelines/404.yml:
--------------------------------------------------------------------------------
1 | id: not-found
2 | contentTypes:
3 | include:
4 | - not-found
5 |
6 | engine:
7 | id: mustache
8 | options:
9 | contentTypes:
10 | not-found:
11 | template: "pages.404"
12 |
13 | output:
14 | path: ""
15 | file: 404
16 | ext: html
--------------------------------------------------------------------------------
/src/pipelines/redirect.yml:
--------------------------------------------------------------------------------
1 | id: redirect
2 | contentTypes:
3 | include:
4 | - redirect
5 |
6 | engine:
7 | id: mustache
8 | options:
9 | contentTypes:
10 | redirect:
11 | template: "redirect"
12 |
13 | output:
14 | path: "{{slug}}"
15 | file: index
16 | ext: html
--------------------------------------------------------------------------------
/src/themes/default/templates/partials/footer.mustache:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/themes/default/templates/sitemap.mustache:
--------------------------------------------------------------------------------
1 |
2 | {{#empty(urls)}}
3 | {{/empty(urls)}}
4 | {{^empty(urls)}}
5 |
6 | {{#context.pages}}
7 | {{permalink}}
8 | {{lastUpdate.formats.sitemap}}
9 | {{/context.pages}}
10 |
11 | {{/empty(urls)}}
12 |
--------------------------------------------------------------------------------
/src/pipelines/html.yml:
--------------------------------------------------------------------------------
1 | id: html
2 |
3 | scopes:
4 |
5 | queries:
6 |
7 | dataTypes:
8 |
9 | contentTypes:
10 | include:
11 | - page
12 |
13 | iterators:
14 |
15 | transformers:
16 |
17 | engine:
18 | id: mustache
19 | options:
20 | contentTypes:
21 | page:
22 | template: "pages.default"
23 | output:
24 | path: "{{slug}}"
25 | file: index
26 | ext: html
--------------------------------------------------------------------------------
/src/themes/default/templates/partials/header.mustache:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 | {{#navigation}}
13 |
{{label}}
14 | {{/navigation}}
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | SHELL=/bin/bash
2 |
3 | # brew install optipng jpegoptim
4 |
5 | dev:
6 | toucan generate ./src ./docs --base-url http://localhost:3000/
7 |
8 | dist:
9 | toucan generate ./src ./docs
10 |
11 | watch:
12 | toucan watch ./src ./docs --base-url http://localhost:3000/
13 |
14 | serve:
15 | toucan serve ./docs -p 3000
16 |
17 | png:
18 | find ./src/* -type f -name '*.png' -exec optipng -o7 {} \;
19 |
20 | jpg:
21 | find ./src/* -type f -name '*.jpg' | xargs jpegoptim --all-progressive '*.jpg'
22 |
--------------------------------------------------------------------------------
/src/pipelines/sitemap.yml:
--------------------------------------------------------------------------------
1 | id: sitemap
2 | definesType: true
3 | contentTypes:
4 | include:
5 | - sitemap
6 |
7 | queries:
8 | pages:
9 | contentType: page
10 | scope: list
11 | orderBy:
12 | - key: lastUpdate
13 | direction: desc
14 |
15 | engine:
16 | id: mustache
17 | options:
18 | contentTypes:
19 | sitemap:
20 | template: "sitemap"
21 | output:
22 | path: ""
23 | file: sitemap
24 | ext: xml
--------------------------------------------------------------------------------
/src/themes/default/templates/redirect.mustache:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 | {{& page.contents.html}}
9 |
10 |
11 |
12 | {{/main}}
13 | {{/html}}
14 |
--------------------------------------------------------------------------------
/docs/css/theme.css:
--------------------------------------------------------------------------------
1 | header,
2 | footer,
3 | .page,
4 | img {
5 | max-width: 800px;
6 | margin: 0 auto;
7 | width: 100%;
8 | }
9 |
10 | header {
11 | text-align: center;
12 | padding-bottom: 16px;
13 | }
14 |
15 | footer {
16 | text-align: center;
17 | padding-top: 16px;
18 | }
19 |
20 | .page {
21 | padding-top: 16px;
22 | padding-bottom: 16px;
23 | }
24 |
25 | header #logo img {
26 | width: 128px;
27 | }
28 |
29 | html {
30 | background-color: rgb(13, 17, 23);
31 | color: white;
32 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
33 | }
34 |
35 | a {
36 | color: rgb(88, 166, 255);
37 | text-decoration: none;
38 | }
39 |
40 | a:hover {
41 | text-decoration: underline;
42 | }
43 |
44 | ul li {
45 | margin-bottom: 10px;
46 | }
47 |
48 | .github-corner:hover .octo-arm {
49 | animation: octocat-wave 560ms ease-in-out
50 | }
51 |
52 | @keyframes octocat-wave {
53 |
54 | 0%,
55 | 100% {
56 | transform: rotate(0)
57 | }
58 |
59 | 20%,
60 | 60% {
61 | transform: rotate(-25deg)
62 | }
63 |
64 | 40%,
65 | 80% {
66 | transform: rotate(10deg)
67 | }
68 | }
69 |
70 | @media (max-width:500px) {
71 | .github-corner:hover .octo-arm {
72 | animation: none
73 | }
74 |
75 | .github-corner .octo-arm {
76 | animation: octocat-wave 560ms ease-in-out
77 | }
78 | }
--------------------------------------------------------------------------------
/src/themes/default/assets/css/theme.css:
--------------------------------------------------------------------------------
1 | header,
2 | footer,
3 | .page,
4 | img {
5 | max-width: 800px;
6 | margin: 0 auto;
7 | width: 100%;
8 | }
9 |
10 | header {
11 | text-align: center;
12 | padding-bottom: 16px;
13 | }
14 |
15 | footer {
16 | text-align: center;
17 | padding-top: 16px;
18 | }
19 |
20 | .page {
21 | padding-top: 16px;
22 | padding-bottom: 16px;
23 | }
24 |
25 | header #logo img {
26 | width: 128px;
27 | }
28 |
29 | html {
30 | background-color: rgb(13, 17, 23);
31 | color: white;
32 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
33 | }
34 |
35 | a {
36 | color: rgb(88, 166, 255);
37 | text-decoration: none;
38 | }
39 |
40 | a:hover {
41 | text-decoration: underline;
42 | }
43 |
44 | ul li {
45 | margin-bottom: 10px;
46 | }
47 |
48 | .github-corner:hover .octo-arm {
49 | animation: octocat-wave 560ms ease-in-out
50 | }
51 |
52 | @keyframes octocat-wave {
53 |
54 | 0%,
55 | 100% {
56 | transform: rotate(0)
57 | }
58 |
59 | 20%,
60 | 60% {
61 | transform: rotate(-25deg)
62 | }
63 |
64 | 40%,
65 | 80% {
66 | transform: rotate(10deg)
67 | }
68 | }
69 |
70 | @media (max-width:500px) {
71 | .github-corner:hover .octo-arm {
72 | animation: none
73 | }
74 |
75 | .github-corner .octo-arm {
76 | animation: octocat-wave 560ms ease-in-out
77 | }
78 | }
--------------------------------------------------------------------------------
/src/themes/default/templates/html.mustache:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |