From fb902575aac4e261b9501e29c15e1434ddcb9f11 Mon Sep 17 00:00:00 2001 From: raddessi Date: Sun, 28 Jan 2024 17:02:03 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20raddessi?= =?UTF-8?q?/salt-gnupg-rotate@e2e0d652cfa517f78095100582ba7831b1a13daa=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .doctrees/environment.pickle | Bin 160050 -> 0 bytes index.html | 331 +------ .buildinfo => main/.buildinfo | 2 +- {.doctrees => main/.doctrees}/about.doctree | Bin 6426 -> 6430 bytes .../.doctrees}/contributing.doctree | Bin 5870 -> 5874 bytes main/.doctrees/environment.pickle | Bin 0 -> 163630 bytes .../building-documentation.doctree | Bin 6657 -> 6661 bytes .../.doctrees}/how-to-guides/index.doctree | Bin 6095 -> 6099 bytes .../how-to-guides/running-tests.doctree | Bin 5736 -> 5740 bytes .../setting-up-for-development.doctree | Bin 8887 -> 8891 bytes {.doctrees => main/.doctrees}/index.doctree | Bin 9214 -> 9222 bytes {.doctrees => main/.doctrees}/license.doctree | Bin 5314 -> 5322 bytes .../.doctrees}/reference-guides/index.doctree | Bin 3782 -> 3786 bytes .../salt-gnupg-rotate.doctree | Bin 16969 -> 16973 bytes .../.doctrees}/security.doctree | Bin 5947 -> 5955 bytes .../create-and-rotate-pillar.doctree | Bin 23052 -> 23056 bytes .../.doctrees}/tutorials/index.doctree | Bin 4336 -> 4340 bytes {_sources => main/_sources}/about.md.txt | 0 .../_sources}/contributing.md.txt | 0 .../building-documentation.md.txt | 0 .../_sources}/how-to-guides/index.md.txt | 0 .../how-to-guides/running-tests.md.txt | 0 .../setting-up-for-development.md.txt | 0 {_sources => main/_sources}/index.md.txt | 0 {_sources => main/_sources}/license.rst.txt | 0 .../_sources}/reference-guides/index.md.txt | 0 .../salt-gnupg-rotate.rst.txt | 0 {_sources => main/_sources}/security.md.txt | 0 .../tutorials/create-and-rotate-pillar.md.txt | 0 .../_sources}/tutorials/index.md.txt | 0 {_static => main/_static}/basic.css | 0 {_static => main/_static}/check-solid.svg | 0 {_static => main/_static}/clipboard.min.js | 0 {_static => main/_static}/copy-button.svg | 0 {_static => main/_static}/copybutton.css | 0 {_static => main/_static}/copybutton.js | 0 {_static => main/_static}/copybutton_funcs.js | 0 {_static => main/_static}/debug.css | 0 {_static => main/_static}/doctools.js | 0 .../_static}/documentation_options.js | 0 {_static => main/_static}/file.png | Bin {_static => main/_static}/language_data.js | 0 {_static => main/_static}/minus.png | Bin {_static => main/_static}/plus.png | Bin {_static => main/_static}/pygments.css | 0 .../_static}/scripts/furo-extensions.js | 0 {_static => main/_static}/scripts/furo.js | 0 .../_static}/scripts/furo.js.LICENSE.txt | 0 {_static => main/_static}/scripts/furo.js.map | 0 {_static => main/_static}/searchtools.js | 0 {_static => main/_static}/skeleton.css | 0 {_static => main/_static}/sphinx_highlight.js | 0 .../_static}/styles/furo-extensions.css | 0 .../_static}/styles/furo-extensions.css.map | 0 {_static => main/_static}/styles/furo.css | 0 {_static => main/_static}/styles/furo.css.map | 0 {_static => main/_static}/tabs.css | 0 {_static => main/_static}/tabs.js | 0 {_static => main/_static}/twemoji.css | 0 {_static => main/_static}/twemoji.js | 0 main/about.html | 338 +++++++ main/contributing.html | 313 ++++++ main/genindex.html | 431 ++++++++ .../how-to-guides/building-documentation.html | 345 +++++++ main/how-to-guides/index.html | 332 +++++++ main/how-to-guides/running-tests.html | 343 +++++++ .../setting-up-for-development.html | 364 +++++++ main/index.html | 348 +++++++ main/license.html | 326 ++++++ objects.inv => main/objects.inv | 0 main/reference-guides/index.html | 310 ++++++ main/reference-guides/salt-gnupg-rotate.html | 397 ++++++++ main/search.html | 290 ++++++ searchindex.js => main/searchindex.js | 0 main/security.html | 338 +++++++ main/tutorials/create-and-rotate-pillar.html | 538 ++++++++++ main/tutorials/index.html | 305 ++++++ v0.1.0/.buildinfo | 4 + v0.1.0/.doctrees/about.doctree | Bin 0 -> 6430 bytes v0.1.0/.doctrees/contributing.doctree | Bin 0 -> 5874 bytes v0.1.0/.doctrees/environment.pickle | Bin 0 -> 163634 bytes .../building-documentation.doctree | Bin 0 -> 6661 bytes v0.1.0/.doctrees/how-to-guides/index.doctree | Bin 0 -> 6099 bytes .../how-to-guides/running-tests.doctree | Bin 0 -> 5740 bytes .../setting-up-for-development.doctree | Bin 0 -> 8891 bytes v0.1.0/.doctrees/index.doctree | Bin 0 -> 9222 bytes v0.1.0/.doctrees/license.doctree | Bin 0 -> 5322 bytes .../.doctrees/reference-guides/index.doctree | Bin 0 -> 3786 bytes .../salt-gnupg-rotate.doctree | Bin 0 -> 16973 bytes v0.1.0/.doctrees/security.doctree | Bin 0 -> 5955 bytes .../create-and-rotate-pillar.doctree | Bin 0 -> 23056 bytes v0.1.0/.doctrees/tutorials/index.doctree | Bin 0 -> 4340 bytes v0.1.0/_sources/about.md.txt | 20 + v0.1.0/_sources/contributing.md.txt | 16 + .../building-documentation.md.txt | 32 + v0.1.0/_sources/how-to-guides/index.md.txt | 22 + .../how-to-guides/running-tests.md.txt | 30 + .../setting-up-for-development.md.txt | 50 + v0.1.0/_sources/index.md.txt | 19 + v0.1.0/_sources/license.rst.txt | 4 + v0.1.0/_sources/reference-guides/index.md.txt | 11 + .../salt-gnupg-rotate.rst.txt | 6 + v0.1.0/_sources/security.md.txt | 3 + .../tutorials/create-and-rotate-pillar.md.txt | 206 ++++ v0.1.0/_sources/tutorials/index.md.txt | 12 + v0.1.0/_static/basic.css | 925 ++++++++++++++++++ v0.1.0/_static/check-solid.svg | 4 + v0.1.0/_static/clipboard.min.js | 7 + v0.1.0/_static/copy-button.svg | 5 + v0.1.0/_static/copybutton.css | 94 ++ v0.1.0/_static/copybutton.js | 248 +++++ v0.1.0/_static/copybutton_funcs.js | 73 ++ v0.1.0/_static/debug.css | 69 ++ v0.1.0/_static/doctools.js | 156 +++ v0.1.0/_static/documentation_options.js | 13 + v0.1.0/_static/file.png | Bin 0 -> 286 bytes v0.1.0/_static/language_data.js | 199 ++++ v0.1.0/_static/minus.png | Bin 0 -> 90 bytes v0.1.0/_static/plus.png | Bin 0 -> 90 bytes v0.1.0/_static/pygments.css | 258 +++++ v0.1.0/_static/scripts/furo-extensions.js | 0 v0.1.0/_static/scripts/furo.js | 3 + v0.1.0/_static/scripts/furo.js.LICENSE.txt | 7 + v0.1.0/_static/scripts/furo.js.map | 1 + v0.1.0/_static/searchtools.js | 574 +++++++++++ v0.1.0/_static/skeleton.css | 296 ++++++ v0.1.0/_static/sphinx_highlight.js | 154 +++ v0.1.0/_static/styles/furo-extensions.css | 2 + v0.1.0/_static/styles/furo-extensions.css.map | 1 + v0.1.0/_static/styles/furo.css | 2 + v0.1.0/_static/styles/furo.css.map | 1 + v0.1.0/_static/tabs.css | 110 +++ v0.1.0/_static/tabs.js | 30 + v0.1.0/_static/twemoji.css | 6 + v0.1.0/_static/twemoji.js | 10 + about.html => v0.1.0/about.html | 24 + contributing.html => v0.1.0/contributing.html | 24 + genindex.html => v0.1.0/genindex.html | 24 + .../building-documentation.html | 24 + .../how-to-guides}/index.html | 24 + .../how-to-guides}/running-tests.html | 24 + .../setting-up-for-development.html | 24 + v0.1.0/index.html | 348 +++++++ license.html => v0.1.0/license.html | 24 + v0.1.0/objects.inv | 7 + .../reference-guides}/index.html | 24 + .../reference-guides}/salt-gnupg-rotate.html | 24 + search.html => v0.1.0/search.html | 24 + v0.1.0/searchindex.js | 1 + security.html => v0.1.0/security.html | 24 + .../tutorials}/create-and-rotate-pillar.html | 24 + {tutorials => v0.1.0/tutorials}/index.html | 24 + v0.1.1/.buildinfo | 4 + v0.1.1/.doctrees/about.doctree | Bin 0 -> 6430 bytes v0.1.1/.doctrees/contributing.doctree | Bin 0 -> 5874 bytes v0.1.1/.doctrees/environment.pickle | Bin 0 -> 163634 bytes .../building-documentation.doctree | Bin 0 -> 6661 bytes v0.1.1/.doctrees/how-to-guides/index.doctree | Bin 0 -> 6099 bytes .../how-to-guides/running-tests.doctree | Bin 0 -> 5740 bytes .../setting-up-for-development.doctree | Bin 0 -> 8891 bytes v0.1.1/.doctrees/index.doctree | Bin 0 -> 9222 bytes v0.1.1/.doctrees/license.doctree | Bin 0 -> 5322 bytes .../.doctrees/reference-guides/index.doctree | Bin 0 -> 3786 bytes .../salt-gnupg-rotate.doctree | Bin 0 -> 16973 bytes v0.1.1/.doctrees/security.doctree | Bin 0 -> 5955 bytes .../create-and-rotate-pillar.doctree | Bin 0 -> 23056 bytes v0.1.1/.doctrees/tutorials/index.doctree | Bin 0 -> 4340 bytes v0.1.1/_sources/about.md.txt | 20 + v0.1.1/_sources/contributing.md.txt | 16 + .../building-documentation.md.txt | 32 + v0.1.1/_sources/how-to-guides/index.md.txt | 22 + .../how-to-guides/running-tests.md.txt | 30 + .../setting-up-for-development.md.txt | 50 + v0.1.1/_sources/index.md.txt | 19 + v0.1.1/_sources/license.rst.txt | 4 + v0.1.1/_sources/reference-guides/index.md.txt | 11 + .../salt-gnupg-rotate.rst.txt | 6 + v0.1.1/_sources/security.md.txt | 3 + .../tutorials/create-and-rotate-pillar.md.txt | 206 ++++ v0.1.1/_sources/tutorials/index.md.txt | 12 + v0.1.1/_static/basic.css | 925 ++++++++++++++++++ v0.1.1/_static/check-solid.svg | 4 + v0.1.1/_static/clipboard.min.js | 7 + v0.1.1/_static/copy-button.svg | 5 + v0.1.1/_static/copybutton.css | 94 ++ v0.1.1/_static/copybutton.js | 248 +++++ v0.1.1/_static/copybutton_funcs.js | 73 ++ v0.1.1/_static/debug.css | 69 ++ v0.1.1/_static/doctools.js | 156 +++ v0.1.1/_static/documentation_options.js | 13 + v0.1.1/_static/file.png | Bin 0 -> 286 bytes v0.1.1/_static/language_data.js | 199 ++++ v0.1.1/_static/minus.png | Bin 0 -> 90 bytes v0.1.1/_static/plus.png | Bin 0 -> 90 bytes v0.1.1/_static/pygments.css | 258 +++++ v0.1.1/_static/scripts/furo-extensions.js | 0 v0.1.1/_static/scripts/furo.js | 3 + v0.1.1/_static/scripts/furo.js.LICENSE.txt | 7 + v0.1.1/_static/scripts/furo.js.map | 1 + v0.1.1/_static/searchtools.js | 574 +++++++++++ v0.1.1/_static/skeleton.css | 296 ++++++ v0.1.1/_static/sphinx_highlight.js | 154 +++ v0.1.1/_static/styles/furo-extensions.css | 2 + v0.1.1/_static/styles/furo-extensions.css.map | 1 + v0.1.1/_static/styles/furo.css | 2 + v0.1.1/_static/styles/furo.css.map | 1 + v0.1.1/_static/tabs.css | 110 +++ v0.1.1/_static/tabs.js | 30 + v0.1.1/_static/twemoji.css | 6 + v0.1.1/_static/twemoji.js | 10 + v0.1.1/about.html | 338 +++++++ v0.1.1/contributing.html | 313 ++++++ v0.1.1/genindex.html | 431 ++++++++ .../how-to-guides/building-documentation.html | 345 +++++++ v0.1.1/how-to-guides/index.html | 332 +++++++ v0.1.1/how-to-guides/running-tests.html | 343 +++++++ .../setting-up-for-development.html | 364 +++++++ v0.1.1/index.html | 348 +++++++ v0.1.1/license.html | 326 ++++++ v0.1.1/objects.inv | 7 + v0.1.1/reference-guides/index.html | 310 ++++++ .../reference-guides/salt-gnupg-rotate.html | 397 ++++++++ v0.1.1/search.html | 290 ++++++ v0.1.1/searchindex.js | 1 + v0.1.1/security.html | 338 +++++++ .../tutorials/create-and-rotate-pillar.html | 538 ++++++++++ v0.1.1/tutorials/index.html | 305 ++++++ v0.1.2/.buildinfo | 4 + v0.1.2/.doctrees/about.doctree | Bin 0 -> 6430 bytes v0.1.2/.doctrees/contributing.doctree | Bin 0 -> 5874 bytes v0.1.2/.doctrees/environment.pickle | Bin 0 -> 163634 bytes .../building-documentation.doctree | Bin 0 -> 6661 bytes v0.1.2/.doctrees/how-to-guides/index.doctree | Bin 0 -> 6099 bytes .../how-to-guides/running-tests.doctree | Bin 0 -> 5740 bytes .../setting-up-for-development.doctree | Bin 0 -> 8891 bytes v0.1.2/.doctrees/index.doctree | Bin 0 -> 9222 bytes v0.1.2/.doctrees/license.doctree | Bin 0 -> 5322 bytes .../.doctrees/reference-guides/index.doctree | Bin 0 -> 3786 bytes .../salt-gnupg-rotate.doctree | Bin 0 -> 16973 bytes v0.1.2/.doctrees/security.doctree | Bin 0 -> 5955 bytes .../create-and-rotate-pillar.doctree | Bin 0 -> 23056 bytes v0.1.2/.doctrees/tutorials/index.doctree | Bin 0 -> 4340 bytes v0.1.2/_sources/about.md.txt | 20 + v0.1.2/_sources/contributing.md.txt | 16 + .../building-documentation.md.txt | 32 + v0.1.2/_sources/how-to-guides/index.md.txt | 22 + .../how-to-guides/running-tests.md.txt | 30 + .../setting-up-for-development.md.txt | 50 + v0.1.2/_sources/index.md.txt | 19 + v0.1.2/_sources/license.rst.txt | 4 + v0.1.2/_sources/reference-guides/index.md.txt | 11 + .../salt-gnupg-rotate.rst.txt | 6 + v0.1.2/_sources/security.md.txt | 3 + .../tutorials/create-and-rotate-pillar.md.txt | 206 ++++ v0.1.2/_sources/tutorials/index.md.txt | 12 + v0.1.2/_static/basic.css | 925 ++++++++++++++++++ v0.1.2/_static/check-solid.svg | 4 + v0.1.2/_static/clipboard.min.js | 7 + v0.1.2/_static/copy-button.svg | 5 + v0.1.2/_static/copybutton.css | 94 ++ v0.1.2/_static/copybutton.js | 248 +++++ v0.1.2/_static/copybutton_funcs.js | 73 ++ v0.1.2/_static/debug.css | 69 ++ v0.1.2/_static/doctools.js | 156 +++ v0.1.2/_static/documentation_options.js | 13 + v0.1.2/_static/file.png | Bin 0 -> 286 bytes v0.1.2/_static/language_data.js | 199 ++++ v0.1.2/_static/minus.png | Bin 0 -> 90 bytes v0.1.2/_static/plus.png | Bin 0 -> 90 bytes v0.1.2/_static/pygments.css | 258 +++++ v0.1.2/_static/scripts/furo-extensions.js | 0 v0.1.2/_static/scripts/furo.js | 3 + v0.1.2/_static/scripts/furo.js.LICENSE.txt | 7 + v0.1.2/_static/scripts/furo.js.map | 1 + v0.1.2/_static/searchtools.js | 574 +++++++++++ v0.1.2/_static/skeleton.css | 296 ++++++ v0.1.2/_static/sphinx_highlight.js | 154 +++ v0.1.2/_static/styles/furo-extensions.css | 2 + v0.1.2/_static/styles/furo-extensions.css.map | 1 + v0.1.2/_static/styles/furo.css | 2 + v0.1.2/_static/styles/furo.css.map | 1 + v0.1.2/_static/tabs.css | 110 +++ v0.1.2/_static/tabs.js | 30 + v0.1.2/_static/twemoji.css | 6 + v0.1.2/_static/twemoji.js | 10 + v0.1.2/about.html | 338 +++++++ v0.1.2/contributing.html | 313 ++++++ v0.1.2/genindex.html | 431 ++++++++ .../how-to-guides/building-documentation.html | 345 +++++++ v0.1.2/how-to-guides/index.html | 332 +++++++ v0.1.2/how-to-guides/running-tests.html | 343 +++++++ .../setting-up-for-development.html | 364 +++++++ v0.1.2/index.html | 348 +++++++ v0.1.2/license.html | 326 ++++++ v0.1.2/objects.inv | 7 + v0.1.2/reference-guides/index.html | 310 ++++++ .../reference-guides/salt-gnupg-rotate.html | 397 ++++++++ v0.1.2/search.html | 290 ++++++ v0.1.2/searchindex.js | 1 + v0.1.2/security.html | 338 +++++++ .../tutorials/create-and-rotate-pillar.html | 538 ++++++++++ v0.1.2/tutorials/index.html | 305 ++++++ 302 files changed, 27720 insertions(+), 324 deletions(-) delete mode 100644 .doctrees/environment.pickle rename .buildinfo => main/.buildinfo (82%) rename {.doctrees => main/.doctrees}/about.doctree (96%) rename {.doctrees => main/.doctrees}/contributing.doctree (90%) create mode 100644 main/.doctrees/environment.pickle rename {.doctrees => main/.doctrees}/how-to-guides/building-documentation.doctree (95%) rename {.doctrees => main/.doctrees}/how-to-guides/index.doctree (95%) rename {.doctrees => main/.doctrees}/how-to-guides/running-tests.doctree (87%) rename {.doctrees => main/.doctrees}/how-to-guides/setting-up-for-development.doctree (86%) rename {.doctrees => main/.doctrees}/index.doctree (91%) rename {.doctrees => main/.doctrees}/license.doctree (90%) rename {.doctrees => main/.doctrees}/reference-guides/index.doctree (92%) rename {.doctrees => main/.doctrees}/reference-guides/salt-gnupg-rotate.doctree (86%) rename {.doctrees => main/.doctrees}/security.doctree (63%) rename {.doctrees => main/.doctrees}/tutorials/create-and-rotate-pillar.doctree (95%) rename {.doctrees => main/.doctrees}/tutorials/index.doctree (65%) rename {_sources => main/_sources}/about.md.txt (100%) rename {_sources => main/_sources}/contributing.md.txt (100%) rename {_sources => main/_sources}/how-to-guides/building-documentation.md.txt (100%) rename {_sources => main/_sources}/how-to-guides/index.md.txt (100%) rename {_sources => main/_sources}/how-to-guides/running-tests.md.txt (100%) rename {_sources => main/_sources}/how-to-guides/setting-up-for-development.md.txt (100%) rename {_sources => main/_sources}/index.md.txt (100%) rename {_sources => main/_sources}/license.rst.txt (100%) rename {_sources => main/_sources}/reference-guides/index.md.txt (100%) rename {_sources => main/_sources}/reference-guides/salt-gnupg-rotate.rst.txt (100%) rename {_sources => main/_sources}/security.md.txt (100%) rename {_sources => main/_sources}/tutorials/create-and-rotate-pillar.md.txt (100%) rename {_sources => main/_sources}/tutorials/index.md.txt (100%) rename {_static => main/_static}/basic.css (100%) rename {_static => main/_static}/check-solid.svg (100%) rename {_static => main/_static}/clipboard.min.js (100%) rename {_static => main/_static}/copy-button.svg (100%) rename {_static => main/_static}/copybutton.css (100%) rename {_static => main/_static}/copybutton.js (100%) rename {_static => main/_static}/copybutton_funcs.js (100%) rename {_static => main/_static}/debug.css (100%) rename {_static => main/_static}/doctools.js (100%) rename {_static => main/_static}/documentation_options.js (100%) rename {_static => main/_static}/file.png (100%) rename {_static => main/_static}/language_data.js (100%) rename {_static => main/_static}/minus.png (100%) rename {_static => main/_static}/plus.png (100%) rename {_static => main/_static}/pygments.css (100%) rename {_static => main/_static}/scripts/furo-extensions.js (100%) rename {_static => main/_static}/scripts/furo.js (100%) rename {_static => main/_static}/scripts/furo.js.LICENSE.txt (100%) rename {_static => main/_static}/scripts/furo.js.map (100%) rename {_static => main/_static}/searchtools.js (100%) rename {_static => main/_static}/skeleton.css (100%) rename {_static => main/_static}/sphinx_highlight.js (100%) rename {_static => main/_static}/styles/furo-extensions.css (100%) rename {_static => main/_static}/styles/furo-extensions.css.map (100%) rename {_static => main/_static}/styles/furo.css (100%) rename {_static => main/_static}/styles/furo.css.map (100%) rename {_static => main/_static}/tabs.css (100%) rename {_static => main/_static}/tabs.js (100%) rename {_static => main/_static}/twemoji.css (100%) rename {_static => main/_static}/twemoji.js (100%) create mode 100644 main/about.html create mode 100644 main/contributing.html create mode 100644 main/genindex.html create mode 100644 main/how-to-guides/building-documentation.html create mode 100644 main/how-to-guides/index.html create mode 100644 main/how-to-guides/running-tests.html create mode 100644 main/how-to-guides/setting-up-for-development.html create mode 100644 main/index.html create mode 100644 main/license.html rename objects.inv => main/objects.inv (100%) create mode 100644 main/reference-guides/index.html create mode 100644 main/reference-guides/salt-gnupg-rotate.html create mode 100644 main/search.html rename searchindex.js => main/searchindex.js (100%) create mode 100644 main/security.html create mode 100644 main/tutorials/create-and-rotate-pillar.html create mode 100644 main/tutorials/index.html create mode 100644 v0.1.0/.buildinfo create mode 100644 v0.1.0/.doctrees/about.doctree create mode 100644 v0.1.0/.doctrees/contributing.doctree create mode 100644 v0.1.0/.doctrees/environment.pickle create mode 100644 v0.1.0/.doctrees/how-to-guides/building-documentation.doctree create mode 100644 v0.1.0/.doctrees/how-to-guides/index.doctree create mode 100644 v0.1.0/.doctrees/how-to-guides/running-tests.doctree create mode 100644 v0.1.0/.doctrees/how-to-guides/setting-up-for-development.doctree create mode 100644 v0.1.0/.doctrees/index.doctree create mode 100644 v0.1.0/.doctrees/license.doctree create mode 100644 v0.1.0/.doctrees/reference-guides/index.doctree create mode 100644 v0.1.0/.doctrees/reference-guides/salt-gnupg-rotate.doctree create mode 100644 v0.1.0/.doctrees/security.doctree create mode 100644 v0.1.0/.doctrees/tutorials/create-and-rotate-pillar.doctree create mode 100644 v0.1.0/.doctrees/tutorials/index.doctree create mode 100644 v0.1.0/_sources/about.md.txt create mode 100644 v0.1.0/_sources/contributing.md.txt create mode 100644 v0.1.0/_sources/how-to-guides/building-documentation.md.txt create mode 100644 v0.1.0/_sources/how-to-guides/index.md.txt create mode 100644 v0.1.0/_sources/how-to-guides/running-tests.md.txt create mode 100644 v0.1.0/_sources/how-to-guides/setting-up-for-development.md.txt create mode 100644 v0.1.0/_sources/index.md.txt create mode 100644 v0.1.0/_sources/license.rst.txt create mode 100644 v0.1.0/_sources/reference-guides/index.md.txt create mode 100644 v0.1.0/_sources/reference-guides/salt-gnupg-rotate.rst.txt create mode 100644 v0.1.0/_sources/security.md.txt create mode 100644 v0.1.0/_sources/tutorials/create-and-rotate-pillar.md.txt create mode 100644 v0.1.0/_sources/tutorials/index.md.txt create mode 100644 v0.1.0/_static/basic.css create mode 100644 v0.1.0/_static/check-solid.svg create mode 100644 v0.1.0/_static/clipboard.min.js create mode 100644 v0.1.0/_static/copy-button.svg create mode 100644 v0.1.0/_static/copybutton.css create mode 100644 v0.1.0/_static/copybutton.js create mode 100644 v0.1.0/_static/copybutton_funcs.js create mode 100644 v0.1.0/_static/debug.css create mode 100644 v0.1.0/_static/doctools.js create mode 100644 v0.1.0/_static/documentation_options.js create mode 100644 v0.1.0/_static/file.png create mode 100644 v0.1.0/_static/language_data.js create mode 100644 v0.1.0/_static/minus.png create mode 100644 v0.1.0/_static/plus.png create mode 100644 v0.1.0/_static/pygments.css create mode 100644 v0.1.0/_static/scripts/furo-extensions.js create mode 100644 v0.1.0/_static/scripts/furo.js create mode 100644 v0.1.0/_static/scripts/furo.js.LICENSE.txt create mode 100644 v0.1.0/_static/scripts/furo.js.map create mode 100644 v0.1.0/_static/searchtools.js create mode 100644 v0.1.0/_static/skeleton.css create mode 100644 v0.1.0/_static/sphinx_highlight.js create mode 100644 v0.1.0/_static/styles/furo-extensions.css create mode 100644 v0.1.0/_static/styles/furo-extensions.css.map create mode 100644 v0.1.0/_static/styles/furo.css create mode 100644 v0.1.0/_static/styles/furo.css.map create mode 100644 v0.1.0/_static/tabs.css create mode 100644 v0.1.0/_static/tabs.js create mode 100644 v0.1.0/_static/twemoji.css create mode 100644 v0.1.0/_static/twemoji.js rename about.html => v0.1.0/about.html (95%) rename contributing.html => v0.1.0/contributing.html (95%) rename genindex.html => v0.1.0/genindex.html (96%) rename {how-to-guides => v0.1.0/how-to-guides}/building-documentation.html (95%) rename {how-to-guides => v0.1.0/how-to-guides}/index.html (95%) rename {how-to-guides => v0.1.0/how-to-guides}/running-tests.html (95%) rename {how-to-guides => v0.1.0/how-to-guides}/setting-up-for-development.html (95%) create mode 100644 v0.1.0/index.html rename license.html => v0.1.0/license.html (96%) create mode 100644 v0.1.0/objects.inv rename {reference-guides => v0.1.0/reference-guides}/index.html (94%) rename {reference-guides => v0.1.0/reference-guides}/salt-gnupg-rotate.html (96%) rename search.html => v0.1.0/search.html (94%) create mode 100644 v0.1.0/searchindex.js rename security.html => v0.1.0/security.html (95%) rename {tutorials => v0.1.0/tutorials}/create-and-rotate-pillar.html (97%) rename {tutorials => v0.1.0/tutorials}/index.html (95%) create mode 100644 v0.1.1/.buildinfo create mode 100644 v0.1.1/.doctrees/about.doctree create mode 100644 v0.1.1/.doctrees/contributing.doctree create mode 100644 v0.1.1/.doctrees/environment.pickle create mode 100644 v0.1.1/.doctrees/how-to-guides/building-documentation.doctree create mode 100644 v0.1.1/.doctrees/how-to-guides/index.doctree create mode 100644 v0.1.1/.doctrees/how-to-guides/running-tests.doctree create mode 100644 v0.1.1/.doctrees/how-to-guides/setting-up-for-development.doctree create mode 100644 v0.1.1/.doctrees/index.doctree create mode 100644 v0.1.1/.doctrees/license.doctree create mode 100644 v0.1.1/.doctrees/reference-guides/index.doctree create mode 100644 v0.1.1/.doctrees/reference-guides/salt-gnupg-rotate.doctree create mode 100644 v0.1.1/.doctrees/security.doctree create mode 100644 v0.1.1/.doctrees/tutorials/create-and-rotate-pillar.doctree create mode 100644 v0.1.1/.doctrees/tutorials/index.doctree create mode 100644 v0.1.1/_sources/about.md.txt create mode 100644 v0.1.1/_sources/contributing.md.txt create mode 100644 v0.1.1/_sources/how-to-guides/building-documentation.md.txt create mode 100644 v0.1.1/_sources/how-to-guides/index.md.txt create mode 100644 v0.1.1/_sources/how-to-guides/running-tests.md.txt create mode 100644 v0.1.1/_sources/how-to-guides/setting-up-for-development.md.txt create mode 100644 v0.1.1/_sources/index.md.txt create mode 100644 v0.1.1/_sources/license.rst.txt create mode 100644 v0.1.1/_sources/reference-guides/index.md.txt create mode 100644 v0.1.1/_sources/reference-guides/salt-gnupg-rotate.rst.txt create mode 100644 v0.1.1/_sources/security.md.txt create mode 100644 v0.1.1/_sources/tutorials/create-and-rotate-pillar.md.txt create mode 100644 v0.1.1/_sources/tutorials/index.md.txt create mode 100644 v0.1.1/_static/basic.css create mode 100644 v0.1.1/_static/check-solid.svg create mode 100644 v0.1.1/_static/clipboard.min.js create mode 100644 v0.1.1/_static/copy-button.svg create mode 100644 v0.1.1/_static/copybutton.css create mode 100644 v0.1.1/_static/copybutton.js create mode 100644 v0.1.1/_static/copybutton_funcs.js create mode 100644 v0.1.1/_static/debug.css create mode 100644 v0.1.1/_static/doctools.js create mode 100644 v0.1.1/_static/documentation_options.js create mode 100644 v0.1.1/_static/file.png create mode 100644 v0.1.1/_static/language_data.js create mode 100644 v0.1.1/_static/minus.png create mode 100644 v0.1.1/_static/plus.png create mode 100644 v0.1.1/_static/pygments.css create mode 100644 v0.1.1/_static/scripts/furo-extensions.js create mode 100644 v0.1.1/_static/scripts/furo.js create mode 100644 v0.1.1/_static/scripts/furo.js.LICENSE.txt create mode 100644 v0.1.1/_static/scripts/furo.js.map create mode 100644 v0.1.1/_static/searchtools.js create mode 100644 v0.1.1/_static/skeleton.css create mode 100644 v0.1.1/_static/sphinx_highlight.js create mode 100644 v0.1.1/_static/styles/furo-extensions.css create mode 100644 v0.1.1/_static/styles/furo-extensions.css.map create mode 100644 v0.1.1/_static/styles/furo.css create mode 100644 v0.1.1/_static/styles/furo.css.map create mode 100644 v0.1.1/_static/tabs.css create mode 100644 v0.1.1/_static/tabs.js create mode 100644 v0.1.1/_static/twemoji.css create mode 100644 v0.1.1/_static/twemoji.js create mode 100644 v0.1.1/about.html create mode 100644 v0.1.1/contributing.html create mode 100644 v0.1.1/genindex.html create mode 100644 v0.1.1/how-to-guides/building-documentation.html create mode 100644 v0.1.1/how-to-guides/index.html create mode 100644 v0.1.1/how-to-guides/running-tests.html create mode 100644 v0.1.1/how-to-guides/setting-up-for-development.html create mode 100644 v0.1.1/index.html create mode 100644 v0.1.1/license.html create mode 100644 v0.1.1/objects.inv create mode 100644 v0.1.1/reference-guides/index.html create mode 100644 v0.1.1/reference-guides/salt-gnupg-rotate.html create mode 100644 v0.1.1/search.html create mode 100644 v0.1.1/searchindex.js create mode 100644 v0.1.1/security.html create mode 100644 v0.1.1/tutorials/create-and-rotate-pillar.html create mode 100644 v0.1.1/tutorials/index.html create mode 100644 v0.1.2/.buildinfo create mode 100644 v0.1.2/.doctrees/about.doctree create mode 100644 v0.1.2/.doctrees/contributing.doctree create mode 100644 v0.1.2/.doctrees/environment.pickle create mode 100644 v0.1.2/.doctrees/how-to-guides/building-documentation.doctree create mode 100644 v0.1.2/.doctrees/how-to-guides/index.doctree create mode 100644 v0.1.2/.doctrees/how-to-guides/running-tests.doctree create mode 100644 v0.1.2/.doctrees/how-to-guides/setting-up-for-development.doctree create mode 100644 v0.1.2/.doctrees/index.doctree create mode 100644 v0.1.2/.doctrees/license.doctree create mode 100644 v0.1.2/.doctrees/reference-guides/index.doctree create mode 100644 v0.1.2/.doctrees/reference-guides/salt-gnupg-rotate.doctree create mode 100644 v0.1.2/.doctrees/security.doctree create mode 100644 v0.1.2/.doctrees/tutorials/create-and-rotate-pillar.doctree create mode 100644 v0.1.2/.doctrees/tutorials/index.doctree create mode 100644 v0.1.2/_sources/about.md.txt create mode 100644 v0.1.2/_sources/contributing.md.txt create mode 100644 v0.1.2/_sources/how-to-guides/building-documentation.md.txt create mode 100644 v0.1.2/_sources/how-to-guides/index.md.txt create mode 100644 v0.1.2/_sources/how-to-guides/running-tests.md.txt create mode 100644 v0.1.2/_sources/how-to-guides/setting-up-for-development.md.txt create mode 100644 v0.1.2/_sources/index.md.txt create mode 100644 v0.1.2/_sources/license.rst.txt create mode 100644 v0.1.2/_sources/reference-guides/index.md.txt create mode 100644 v0.1.2/_sources/reference-guides/salt-gnupg-rotate.rst.txt create mode 100644 v0.1.2/_sources/security.md.txt create mode 100644 v0.1.2/_sources/tutorials/create-and-rotate-pillar.md.txt create mode 100644 v0.1.2/_sources/tutorials/index.md.txt create mode 100644 v0.1.2/_static/basic.css create mode 100644 v0.1.2/_static/check-solid.svg create mode 100644 v0.1.2/_static/clipboard.min.js create mode 100644 v0.1.2/_static/copy-button.svg create mode 100644 v0.1.2/_static/copybutton.css create mode 100644 v0.1.2/_static/copybutton.js create mode 100644 v0.1.2/_static/copybutton_funcs.js create mode 100644 v0.1.2/_static/debug.css create mode 100644 v0.1.2/_static/doctools.js create mode 100644 v0.1.2/_static/documentation_options.js create mode 100644 v0.1.2/_static/file.png create mode 100644 v0.1.2/_static/language_data.js create mode 100644 v0.1.2/_static/minus.png create mode 100644 v0.1.2/_static/plus.png create mode 100644 v0.1.2/_static/pygments.css create mode 100644 v0.1.2/_static/scripts/furo-extensions.js create mode 100644 v0.1.2/_static/scripts/furo.js create mode 100644 v0.1.2/_static/scripts/furo.js.LICENSE.txt create mode 100644 v0.1.2/_static/scripts/furo.js.map create mode 100644 v0.1.2/_static/searchtools.js create mode 100644 v0.1.2/_static/skeleton.css create mode 100644 v0.1.2/_static/sphinx_highlight.js create mode 100644 v0.1.2/_static/styles/furo-extensions.css create mode 100644 v0.1.2/_static/styles/furo-extensions.css.map create mode 100644 v0.1.2/_static/styles/furo.css create mode 100644 v0.1.2/_static/styles/furo.css.map create mode 100644 v0.1.2/_static/tabs.css create mode 100644 v0.1.2/_static/tabs.js create mode 100644 v0.1.2/_static/twemoji.css create mode 100644 v0.1.2/_static/twemoji.js create mode 100644 v0.1.2/about.html create mode 100644 v0.1.2/contributing.html create mode 100644 v0.1.2/genindex.html create mode 100644 v0.1.2/how-to-guides/building-documentation.html create mode 100644 v0.1.2/how-to-guides/index.html create mode 100644 v0.1.2/how-to-guides/running-tests.html create mode 100644 v0.1.2/how-to-guides/setting-up-for-development.html create mode 100644 v0.1.2/index.html create mode 100644 v0.1.2/license.html create mode 100644 v0.1.2/objects.inv create mode 100644 v0.1.2/reference-guides/index.html create mode 100644 v0.1.2/reference-guides/salt-gnupg-rotate.html create mode 100644 v0.1.2/search.html create mode 100644 v0.1.2/searchindex.js create mode 100644 v0.1.2/security.html create mode 100644 v0.1.2/tutorials/create-and-rotate-pillar.html create mode 100644 v0.1.2/tutorials/index.html diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle deleted file mode 100644 index 515674ecc0b5e5ace91d60a896d8e4a775ea961e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160050 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 diff --git a/index.html b/index.html index d7e39886..ef0ec479 100644 --- a/index.html +++ b/index.html @@ -1,324 +1,9 @@ - - - - - - - - salt-gnupg-rotate documentation - - - - - - - - - - - - - - - - - - Contents - - - - - - Menu - - - - - - - - Expand - - - - - - Light mode - - - - - - - - - - - - - - Dark mode - - - - - - - Auto light/dark mode - - - - - - - - - - - - - - - - - - - -
-
-
- -
- -
-
- -
- -
-
- -
-
-
- - - - - Back to top - -
- -
- -
- -
-
-
-

salt-gnupg-rotate#

-

Easily rotate gnupg encrypted data blocks in files 🧂

-
-

About#

-

This project was created to help with the rotation of secret keys on saltstack -controllers. Like probably at least some of you I am bad at rotating encryption -keys due to the effort and time required. This tool is meant to make that task -quick and painless.

-
-
-

Documentation#

-

Prebuilt zip files of the -project documentation -are available for download from the -Releases page.

-
-
-

Features#

-
    -
  • It’s fast! Rotate your keys in seconds

  • -
  • Encrypted blocks are updated in-place in your files, keeping surrounding -context and current indentation

  • -
  • --log-level trace level logging will show you the decrypted block contents -as well as the re-encrypted blocks for you to manually validate the changed -before applying them

  • -
  • If the --write flag is not given then no changes will be made

  • -
-
-
-

Discussion#

-
    -
  • GitHub Discussions - -Discussion forum hosted by GitHub; ideal for Q&A and other structured -discussions

  • -
-
-
-
-
- -
-
- -
- -
-
- - - - - - - - \ No newline at end of file + + + Redirecting to main branch + + + + + diff --git a/.buildinfo b/main/.buildinfo similarity index 82% rename from .buildinfo rename to main/.buildinfo index 0ef4be49..6db1fbe7 100644 --- a/.buildinfo +++ b/main/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: b933fdfc8f956cdfa2521c5431e17dfc +config: 69dda17e2852375f4062591342192831 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/about.doctree b/main/.doctrees/about.doctree similarity index 96% rename from .doctrees/about.doctree rename to main/.doctrees/about.doctree index 61d2f5de5261f85aa0e4c6e0f7d1fe039fef32f2..d1671413ee50b91c705d0a6d6bb68067518c7528 100644 GIT binary patch delta 77 zcmbPbG|z~ofpx0zMixItD|h{p+yW5JPf5>6O*SagPc=$4NHH@tN={2OH8f8%w=l3Y eH8e0VwJ=IbG`BD|OfpO~G)_rO+}y!9NgM#2Ef*pH delta 73 zcmbPdG|PykfpseXMixItGiUvb{M=OiqSCy))FS=z{Gx3A;>4U1-SoWDf^^-Y{F20y MR7{c0J&cpY0j-Z3od5s; diff --git a/.doctrees/contributing.doctree b/main/.doctrees/contributing.doctree similarity index 90% rename from .doctrees/contributing.doctree rename to main/.doctrees/contributing.doctree index d819dcb4bd2d1430923586baf8bd7e57e3944c6f..cf04773e341e257527f7d6da6ac1e857b39e47f1 100644 GIT binary patch delta 77 zcmaE-`$?CjfpzNhjVx}AR(|>=xdkAcpOT)Dnru*}pK6q9kYZ+Pl$@4mYG|HjZed_) eYG`0!YGIU=Xl`L_m}Hn}Xq=LmxVeEbPZR(Hkr-tF delta 73 zcmeyQ`%agofpzNRjVx}AW?uRk`MIh3MWuOpsYUwb`9<0K#fdp3y6JhP1?jp)`6Y=Z MshA?0TNv|10S_-5-~a#s diff --git a/main/.doctrees/environment.pickle b/main/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..8fe600f09e181dc9245134e8c56695d37da8f84c GIT binary patch literal 163630 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 delta 73 zcmZoQX*6MJV4eDHBTEvaS(1K6er~FMQE6UYYLR|6O*SagPc=$4NHH@tN={2OH8f8%w=l3Y oH8e0VwJ=IbG`BD|OfpO~G)_rO)KAGzF4mviz$(3YG2>AY0OMR6n*aa+ delta 73 zcmaE(^FoKEfpu!^Mivi7vq=4n{M=OiqSCy))FS=z{Gx3A;>4U1-SoWDf^^-Y{F20y MR7{c0ZH&)E0PYkU)&Kwi diff --git a/.doctrees/how-to-guides/setting-up-for-development.doctree b/main/.doctrees/how-to-guides/setting-up-for-development.doctree similarity index 86% rename from .doctrees/how-to-guides/setting-up-for-development.doctree rename to main/.doctrees/how-to-guides/setting-up-for-development.doctree index f96d39c8c2a4025d3a07e62854c745fa9b2c70f5..646e937076ffc169ea9c44eab4c811fc68e6cd7d 100644 GIT binary patch delta 77 zcmdn)y4#hdfpzMJjVwuwR$2NbxdkAcpOT)Dnru*}pK6q9kYZ+Pl$@4mYG|HjZed_) eYG`0!YGIU=Xl`L_m}Hn}Xq=LmxOonvv?2iT2^akU delta 73 zcmdn(y4{tffpzMdjVwuwW@-8v`MIh3MWuOpsYUwb`9<0K#fdp3y6JhP1?jp)`6Y=Z NshA?07cfdI0s#D*8+ZT! diff --git a/.doctrees/index.doctree b/main/.doctrees/index.doctree similarity index 91% rename from .doctrees/index.doctree rename to main/.doctrees/index.doctree index f51b4cabfb78e240f9f597629ebe72dd8d5d640b..766dfc8bb3803fad2202ee99546e90d4f208c2bd 100644 GIT binary patch delta 141 zcmez8-sZv5z&iE!MwUQED`)+Z+yW5JPf5>6O*SagPc=$4NHH@tN={2OH8f8%w=l3Y mH8e0VwJ=IbG`BD|OfpO~G)_rO+}zFB#cbtHzJ71k&2j*stt+Mg delta 133 zcmZqk_~*{jz&iEwMwUQEGkg7v{M=OiqSCy))FS=z{Gx3A;>4U1-SoWDf^^-Y{F20y VR7{c0{fu4AX3pg44QAae2LL*%GN1qe diff --git a/.doctrees/license.doctree b/main/.doctrees/license.doctree similarity index 90% rename from .doctrees/license.doctree rename to main/.doctrees/license.doctree index 3c271bc1624388c9ba43916746abcaf6dcc06a1c..968fc266fa94a556bf8fbdfb937cfe916c1d8d2d 100644 GIT binary patch delta 141 zcmX@4c}kO|fpzNsjVum~R$lrgxdkAcpOT)Dnru*}pK6q9kYZ+Pl$@4mYG|HjZed_) mYG`0!YGIU=Xl`L_m}Hn}Xq=LmxVeh)0GE{``T7fZf;a$ZpeqId delta 133 zcmX@5c}SC`fpzNkjVum~W^Vc!`MIh3MWuOpsYUwb`9<0K#fdp3y6JhP1?jp)`6Y=Z VshA?0>lhDknc0%3w}K~#0{{lwG5`Po diff --git a/.doctrees/reference-guides/index.doctree b/main/.doctrees/reference-guides/index.doctree similarity index 92% rename from .doctrees/reference-guides/index.doctree rename to main/.doctrees/reference-guides/index.doctree index 3a13de5e5732848347dfbd43d53551b2e296ccc4..c4c045a2498186e2780c2751c39a69f3d406041e 100644 GIT binary patch delta 77 zcmX>mdrFq2fpzNsjVykQRuTFoxdkAcpOT)Dnru*}pK6q9kYZ+Pl$@4mYG|HjZed_) eYG`0!YGIU=Xl`L_m}Hn}Xq=LmxVeMTju!yi*cYz= delta 73 zcmX>ldrX$4fpzNcjVykQW+D0+`MIh3MWuOpsYUwb`9<0K#fdp3y6JhP1?jp)`6Y=Z MshA?0dl>C_0qKq#DgXcg diff --git a/.doctrees/reference-guides/salt-gnupg-rotate.doctree b/main/.doctrees/reference-guides/salt-gnupg-rotate.doctree similarity index 86% rename from .doctrees/reference-guides/salt-gnupg-rotate.doctree rename to main/.doctrees/reference-guides/salt-gnupg-rotate.doctree index c0237a4e032522058f84ecdf21fb8db6bf8b0989..aea037540459773cbdd665f21512ba935ec8157b 100644 GIT binary patch delta 79 zcmX@v!g#iYk)?rks?$amA4aQG{gT`Q5YA6Y&qz%+DAP|hN;OC^Gc`(1OEfh!PcyeL gurxI^Ffg?+N=h`hFg8pwOf)o3Nle__#(3BP006)k$p8QV delta 75 zcmX@x!g#WUk)?rks@+BwA4ao8{fzwFRQ;mTyu8#R{qp>xZ2jWIoD$viywZYn-J<-G O#FA7@kKsG> diff --git a/.doctrees/security.doctree b/main/.doctrees/security.doctree similarity index 63% rename from .doctrees/security.doctree rename to main/.doctrees/security.doctree index b844928d8408bd4f8e03775e285112b72fea4cea..ecd84cc18548252d8d15ab85f4a93ef1b51b0642 100644 GIT binary patch delta 141 zcmdn3cUX_5fpx0IMiw7ND_8xJ+yW5JPf5>6O*SagPc=$4NHH@tN={2OH8f8%w=l3Y mH8e0VwJ=IbG`BD|OfpO~G)_rO+}y@EpUKLLeErcZ4}<_8cPi-s delta 133 zcmX@Cw_A^;fpx0EMiw7NGe`Z5{M=OiqSCy))FS=z{Gx3A;>4U1-SoWDf^^-Y{F20y VR7{c0U5xXY%-qP+o6Pb+2mrzpG2;LL diff --git a/.doctrees/tutorials/create-and-rotate-pillar.doctree b/main/.doctrees/tutorials/create-and-rotate-pillar.doctree similarity index 95% rename from .doctrees/tutorials/create-and-rotate-pillar.doctree rename to main/.doctrees/tutorials/create-and-rotate-pillar.doctree index 4fa2d5d2a1ebfe004077edef0a40bb091a84347f..abf7c526b77a972fb2d6c9a4f2c1cacbb47b8a64 100644 GIT binary patch delta 79 zcmeC#!Z=|IBTED8RMw3wd5l&m`X#vqAe^6)o{^etP^O=1lxmP-W@?n2mS}2do@Q=g gU}ln-U0SQ + + + + + + + + About these docs - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main/contributing.html b/main/contributing.html new file mode 100644 index 00000000..db49e9fb --- /dev/null +++ b/main/contributing.html @@ -0,0 +1,313 @@ + + + + + + + + + Contributing - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Contributing#

+

Contributions are welcome and greatly appreciated!

+
    +
  • It’s recommended to file a bug before starting work on anything. It will give +a chance to talk it over with the owners and validate your approach.

  • +
  • Please add or update tests if the change is testable.

  • +
  • Update documentation if relevant.

  • +
+

Thank you for helping improve the project!

+

Some useful documentation to check out:

+ +
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/genindex.html b/main/genindex.html new file mode 100644 index 00000000..6f1d0f7b --- /dev/null +++ b/main/genindex.html @@ -0,0 +1,431 @@ + + + + + + + Index - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+ +
+

Index

+ +
+
+

Symbols

+ + + +
+
+ +
+

S

+ + +
+
+ + +
+
+
+ + +
+
+ + Made with Sphinx and @pradyunsg's + + Furo + +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/main/how-to-guides/building-documentation.html b/main/how-to-guides/building-documentation.html new file mode 100644 index 00000000..ac0d0412 --- /dev/null +++ b/main/how-to-guides/building-documentation.html @@ -0,0 +1,345 @@ + + + + + + + + + Building the documentation - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Building the documentation#

+

Documentation is built via a nox suite that runs sphinx. You can either build +the docs one-time if you want to get a static build for deployment, or you can +start up a server to auto build the documentation when any of the source files +are modified.

+
+

Note

+

This tutorial assumes you have already followed the Setting Up for Development +steps to set up for developing this project.

+
+
+

Building static documentation#

+

To generate a static copy of the documentation:

+
nox -s docs-build
+
+
+

The generated documentation will be placed in the docs/_build directory.

+
+
+

Live-view documentation#

+

To view the documentation live in your browser while editing it you can run:

+
nox -s docs
+
+
+

A browser window will be opened to the sphinx server so you can view updates +dynamically

+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/how-to-guides/index.html b/main/how-to-guides/index.html new file mode 100644 index 00000000..df587a67 --- /dev/null +++ b/main/how-to-guides/index.html @@ -0,0 +1,332 @@ + + + + + + + + + How-To Guides - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

How-To Guides#

+

These guides are recipes. They guide you through the steps involved in +addressing key problems and use-cases. They are more advanced than tutorials and +assume some knowledge of how the application works.

+
+

For developing/maintaining this project#

+ +
+
+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/how-to-guides/running-tests.html b/main/how-to-guides/running-tests.html new file mode 100644 index 00000000..c04f7192 --- /dev/null +++ b/main/how-to-guides/running-tests.html @@ -0,0 +1,343 @@ + + + + + + + + + Running Tests - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Running Tests#

+

Here we will run the test suite for the salt-gnupg-rotate project.

+
+

Note

+

This tutorial assumes you have already followed the Setting Up for Development +steps to set up for developing this project.

+
+
+

Running all the test suites#

+

To run all of the test suites:

+
nox
+
+
+
+
+

Running a specific test suite#

+

List out the available nox test suites:

+
nox -s
+
+
+

Select the suite you would like to run from the list of available suites and run it with:

+
nox -s <suite name>
+
+
+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/how-to-guides/setting-up-for-development.html b/main/how-to-guides/setting-up-for-development.html new file mode 100644 index 00000000..690efb49 --- /dev/null +++ b/main/how-to-guides/setting-up-for-development.html @@ -0,0 +1,364 @@ + + + + + + + + + Setting Up for Development - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Setting Up for Development#

+

Here we will set up your system to develop this project.

+
+

Install dependencies#

+

You will need the following python modules installed on your system:

+
    +
  • poetry

  • +
  • nox

  • +
  • nox-poetry

  • +
  • pre-commit

  • +
+
+
+
pip install poetry nox nox-poetry pre-commit
+
+
+
+
+

You will also need either conda or mamba for virtual environment management. +I am partial to miniforge myself but any flavor should work.

+
+
+

See the Miniforge README

+
+
+
sudo dnf install conda
+
+
+
+
+
+
+

Checkout the project and install hooks#

+

Checkout the upstream or your own fork of the project

+
# checkout
+git checkout <github project url>
+
+# install commit hooks
+cd salt-gnupg-rotate
+pre-commit install --install-hooks
+
+
+

Now you should be set up to develop the project.

+
+

See Running Tests for how to run the test suite.

+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/index.html b/main/index.html new file mode 100644 index 00000000..151cf9b0 --- /dev/null +++ b/main/index.html @@ -0,0 +1,348 @@ + + + + + + + + + salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

salt-gnupg-rotate#

+

Easily rotate gnupg encrypted data blocks in files 🧂

+
+

About#

+

This project was created to help with the rotation of secret keys on saltstack +controllers. Like probably at least some of you I am bad at rotating encryption +keys due to the effort and time required. This tool is meant to make that task +quick and painless.

+
+
+

Documentation#

+

Prebuilt zip files of the +project documentation +are available for download from the +Releases page.

+
+
+

Features#

+
    +
  • It’s fast! Rotate your keys in seconds

  • +
  • Encrypted blocks are updated in-place in your files, keeping surrounding +context and current indentation

  • +
  • --log-level trace level logging will show you the decrypted block contents +as well as the re-encrypted blocks for you to manually validate the changed +before applying them

  • +
  • If the --write flag is not given then no changes will be made

  • +
+
+
+

Discussion#

+
    +
  • GitHub Discussions - +Discussion forum hosted by GitHub; ideal for Q&A and other structured +discussions

  • +
+
+
+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/license.html b/main/license.html new file mode 100644 index 00000000..0a4c41c1 --- /dev/null +++ b/main/license.html @@ -0,0 +1,326 @@ + + + + + + + + + License - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

License#

+
BSD 2-Clause License
+
+Copyright (c) 2024, Ryan Addessi
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/objects.inv b/main/objects.inv similarity index 100% rename from objects.inv rename to main/objects.inv diff --git a/main/reference-guides/index.html b/main/reference-guides/index.html new file mode 100644 index 00000000..12744a5f --- /dev/null +++ b/main/reference-guides/index.html @@ -0,0 +1,310 @@ + + + + + + + + + Reference Guides - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Reference Guides#

+

These guides contain technical reference material. They describe how this +project works and how to use it but assume that you have a basic understanding +of key concepts.

+ +
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/reference-guides/salt-gnupg-rotate.html b/main/reference-guides/salt-gnupg-rotate.html new file mode 100644 index 00000000..439cb012 --- /dev/null +++ b/main/reference-guides/salt-gnupg-rotate.html @@ -0,0 +1,397 @@ + + + + + + + + + CLI Reference - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

CLI Reference#

+
+

salt-gnupg-rotate#

+

Easily rotate gnupg encryption keys of fully or partially encrypted files.

+
salt-gnupg-rotate [OPTIONS]
+
+
+

Options

+
+
+-d, --dir, --directory <directory>#
+

Required The directory of encrypted data to recursively re-encrypt encrypted blocks within.

+
+ +
+
+--decryption-gpg-homedir <decryption_gpg_homedir>#
+

The path of the directory of the gnupg keyring that should be used for decryption.

+
+
Default:
+

/home/runner/.gnupg

+
+
+
+ +
+
+--encryption-gpg-homedir <encryption_gpg_homedir>#
+

The path of the directory of the gnupg keyring that should be used for encryption.

+
+
Default:
+

/home/runner/.gnupg

+
+
+
+ +
+
+-r, --recipient <recipient>#
+

Required The name of the recipient key to use in the encryption keyring.

+
+ +
+
+--write#
+

Write the re-encrypted data back out to disk. If not passed then no changes will be made.

+
+
Default:
+

False

+
+
+
+ +
+
+-l, --log, --log-level <log_level>#
+

The logging verbosity level to use

+
+
Default:
+

info

+
+
Options:
+

critical | error | warning | info | debug | trace | notset

+
+
+
+ +
+
+--version#
+

Show the version and exit.

+
+ +
+
+-h, --help#
+

Show this message and exit.

+
+ +
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/search.html b/main/search.html new file mode 100644 index 00000000..1eb74fe4 --- /dev/null +++ b/main/search.html @@ -0,0 +1,290 @@ + + + + + + + Search - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+ + + +
+ +
+
+
+ + +
+
+ + Made with Sphinx and @pradyunsg's + + Furo + +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/main/searchindex.js similarity index 100% rename from searchindex.js rename to main/searchindex.js diff --git a/main/security.html b/main/security.html new file mode 100644 index 00000000..d9369511 --- /dev/null +++ b/main/security.html @@ -0,0 +1,338 @@ + + + + + + + + + Security Policy - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Security Policy#

+
+

Supported Versions#

+

Here are the release versions that are currently supported and should be +receiving security updates:

+
+ + + + + + + + + + + + + + +

Version

Supported

1.x.x

Yes

0.x.x

No

+
+
+
+

Reporting a Vulnerability#

+

If you find a vulnerability, please submit a bug report via the GitHub issue +tracker. Thanks!

+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/tutorials/create-and-rotate-pillar.html b/main/tutorials/create-and-rotate-pillar.html new file mode 100644 index 00000000..8d450fa0 --- /dev/null +++ b/main/tutorials/create-and-rotate-pillar.html @@ -0,0 +1,538 @@ + + + + + + + + + Encrypt and Rotate a Salt Pillar - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Encrypt and Rotate a Salt Pillar#

+

Let’s generate some encrypted pillars and then rotate the keys on them.

+
+

Setup#

+
+

Install packages#

+
+
+
pipx install salt-gnupg-rotate yq
+
+
+
+
+
pip install salt-gnupg-rotate yq
+
+
+
+
+
+
+

Make tutorial directories to work in#

+

We will create a new directory for some test pillars and a directory for a +temporary gnupg keyring:

+
+
+
mkdir -p rotate-tutorial/{.gnupg/private-keys-v1.d,pillar}
+cd rotate-tutorial
+chmod 700 .gnupg
+
+
+
+
+
+
+

Tell gpg to use this new keyring home directory#

+
+
+
export GNUPGHOME=$(pwd)/.gnupg
+echo $GNUPGHOME
+
+
+
+
+
+
+

Create the new keyring and list the keys#

+
+
+
# this will create the empty keyring
+gpg --list-keys
+
+# now we can create a new key
+echo "Key-Type: 1
+Key-Length: 2048
+Subkey-Type: 1
+Subkey-Length: 2048
+Name-Real: salt-controller-key1
+Name-Email: tutorial@foo.bar
+Expire-Date: 0
+%no-protection" | gpg --batch --gen-key
+
+
+
+
+

Now list the available secret keys, you should see the key +salt-controller-key1:

+
+
+
gpg --list-secret-keys
+
+
+
+
+
+
+
+

Create some encrypted files#

+

Let’s create a completely encrypted file with the contents Hello!, using the +encryption key salt-controller-key1 and then verify that we can decrypt it:

+
+
+
# create the encrypted file
+echo -n 'Hello!' | gpg --encrypt --armor -r salt-controller-key1 > pillar/encrypted_file.gpg
+
+# decrypt the file using the original key
+cat pillar/encrypted_file.gpg| gpg --decrypt
+
+
+
+
+

Now let’s create a yaml file with one value that has been encrypted:

+
+
+
# encrypt some secret data
+echo -n "my-secret-value" | gpg --encrypt --armor -r salt-controller-key1
+
+# create a yaml pillar with an encrypted value
+vim pillar/encrypted_pillar.sls
+
+
+
+
+

You will need to create a file with a structure similar to:

+
my-secret-key: |
+  -----BEGIN PGP MESSAGE-----
+
+  <encrypted data>
+  -----END PGP MESSAGE-----
+
+
+

Once the file has the correct format and encrypted data save and exit your +editor.

+
+
+

Create a new secret key we can use to rotate encryption#

+
+
+
echo "Key-Type: 1
+Key-Length: 2048
+Subkey-Type: 1
+Subkey-Length: 2048
+Name-Real: salt-controller-key2
+Name-Email: tutorial@foo.bar
+Expire-Date: 0
+%no-protection" | gpg --batch --gen-key
+
+
+
+
+

Now list the available secret keys, now you should see both of the keys +salt-controller-key1 and salt-controller-key2:

+
+
+
gpg --list-secret-keys
+
+
+
+
+
+
+

Rotate encryption using salt-gnupg-rotate#

+

First you can just verify that the script can decrypt and re-encrypt the data +using the specified key salt-controller-key2 for re-encryption without errors +by running without the --write flag:

+
+
+
salt-gnupg-rotate \
+    --directory ./pillar \
+    --decryption-gpg-homedir .gnupg \
+    --encryption-gpg-homedir .gnupg \
+    -r salt-controller-key2
+
+
+
+
+

This should run without error, listing each of the files loaded from the +pillar/ directory.

+

Now let’s re-run that same command but at a higher logging verbosity so that we +can see the contents of the decrypted and re-encrypted blocks in the files:

+
+
+
salt-gnupg-rotate \
+    --directory ./pillar \
+    --decryption-gpg-homedir .gnupg \
+    --encryption-gpg-homedir .gnupg \
+    -r salt-controller-key2 \
+    -l trace
+
+
+
+
+

Let’s actually write the changes out to disk this time after re-encryption:

+
+
+
salt-gnupg-rotate \
+    --directory ./pillar \
+    --decryption-gpg-homedir .gnupg \
+    --encryption-gpg-homedir .gnupg \
+    -r salt-controller-key2 \
+    --write
+
+
+
+
+
+
+

Check that the encrypted data was rotated#

+

To do this we will delete the key that was originally used to encrypt the +pillars salt-controller-key1 and then try to decode them using only the new +key salt-controller-key2.

+

First let’s delete the key `salt-controller-key1``:

+
+
+
fingerprint=$(gpg --list-keys salt-controller-key1 | grep -Ev '^(pub|sub|uid)' | head -n1 | awk '{print $1}')
+gpg --batch --yes --delete-secret-key "${fingerprint}"
+gpg --batch --yes --delete-key "${fingerprint}"
+
+
+
+
+

Now let’s try to decrypt the encrypted data:

+
+
+
cat pillar/encrypted_file.gpg | gpg --decrypt
+cat pillar/encrypted_pillar.sls | yq '."my-secret-key"' -r | gpg --decrypt
+
+
+
+
+

Both of the values should decrypted using the new key salt-controller-key2 🚀

+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/main/tutorials/index.html b/main/tutorials/index.html new file mode 100644 index 00000000..b787f813 --- /dev/null +++ b/main/tutorials/index.html @@ -0,0 +1,305 @@ + + + + + + + + + Tutorials - salt-gnupg-rotate documentation + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Tutorials#

+

This is the place to start if you are unfamiliar with salt-gnupg-rotate.

+ +
+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/v0.1.0/.buildinfo b/v0.1.0/.buildinfo new file mode 100644 index 00000000..8d85c715 --- /dev/null +++ b/v0.1.0/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 43406444650543f2fd3691a3099c33d2 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/v0.1.0/.doctrees/about.doctree b/v0.1.0/.doctrees/about.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eefab692f71c35bba2623cb5cc16920448aae38e GIT binary patch literal 6430 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 literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/contributing.doctree b/v0.1.0/.doctrees/contributing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..515376d3bc1243f0760dad2e90b76c5fef0618fb GIT binary patch literal 5874 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 literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/how-to-guides/building-documentation.doctree b/v0.1.0/.doctrees/how-to-guides/building-documentation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0e59e73b8e3eba0dee32c4ee7ce96754f63ff242 GIT binary patch literal 6661 zcmd5>NpBp-6(+@XhMP!RQf!HKJBeco(U8gJAt{DPdaToNCXTasgt-(kRjfdI)V->Y7xXShf*bclcr|+LC$oofOPu*mbnv zPI)%79B3Cd%|7BsB+a?BA7;6%^AUq&Iuq-r;g;+&F=OV78|<6eK!!ZqPut8inbxsv zry4h>o6bl-p<69@0ZS50;(IP+{rqduPovSG&Afw{cZeo63z~IlDHChrwY_PvX*xT) zAJI?wUBSKG!=2r4+`4)1&dts(#`)ddd*1E0{Z5Cyef$2M+jqS-zrTCyj(>mm?yVh& zo$LrTXld2zrV?h^X%|{*l~=MF+V1 zL+rG3D4D~YP#rl*Dm8}%n0DecOq>E0&QDe9cr0|dgmq%O&2JWlN*opPmX>|)$c{4v z<$#6S(aPy^4ZexSabCX1>8RN8c@(H2LF8r>}h3k=)anB zd|k9~Etmk;tGmK%sPtH*`Pm}@| z=!{QVUBKELF??)Ood{`*cYM`nGR*ev0D%Uf33=pflV)b#?(#D8)n|#oNEM*h!w8Z8 zeY1pbeiQ}LlR7&lYBG@Z=YRuieGCJvNz01fRr4wz-EOMy>Y%4LEfKS|E>mc@XD-IR4vIV;!h*8?+z-dA#*CF&bVOKIYh!)@!djYb)?BQtIM0a%S02hk-a3?gFphvy zw`Z=8^zrX!*E9M5l|s*-(>CaNejv4>8Yt_zc>YtS0*n0=PDpC*Fr@VB*rK6gT>X}2F`uH z2qFF^{!YQS3XC zLp-yj$AVyJkwgW|!xwqNC~Wk;JYk86^8U2-rMi40n@(~X`D*Ekbx$LkzCLc#(FSvc zAZs1#Ot&79O!(djhc11laOm1GuU0VxPIKl-6_qvN8PUVcCPCUo-E|I2!VyInJe_SJ zKa)H0+0nIn(2E=9WgW9H39LuEsJFXFR{4W|PAkoVY;VdmOB(KDn9_OEX4Ok$Y8SXw zb6~lg$(sabv8WZ%8Cj?6*;Yp zEr2!aM;I*S2f8@r0K;Z6OydBf6|Fp%+6%ObgXbV&Jj~2SM=4Fun%d&tv{|8!OPKcE zBRoI)8D>@!bTuN^Q+;}-Bw%?ppWy+wGwuKndbezH;KX7>(e>Cj%Q25stlfZKJK5d^ z(-bVIhI3|}A4zBpPy93~iRR3l&)YEczF8fxIHV^4_;S|AOatooI9)3Hm06V`bma2T z!$Um;G8(DwwC=YOiSKLUi!P626}y6ke!ydBoJ93d#joX>u5p>OTr#scu`P@OQ>N~?7QfC04X>|0w()r z-cw-**Mvr-53KTzJj%qpS*4DLJDM^VB;d8;r~SySAPB|U2?_MYAq$A%nw_!WCi9P` zqJ*cua#6&A>LQ*cD&cN@r$vdU-9wp3R9nQ$^<~1^0mnrODHlrDfSWDjG6_A zc%^3*hSy{SyhC^-LIGOn&Jb*TYO7K|c5MI`@>Ck?7JVhu4!$x;Dnrz1V-06B zbMxlCve2~ORh9F{Gpd}EN7Zv>@Ap&+AT!}E>m!-^GPJGZ-XE}B6jx7n=9&bRTeBZM8RD5hViO*BBQg;x0+zJ{cdDezJ z`3%Luk}iiveTJOZ&cdPkZ532LXD45tn5?K9V;mdhsdm%G7=POsr5t)`l2@^UN&->Z zVv^F)l81I7oC*L$re63qVHNWqL75+BKS0DmM;@^YoyG({mLFIJ>#^yjYTCNVk_^2d t^~o)}uCYK*y5T9M{@--BuPrmf!3{hyLwW&qLl{{YN<#@PS> literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/how-to-guides/index.doctree b/v0.1.0/.doctrees/how-to-guides/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b5163aa022cc674783d954e9b2686341dd722566 GIT binary patch literal 6099 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 O_sOT)U**8f=Dz_mK6d;7 literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/how-to-guides/setting-up-for-development.doctree b/v0.1.0/.doctrees/how-to-guides/setting-up-for-development.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8019f85a1270f80760c5648aabf8f334e7f27216 GIT binary patch literal 8891 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 Zc@}Z5pFl>N6N>xC{`-#iGw9UX{{ZrXp(p?V literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/index.doctree b/v0.1.0/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..05123fee0ee75be8cb69df1ec71c1dde761bfdff GIT binary patch literal 9222 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 C?kf2J literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/license.doctree b/v0.1.0/.doctrees/license.doctree new file mode 100644 index 0000000000000000000000000000000000000000..160e80e4fb62826c4d0d69d1a73a8829a7c14a76 GIT binary patch literal 5322 zcmeHLTW{OQ70yk*FuuguWKm#~c6N(&lUA|4PO_V(PqakaOk~O>sU&__5F>IV66UR( zp<_QR&^|2C0Q0u&@9AIbH>4!X-rk=RKrwmd%(;B$%;7on=hol;e(zfSPp+m zu@~Fl`p>=#MkD&&vzO1Gz3_+Z<@V0=;N|v*C`$w&7*LIyQ*?HQDX~`Lxpr&b^EI%)zaVW@R{|VWFmNv1^X-f0};pCB~ z$1$lHI4Kxs#VHFmHO*#0#2bJRD?-zND6vsW8Zc|hFiL50PDWXg@HY7niI8MP{WmLx zmSjORihQbq-6n_)$yt#^La>13MRpnmcn~2K_>VzI9A_V*bWHp#4I;IP*P9Y1UTNBI z$z_W;$wpICd?Y4GN-p4lpfFL%qr>c!LDtm!G!uZdjkSntgv9VpiI`UgA1_-12#^g? z!U`bra|@tp4uPo!a4jf(_V0{-8KlGkL>4ASWz9oy#qflChhy{=(9M7O%2 zTCQ#G4%|KnU+E5Zex<1e-8v@5`y<)O-EvLCX%o}x^afqi+HVsG zAXeWcJ@e3X!RGecN~!kqZKS_P4h_3=04e&e*)!ea+K@fdwUn+sDAUQ2Zo6h@(9>;l zG_a5QjzQp-)-|0@Pd5*Z?k2QDBQf3@mP?!iz1RDvUMkx!`M7JqNPV|wXtgGI*)?sW z<0^M9o;pAd_VwDtIWjt?dNAG_z(BW;+Y_0N@y7v}u&8zQLw(VP67efwAmRT$LZx5>K$19XJgYLLdcmU{((1># zj0L`kBr*4h-hB%hFu7qy>>YEGCm=b4&H=zsaBphOXXNuw1#?=iJ{8PQ1@lwE{8TXi zWx;IPYqYjod`QDzp;r#SL?`}h{2t-=HGWUfD^HtjssI0-Zx3HF%P}gse3rzocuv(o zv6N5RQuO2KG(q|(*Fto(vFd6)T8vc#FK?^XKFzqGg{aU=HEqnx zA)9$17biV-MW@cplO}#CF&ehtZ2J0I9Gda}0*J6J?}>t@Jg)mR4}IYno;1@&OJst^ z)thTloAR&#ucgv=U9S0Mp=KFxHo2@!Da`~UmpBsw-7*HU4b>0U6V|B6Qo+&y(RfSa z5~Is(L|Z^do|mGs!gWh7k6DU2LS#jSmjDG2uq8QOZZ`@&XgR^FHhC?J7;md0^F1~D zs8uL#!NTIal6Oa0CeUBAxy3iv<*FL=(lYVR)PR7P$Tc-l$_ zYE`}I1O|_~k}CzvvqE?=J7s|HhSWkD&t6+{gPlb{O;AztDN{?f0yZqiP`CDh z7Aa5zN5N)~)l$~h~8%){{p=?*)~GtRvEopp-%!aI$4 z)a2*7hcS!}W97)i%Ejrqz!_VCGaM(OK4cKOI$`rhQQXY#pQ|S*!ECFhN(4qp3lQ(y zxVMM^V`O0*VOFgU?|d!Sa+Z4lh2cp0HDD`>GNiCwoecSlP>7tr+S&q{ zZ|3JB%+k%Q7;jbbzT&J60H-Hdg7ApCsm9Hll zNFydjwGN#AtxzN}lr0N7#1RTaSiM=250Q|GH#?g%2fU`Rew26kc`E3cH!G$UE=V$! z_bWU>8TI~D;!tw{^;!Miyn48Mpc7~x`XPlq2z+zcfN~8XcAu2FD%7y9zS5Z#fse?Z z%#YF$a$s5&?y5S$%i$HiC{f89XS6wr>gwjCLe3;Z7U2Az!-SAA0VVf+aGiK8p;7GN zqDocS+U$+VRTGjm9yK-XqrAz|Q*{L-mzr9F!;4gmaOZ%-Av}CP#tgLypR^4ah13!# zu1K3eUHITbbN3RpxfB8!(nhnF1$BgQp9K1%A~w(A>u{gTWknF@IV}943SWQZ;g|Tk zAFgn@Iv=ch_o^Qu^OS}U#v{1NFpFpLuUYS1AFGod2=1k^Q)}!#Tn|8%Mkw lg|otOiF|uTu0wV^O8vMDREmsMw6s9gwn-UKU+Z$X`42K5Nn!v1 literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/reference-guides/index.doctree b/v0.1.0/.doctrees/reference-guides/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..baf82a7bec17f3377b982529f5dd8e9dcb23885c GIT binary patch literal 3786 zcmb_f+ioMr5!Gc$k(5M9Ywsq&t~TQsw%3SB%6qZbe$9hn2xfqV5#+^~G-sOA9ra9) zyL%+^VFBmCNd)wpJHHShUy*O|mGy1S~n>eQ*4uUh~9Uw^Co zvqw5-Jev(k9A`47+SyJlqavl5ao@Oi|L$J7$F{4;m6nBysIyzx5iu@eMKkw>vwgqa zaG{6w`8`b|!)4YSXD!xddtbQ6tZQ3_8$nl=?D0!FrO*}8;FE%T5By$iz4JMpc^_`s z@wKb`YUczejbkUa8#ZpUUE8j`9osvCXVi_039&t5jN+5Rz=proE|0ap!CoYY))3;k zm65c1>cmC9e3_8wLeZ(;Q`kL262Iiw5qosL%}(uKMkdYuPsRzO(b?tb?4u{|fAH-6 z=@UZf^Ro}4rys`CDf#f}i)T-tM-%$u?8&qE#o6;GBe<B#Pv0HG=>BoKa1K>SPef%n+UhhDI#o5fMS7JV=S5iW4ymaAY1J z*bxFk117Hm!?^C{O8yPm3$CQP&;iNfYDoqK3~&=5cmZMscwj#uwpUV(mYJAiZx0l<^w3A_Wf`qU=X;3QpTG}m;k8F~a0XW>x11_RHY5Jo zBGL;z#blWxd%PI|D5%r6vQ`%@*6LK+J6aS8IPb=B?{crAn=;9}6)UW}z3O8_g6uu} zx=|$4g7{E|Kz^dAu1K(DkPT7AtKL(FukiM^Z9giMr`WI|)PsejB39ec)EE>yI>$-V z3Z@DyL;*Y7{xcB;a@+Khwk%9u7&m4|W7|z=MintqIlRPx1-K*4@v>hT3}NL0uf6)U zPy%m>kAtv?XkZAfTkJZBXA*S4+Y7R zf+Q5-j`6;O+O@AK8c7w0D0ILCW;}C@Z5yp(iaR14JO)rf3^T{twoeKp!==dXaA4~& zF48<~@Q0|D0uJb@j0msrsFalG_qkt+a!rd^hO^Y;>6p%PscE=+vV=%v!b`4sh0mif z=9)}|zew%n-l8s0V+Xj5MkSO*2BnAfws1ji_P&3D5lvNDh&1!sV&r=t?1Vg3ufXSt zFD}3)OMpVbQ*PX6$M4vFPV=x~27j3YFG1_2p|1@4TV_nIKOT)B*28>mn9PP!B_n6= z`JJT$*clp{B0XSX+kt%W*4Z<}v#+MnhI%hqs(*W-9+gTwUN5K`a%!ff4OIV#nN+}7 z*N_QHDE1`Yv8MoJ8aB1rTp-lBN6583)^iLkvykzG3H$)wJ3@NgALx{z%Dya6)Ea?$ zt$eRuLm@HVK#aNVG-4QyA|$>lHbl7$Ax>WuIZXI5wQLAA37~sG!m}wbuwaF|o+orM z+1STZ4_+ZjRf>M1yZ}Q}w3-<8JBJI5QUfFRBJ8>dX-c>VF;RP#E!{q;XJUX=Oe;>i zw!1XD^pmOWR9u4M1r#y)aTJFM4N(aNH{o_Ca0<{en6ts(XqOdtA7M<3BeZuj@K2bW zyY@GmTY1LI2D%_%*0MWK&#EE&e)(9<8|Y>~=#4Ju+ljqlrD;~aMSSPGAMS9n^d;q4 zIb*Z$tIr2m+-?lwsj>Itt@duwbeqM(-d($DHLLr%{)WTs+gsiHf8irPT^zJ+PdA9- zD-1JUSUs~jyVSPp1!kTjo39+3Uu*UT{$H{KZ4Xz0U7kLSILgDP3K}bk=dZ=SDy6HE zY9C^aLP#f4G__K0eSJgN?C!2<>@KX9hwiTFM;}tgH@hl#QTl7g!g_uvZ0(3kL+IT`#?>Z dexk9xbgt1jF$I;OeueL=%UeDH|LKtZ;ZG8$%CrCg literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/reference-guides/salt-gnupg-rotate.doctree b/v0.1.0/.doctrees/reference-guides/salt-gnupg-rotate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..221d4fdb11a2c1502a18bd3f3b7895422d0dad46 GIT binary patch literal 16973 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 literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/security.doctree b/v0.1.0/.doctrees/security.doctree new file mode 100644 index 0000000000000000000000000000000000000000..00509d8abf2d1f2abc600762d149e234c30e6cdf GIT binary patch literal 5955 zcmb_gZEsvh6^>ul_WIpP<5DFK8=+EHbZy5;+RzULsVXG67?gyF3PqRMduMlMec!k< z*Y-*TH9!GN^R1UJNc;o-LWP8c#E(Gg#{&PL2nn8ZU-!k{bWts>b?3~PIcJ{poS8H8 zVeR+#UcQw6nKcy(>7VW}$MFM)tHdlgfgO9?*U87p>(7&C$+oFS>_i1|Wb?#af`%=m z>qOj7o+f6M)U|ZgPCkBKaa+s4FNceom=p6)lWkEqH7&Kv`?}29BW}l$)V;A-0;eOm zy?4C3_s#uVZ{E4p-e;WO-Fwr%{g%^iv$t;FyL0=l-QxH5_U}0N_U`WQK6>xnA3c2V z_=6qKNyIg=EUt^0xFwb{;49?T3xT=(C=SCQ(%fl0;gJH+DuZnE+^!rf%)Li*i>*U( zgYXbv1qk9Mp#BblQs`Q?%S(LzN3)zSB@5h+U`A;)@ZtxjdGBrvV0Kl!!xzAz*K( zE8G^F=KhyuEvbO{c0Vw%F||0R^V&EsFPM{$1^XSaXl?}Tnr5wmM9Fdpi7}@;Q4oiH zF{sjO-VR(9a(krnLJyG4fqNnyEs}$Miv3R!^QRdi=6nA?v5}8zw}@lP?i&YFU^Xj= zoUi918jkZzxPXi%qy0p1=8P`4Zf2t3WJI2BL11Cj8|f0?Dm*jud14iLRko}6{-&QZ zNW|fae(Si@^cnmxXgVY?ZV1az7~C?UPgv|8X*h|1fBOVu#05{^wX> zZxRb96)6i0)8MxPXEc)A;@Kct+hgFX-P$?bIW3^eTNP}7n+&$UPO>P9^IrxBjB#}4 z1Ds6h*|=%a@5;$fCv)=egEn6r+aV`k9NRw+T9_yvdjs*vTGdkjJK0kIGw8^Rm-_kO zfHCoyJ`9R*&}ZplcXR5}rHQ=kUMWWuqEFYRhk%1}lBBrmmEJ4uQSK2IM@}ji) z0@c=WERFtsBli2ln#9GotxmpB&j7G(YACwXPqUG0W20-`yd?Zf0YR`ZApxx*N zaic9!K(WSgzh7@O!mI>Sam$may&A2!gSw2C(KwbYEz`a$_5HZjkV?gTQAa3md9>4b zESP_!Zl)`vV(a}c(@bB6JRL$~sOIXP)4x9AWCiZ9dPSCk7X1XEa%+7A+-i(@CBq6K zZ?fh9w0%6Ql!oyirCT1#qPXufwN?~J%`m(BR75Vj8f90`Vl%7UxPyDq@L)!Agt;-!w(_<)7sNV@b#f@y4o$toDd%($ zC1|9#0nNM+jit<>1uI8rF6PZRa?x7Rfo;*Xje2ozJ~x-!L7@FW^FHyxlvx3a+K)Z! zv>ilV0?DevJu$TGz@tmB!erMn39dG$2$SjDvww(DO(g!*g_wB%eR$}V0 zZa42WmBjb;!A^@uQ4m?kYscjguqIb+4f13d_svpEXGzS~P|wg5-9I6D&1yDpg?#tQhDld)HLERM zEDo;^oAd=EisQgR7IL3va}e?+yuXx9P;`Sb3(WC5AfhX=%_rYqf6c6hJhT7`F66$Q z0=7(&7B1u#rG@#5&^lCa@9sjZcEX+(fxi<(o!!J-CC$_UXj+7{eQY=M)WRi*h_eBwKrM}DILzVDLlwPnt(_o+>>&1alfJME*3HYqs?wJo%UP8#Y#3Rk38w8PjTIUqPw`RnW??PGQLW~ z|GvoZIrCj$I;P6752WmE?_89+pTXR@u6~Y=n8ML6hMPIsg8=O_JS37Z``+$;2-WU0 z`uBkTeTV*?(!Uu0VpAtw-3t+Y_>gL!rJ84{)>$lWlAI)h(?OR9=EwOKX*y7^ z4$qbMprF8(of4GJrX}19+$;}JDa^l1#D)B0AoNl45Ze!)AF+|)fmR{mGK1yLJs@5x z#c9qgN#Ay3hjO$->9Xk1;gaveR3n*1ucvSzqpTw2y1xeO2h%C~qp#1uO+cib{{g^4 Bn(qJr literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/tutorials/create-and-rotate-pillar.doctree b/v0.1.0/.doctrees/tutorials/create-and-rotate-pillar.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d5f2ee9b0db46ead9598ca5178faf06cb7caba07 GIT binary patch literal 23056 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 literal 0 HcmV?d00001 diff --git a/v0.1.0/.doctrees/tutorials/index.doctree b/v0.1.0/.doctrees/tutorials/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9b239c96e549d16ec93b4f0e5a671c225e440565 GIT binary patch literal 4340 zcmcIo-EJJW6_zaRpZ?{zU;eeX z;(zR}P8pZeK8YfkL{#Ut9VKBFQ)%+=@_T>EzsiqnN0D=#WGbY&UBQfyaSCU`^I~ksq;+Z5VC@tqs}Ev&pGHem*d9>YgN;Fd81e8XSLm^2y_epNvlk zrH_suhYy}a<1u;i;OWB$kHQgsdVKOQdV2imWB{}Ez*MIma2e5QKaO&Cn{BZ>Y%LqX z2^}1iOcY63-C3VKV_bLfYZ&dOf`qhdlCCyHnJyo9XGzwDf4Z3*lb8!mRQH@4*8Nfw zVR{pprIVgY3^DY}zW4SKJFt)cH=TJI5?DQORgxJUI2_ge4*!{{P*m7W3`_~yte^6Vmrfm_G z%~2)WvFJUp;5P(4_V~UAiF-WZkEGFISpypJ)<+-#b1uB@maWH zw^Ax2Obw<$_*F|gw#lW>qKX0LN2~|n$gcbKc0HcK9dtP$5duMq_#r5FPgjtV*ZLeB zL&s4P6E5?i{{W~b)a3TP>s*!Fre720c6TYAkm49JvlJN{+fBUFX)1UKA6z)B1Td#j zV&!?6a|ibM|I_yiO#2P1ba^`pD?5Kz*m=DR-NC-79qhMnTVR_7oO8R{^C|RsZS?~5 z?Jxn&Wiq;oloc>z5*kJ8lwRV!4wX7IfQmoZ7D!xi&$~nW!6JIs#`@1Wv0Ge*B8%vl z3%`>6gV=UVrV&jI%Rl=Men9Oc_0SF`yoHg@w}1D5xqI5e3I4W>Wk9fSMDHA=ol=#P`k~$Wzha&DYNaO| zEuwEbb0=VBNpF{hCD++?EwTx!<6?o+zJb`GFnRi0dwb-|a>?%7ca0)a3*x*Mq$-&x zs*7^jFsK!xa7{VKdn$ALt=gS1Q?3{X^U}LjNs1C|+nO2!oV22WS*w(C}af?zsMRGdSyqk+sc0O(y4q@nV5A)$hLN#JT~ zP_+=)v0PC06hphEXqqTg3Hpk{eK+g|L;bBj8+M;gIlP8Coau$M5z!IiIBokHotfNJTT%L7X*?VdXTfTkJz<9e6eZVMtO8JSSHJHq!3 zq^W&J(J)a_fV2iou#Mx1p>2kV9OH~|2af<$(7-fjO}j(TN(Bp%y}^O4?I?@WV2(d{ z)eAVFr=)8(hj!OXJo;Vi7ot?tEJ}iD?C`XQ%8_Uq)K_|lgeG{!H81eF8$?`_k#Gko zt!!0!fgIbyVKg$qCmED(m(zlZ%ItxA!zP+4pNLdCZ4u(V2_izAicjEk-z67dBPT$i z;4y02ulGK(J1I>ASLl$Ep?4UndXE6$;q{EFKBs2v_dxa!n27~8>liXZ z3Pqso)3!YXAmd=3oAUz%I&}!SuzPwY4VeavPnf_1@UDx*;eJcU=zD|TXGm%dN4?{} zi_btLAt|baJq#Io=@5Z0k_}$=F2w4yEX5Y?3gfxIB!LT{CkeS60|ON++;lvlv(eH# z9y{=ggcPah?jC13FoUWRA%ABufl+iZ7xq?&S!V%7ha&>qwj9fPv-ivU62L0P1*cuu zH7Z}ZJB)1?T!Q2U6meDHNDdPey^+7a?87KP3&p_kH;QAy-Mi;Vp%7Ku^xPXRR~`GK z<*8h9Un?sDMsIrKT+SM<*c}c&&Qo3q*Ygt!0f_4d%>jCBp%VwD1 zV&w1rsJX3QIp9J59S;9>{u|H-uCpK_+_W_krr2=KyqCnAbFs(#X4$eK$0qK&z7e_N gQ1Ym2bL@t@eFUy2@~-|Tx}ewfe;s_2Bl!LQ0w&6iVE_OC literal 0 HcmV?d00001 diff --git a/v0.1.0/_sources/about.md.txt b/v0.1.0/_sources/about.md.txt new file mode 100644 index 00000000..63efe9b3 --- /dev/null +++ b/v0.1.0/_sources/about.md.txt @@ -0,0 +1,20 @@ +# About these docs + + + +## How the documentation is organized + +- [Tutorials](./tutorials/index) contains lessons that take the reader through a series + of steps to complete a project of some kind +- [Reference guides](./reference-guides/index) contain technical reference + material. They describe how this project works and how to use it but assume + that you have a basic understanding of key concepts. +- [How-to guides](./how-to-guides/index) are recipes. They guide you through the + steps involved in addressing key problems and use-cases. They are more + advanced than tutorials and assume some knowledge of how the application + works. diff --git a/v0.1.0/_sources/contributing.md.txt b/v0.1.0/_sources/contributing.md.txt new file mode 100644 index 00000000..9c3528af --- /dev/null +++ b/v0.1.0/_sources/contributing.md.txt @@ -0,0 +1,16 @@ +# Contributing + +Contributions are welcome and greatly appreciated! + +- It's recommended to file a bug before starting work on anything. It will give + a chance to talk it over with the owners and validate your approach. +- Please add or update tests if the change is testable. +- Update documentation if relevant. + +Thank you for helping improve the project! + +Some useful documentation to check out: + +- [](how-to-guides/setting-up-for-development) +- [](how-to-guides/running-tests) +- [](how-to-guides/building-documentation) diff --git a/v0.1.0/_sources/how-to-guides/building-documentation.md.txt b/v0.1.0/_sources/how-to-guides/building-documentation.md.txt new file mode 100644 index 00000000..99be4e25 --- /dev/null +++ b/v0.1.0/_sources/how-to-guides/building-documentation.md.txt @@ -0,0 +1,32 @@ +# Building the documentation + +Documentation is built via a nox suite that runs sphinx. You can either build +the docs one-time if you want to get a static build for deployment, or you can +start up a server to auto build the documentation when any of the source files +are modified. + +```{note} +This tutorial assumes you have already followed the [](setting-up-for-development) +steps to set up for developing this project. +``` + +## Building static documentation + +To generate a static copy of the documentation: + +```bash +nox -s docs-build +``` + +The generated documentation will be placed in the `docs/_build` directory. + +## Live-view documentation + +To view the documentation live in your browser while editing it you can run: + +```bash +nox -s docs +``` + +A browser window will be opened to the sphinx server so you can view updates +dynamically diff --git a/v0.1.0/_sources/how-to-guides/index.md.txt b/v0.1.0/_sources/how-to-guides/index.md.txt new file mode 100644 index 00000000..37789a14 --- /dev/null +++ b/v0.1.0/_sources/how-to-guides/index.md.txt @@ -0,0 +1,22 @@ +# How-To Guides + +These guides are recipes. They guide you through the steps involved in +addressing key problems and use-cases. They are more advanced than tutorials and +assume some knowledge of how the application works. + +## For developing/maintaining this project + +- [](setting-up-for-development) Takes you through the setup of any dependencies + you would need to work on this project +- [](running-tests) Shows how to run the test suites +- [](building-documentation) Shows how to build and modify the project documentation + +```{toctree} +:maxdepth: 2 +:hidden: true + +setting-up-for-development +running-tests +building-documentation + +``` diff --git a/v0.1.0/_sources/how-to-guides/running-tests.md.txt b/v0.1.0/_sources/how-to-guides/running-tests.md.txt new file mode 100644 index 00000000..329757fc --- /dev/null +++ b/v0.1.0/_sources/how-to-guides/running-tests.md.txt @@ -0,0 +1,30 @@ +# Running Tests + +Here we will run the test suite for the `salt-gnupg-rotate` project. + +```{note} +This tutorial assumes you have already followed the [](setting-up-for-development) +steps to set up for developing this project. +``` + +## Running all the test suites + +To run all of the test suites: + +```bash +nox +``` + +## Running a specific test suite + +List out the available nox test suites: + +```bash +nox -s +``` + +Select the suite you would like to run from the list of available suites and run it with: + +```bash +nox -s +``` diff --git a/v0.1.0/_sources/how-to-guides/setting-up-for-development.md.txt b/v0.1.0/_sources/how-to-guides/setting-up-for-development.md.txt new file mode 100644 index 00000000..aa4dd781 --- /dev/null +++ b/v0.1.0/_sources/how-to-guides/setting-up-for-development.md.txt @@ -0,0 +1,50 @@ +# Setting Up for Development + +Here we will set up your system to develop this project. + +## Install dependencies + +You will need the following python modules installed on your system: + +- `poetry` +- `nox` +- `nox-poetry` +- `pre-commit` + +````{tab} pip +```bash +pip install poetry nox nox-poetry pre-commit +``` +```` + +You will also need either `conda` or `mamba` for virtual environment management. +I am partial to miniforge myself but any flavor should work. + +```{tab} Miniforge +See the Miniforge [README](https://github.com/conda-forge/miniforge) +``` + +````{tab} Fedora +```bash +sudo dnf install conda +``` +```` + +## Checkout the project and install hooks + +Checkout the upstream or your own fork of the project + +```bash +# checkout +git checkout + +# install commit hooks +cd salt-gnupg-rotate +pre-commit install --install-hooks +``` + +Now you should be set up to develop the project. + +--- + +See [](running-tests) for how to run the test suite. diff --git a/v0.1.0/_sources/index.md.txt b/v0.1.0/_sources/index.md.txt new file mode 100644 index 00000000..b2f20148 --- /dev/null +++ b/v0.1.0/_sources/index.md.txt @@ -0,0 +1,19 @@ +```{include} ../README.md +:start-after: +:end-before: +``` + +```{toctree} +:hidden: true +:maxdepth: 2 +:caption: Table of Contents + +About +tutorials/index +reference-guides/index +how-to-guides/index +contributing +license +security +GitHub Repository +``` diff --git a/v0.1.0/_sources/license.rst.txt b/v0.1.0/_sources/license.rst.txt new file mode 100644 index 00000000..8f3cf1fb --- /dev/null +++ b/v0.1.0/_sources/license.rst.txt @@ -0,0 +1,4 @@ +License +======= + +.. literalinclude:: ../LICENSE diff --git a/v0.1.0/_sources/reference-guides/index.md.txt b/v0.1.0/_sources/reference-guides/index.md.txt new file mode 100644 index 00000000..d307eaf0 --- /dev/null +++ b/v0.1.0/_sources/reference-guides/index.md.txt @@ -0,0 +1,11 @@ +# Reference Guides + +These guides contain technical reference material. They describe how this +project works and how to use it but assume that you have a basic understanding +of key concepts. + +```{toctree} +:maxdepth: 2 + +salt-gnupg-rotate +``` diff --git a/v0.1.0/_sources/reference-guides/salt-gnupg-rotate.rst.txt b/v0.1.0/_sources/reference-guides/salt-gnupg-rotate.rst.txt new file mode 100644 index 00000000..e5a19a4b --- /dev/null +++ b/v0.1.0/_sources/reference-guides/salt-gnupg-rotate.rst.txt @@ -0,0 +1,6 @@ +CLI Reference +============= + +.. click:: salt_gnupg_rotate.cli:cli + :prog: salt-gnupg-rotate + :nested: full diff --git a/v0.1.0/_sources/security.md.txt b/v0.1.0/_sources/security.md.txt new file mode 100644 index 00000000..fe2dbc9e --- /dev/null +++ b/v0.1.0/_sources/security.md.txt @@ -0,0 +1,3 @@ +```{include} ../SECURITY.md + +``` diff --git a/v0.1.0/_sources/tutorials/create-and-rotate-pillar.md.txt b/v0.1.0/_sources/tutorials/create-and-rotate-pillar.md.txt new file mode 100644 index 00000000..c45bcb6b --- /dev/null +++ b/v0.1.0/_sources/tutorials/create-and-rotate-pillar.md.txt @@ -0,0 +1,206 @@ +# Encrypt and Rotate a Salt Pillar + +Let's generate some encrypted pillars and then rotate the keys on them. + +## Setup + +### Install packages + +````{tab} pipx +``` +pipx install salt-gnupg-rotate yq +``` +```` + +````{tab} pip +``` +pip install salt-gnupg-rotate yq +``` +```` + +### Make tutorial directories to work in + +We will create a new directory for some test pillars and a directory for a +temporary gnupg keyring: + +````{tab} Linux +```shell +mkdir -p rotate-tutorial/{.gnupg/private-keys-v1.d,pillar} +cd rotate-tutorial +chmod 700 .gnupg +``` +```` + +### Tell `gpg` to use this new keyring home directory + +````{tab} Linux +```shell +export GNUPGHOME=$(pwd)/.gnupg +echo $GNUPGHOME +``` +```` + +### Create the new keyring and list the keys + +````{tab} Linux +```shell +# this will create the empty keyring +gpg --list-keys + +# now we can create a new key +echo "Key-Type: 1 +Key-Length: 2048 +Subkey-Type: 1 +Subkey-Length: 2048 +Name-Real: salt-controller-key1 +Name-Email: tutorial@foo.bar +Expire-Date: 0 +%no-protection" | gpg --batch --gen-key +``` +```` + +Now list the available secret keys, you should see the key +`salt-controller-key1`: + +````{tab} Linux +```shell +gpg --list-secret-keys +``` +```` + +## Create some encrypted files + +Let's create a completely encrypted file with the contents `Hello!`, using the +encryption key `salt-controller-key1` and then verify that we can decrypt it: + +````{tab} Linux +```shell +# create the encrypted file +echo -n 'Hello!' | gpg --encrypt --armor -r salt-controller-key1 > pillar/encrypted_file.gpg + +# decrypt the file using the original key +cat pillar/encrypted_file.gpg| gpg --decrypt +``` +```` + +Now let's create a yaml file with one value that has been encrypted: + +````{tab} Linux +```shell +# encrypt some secret data +echo -n "my-secret-value" | gpg --encrypt --armor -r salt-controller-key1 + +# create a yaml pillar with an encrypted value +vim pillar/encrypted_pillar.sls +``` +```` + +You will need to create a file with a structure similar to: + +```yaml +my-secret-key: | + -----BEGIN PGP MESSAGE----- + + + -----END PGP MESSAGE----- +``` + +Once the file has the correct format and encrypted data save and exit your +editor. + +## Create a new secret key we can use to rotate encryption + +````{tab} Linux +```shell +echo "Key-Type: 1 +Key-Length: 2048 +Subkey-Type: 1 +Subkey-Length: 2048 +Name-Real: salt-controller-key2 +Name-Email: tutorial@foo.bar +Expire-Date: 0 +%no-protection" | gpg --batch --gen-key +``` +```` + +Now list the available secret keys, now you should see both of the keys +`salt-controller-key1` and `salt-controller-key2`: + +````{tab} Linux +```shell +gpg --list-secret-keys +``` +```` + +## Rotate encryption using `salt-gnupg-rotate` + +First you can just verify that the script can decrypt and re-encrypt the data +using the specified key `salt-controller-key2` for re-encryption without errors +by running without the `--write` flag: + +````{tab} Linux +```shell +salt-gnupg-rotate \ + --directory ./pillar \ + --decryption-gpg-homedir .gnupg \ + --encryption-gpg-homedir .gnupg \ + -r salt-controller-key2 +``` +```` + +This should run without error, listing each of the files loaded from the +`pillar/` directory. + +Now let's re-run that same command but at a higher logging verbosity so that we +can see the contents of the decrypted and re-encrypted blocks in the files: + +````{tab} Linux +```shell +salt-gnupg-rotate \ + --directory ./pillar \ + --decryption-gpg-homedir .gnupg \ + --encryption-gpg-homedir .gnupg \ + -r salt-controller-key2 \ + -l trace +``` +```` + +Let's actually write the changes out to disk this time after re-encryption: + +````{tab} Linux +```shell +salt-gnupg-rotate \ + --directory ./pillar \ + --decryption-gpg-homedir .gnupg \ + --encryption-gpg-homedir .gnupg \ + -r salt-controller-key2 \ + --write +``` +```` + +## Check that the encrypted data was rotated + +To do this we will delete the key that was originally used to encrypt the +pillars `salt-controller-key1` and then try to decode them using only the new +key `salt-controller-key2`. + +First let's delete the key `salt-controller-key1``: + +````{tab} Linux +```shell +fingerprint=$(gpg --list-keys salt-controller-key1 | grep -Ev '^(pub|sub|uid)' | head -n1 | awk '{print $1}') +gpg --batch --yes --delete-secret-key "${fingerprint}" +gpg --batch --yes --delete-key "${fingerprint}" +``` +```` + +Now let's try to decrypt the encrypted data: + +````{tab} Linux +```shell +cat pillar/encrypted_file.gpg | gpg --decrypt +cat pillar/encrypted_pillar.sls | yq '."my-secret-key"' -r | gpg --decrypt +``` +```` + +Both of the values should decrypted using the new key `salt-controller-key2` 🚀 diff --git a/v0.1.0/_sources/tutorials/index.md.txt b/v0.1.0/_sources/tutorials/index.md.txt new file mode 100644 index 00000000..b23b7c48 --- /dev/null +++ b/v0.1.0/_sources/tutorials/index.md.txt @@ -0,0 +1,12 @@ +# Tutorials + +This is the place to start if you are unfamiliar with `salt-gnupg-rotate`. + +- [](create-and-rotate-pillar) walks you through creating an encrypted pillar and then rotating the encryption keys on it + +```{toctree} +:hidden: true + + +create-and-rotate-pillar +``` diff --git a/v0.1.0/_static/basic.css b/v0.1.0/_static/basic.css new file mode 100644 index 00000000..30fee9d0 --- /dev/null +++ b/v0.1.0/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/v0.1.0/_static/check-solid.svg b/v0.1.0/_static/check-solid.svg new file mode 100644 index 00000000..92fad4b5 --- /dev/null +++ b/v0.1.0/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/v0.1.0/_static/clipboard.min.js b/v0.1.0/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/v0.1.0/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/v0.1.0/_static/copybutton.css b/v0.1.0/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/v0.1.0/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/v0.1.0/_static/copybutton.js b/v0.1.0/_static/copybutton.js new file mode 100644 index 00000000..e0da1932 --- /dev/null +++ b/v0.1.0/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '>>> |\\.\\.\\. |\\$ |In \\[\\d*\\]: | {2,5}\\.\\.\\.: | {5,8}: ', true, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/v0.1.0/_static/copybutton_funcs.js b/v0.1.0/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/v0.1.0/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/v0.1.0/_static/debug.css b/v0.1.0/_static/debug.css new file mode 100644 index 00000000..74d4aec3 --- /dev/null +++ b/v0.1.0/_static/debug.css @@ -0,0 +1,69 @@ +/* + This CSS file should be overridden by the theme authors. It's + meant for debugging and developing the skeleton that this theme provides. +*/ +body { + font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + background: lavender; +} +.sb-announcement { + background: rgb(131, 131, 131); +} +.sb-announcement__inner { + background: black; + color: white; +} +.sb-header { + background: lightskyblue; +} +.sb-header__inner { + background: royalblue; + color: white; +} +.sb-header-secondary { + background: lightcyan; +} +.sb-header-secondary__inner { + background: cornflowerblue; + color: white; +} +.sb-sidebar-primary { + background: lightgreen; +} +.sb-main { + background: blanchedalmond; +} +.sb-main__inner { + background: antiquewhite; +} +.sb-header-article { + background: lightsteelblue; +} +.sb-article-container { + background: snow; +} +.sb-article-main { + background: white; +} +.sb-footer-article { + background: lightpink; +} +.sb-sidebar-secondary { + background: lightgoldenrodyellow; +} +.sb-footer-content { + background: plum; +} +.sb-footer-content__inner { + background: palevioletred; +} +.sb-footer { + background: pink; +} +.sb-footer__inner { + background: salmon; +} +.sb-article { + background: white; +} diff --git a/v0.1.0/_static/doctools.js b/v0.1.0/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/v0.1.0/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/v0.1.0/_static/documentation_options.js b/v0.1.0/_static/documentation_options.js new file mode 100644 index 00000000..7e4c114f --- /dev/null +++ b/v0.1.0/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/v0.1.0/_static/file.png b/v0.1.0/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/v0.1.0/_static/language_data.js b/v0.1.0/_static/language_data.js new file mode 100644 index 00000000..250f5665 --- /dev/null +++ b/v0.1.0/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/v0.1.0/_static/minus.png b/v0.1.0/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/v0.1.0/_static/plus.png b/v0.1.0/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/v0.1.0/_static/pygments.css b/v0.1.0/_static/pygments.css new file mode 100644 index 00000000..c2e07c71 --- /dev/null +++ b/v0.1.0/_static/pygments.css @@ -0,0 +1,258 @@ +.highlight pre { line-height: 125%; } +.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ +@media not print { +body[data-theme="dark"] .highlight pre { line-height: 125%; } +body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight .hll { background-color: #404040 } +body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } +body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ +body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ +body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ +body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ +body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ +body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ +body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ +body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body[data-theme="dark"] .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */ +body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ +body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ +body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */ +body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */ +body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */ +body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */ +body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */ +body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */ +body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */ +body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +@media (prefers-color-scheme: dark) { +body:not([data-theme="light"]) .highlight pre { line-height: 125%; } +body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } +body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 } +body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */ +body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */ +body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */ +body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */ +body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */ +body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */ +body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */ +body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */ +body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ +body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ +body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */ +body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */ +body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */ +body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */ +body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */ +body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */ +body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */ +body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +} +} \ No newline at end of file diff --git a/v0.1.0/_static/scripts/furo-extensions.js b/v0.1.0/_static/scripts/furo-extensions.js new file mode 100644 index 00000000..e69de29b diff --git a/v0.1.0/_static/scripts/furo.js b/v0.1.0/_static/scripts/furo.js new file mode 100644 index 00000000..32e7c05b --- /dev/null +++ b/v0.1.0/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/v0.1.0/_static/scripts/furo.js.LICENSE.txt b/v0.1.0/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 00000000..1632189c --- /dev/null +++ b/v0.1.0/_static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/v0.1.0/_static/scripts/furo.js.map b/v0.1.0/_static/scripts/furo.js.map new file mode 100644 index 00000000..7b7ddb11 --- /dev/null +++ b/v0.1.0/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/v0.1.0/_static/searchtools.js b/v0.1.0/_static/searchtools.js new file mode 100644 index 00000000..7918c3fa --- /dev/null +++ b/v0.1.0/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/v0.1.0/_static/skeleton.css b/v0.1.0/_static/skeleton.css new file mode 100644 index 00000000..467c878c --- /dev/null +++ b/v0.1.0/_static/skeleton.css @@ -0,0 +1,296 @@ +/* Some sane resets. */ +html { + height: 100%; +} + +body { + margin: 0; + min-height: 100%; +} + +/* All the flexbox magic! */ +body, +.sb-announcement, +.sb-content, +.sb-main, +.sb-container, +.sb-container__inner, +.sb-article-container, +.sb-footer-content, +.sb-header, +.sb-header-secondary, +.sb-footer { + display: flex; +} + +/* These order things vertically */ +body, +.sb-main, +.sb-article-container { + flex-direction: column; +} + +/* Put elements in the center */ +.sb-header, +.sb-header-secondary, +.sb-container, +.sb-content, +.sb-footer, +.sb-footer-content { + justify-content: center; +} +/* Put elements at the ends */ +.sb-article-container { + justify-content: space-between; +} + +/* These elements grow. */ +.sb-main, +.sb-content, +.sb-container, +article { + flex-grow: 1; +} + +/* Because padding making this wider is not fun */ +article { + box-sizing: border-box; +} + +/* The announcements element should never be wider than the page. */ +.sb-announcement { + max-width: 100%; +} + +.sb-sidebar-primary, +.sb-sidebar-secondary { + flex-shrink: 0; + width: 17rem; +} + +.sb-announcement__inner { + justify-content: center; + + box-sizing: border-box; + height: 3rem; + + overflow-x: auto; + white-space: nowrap; +} + +/* Sidebars, with checkbox-based toggle */ +.sb-sidebar-primary, +.sb-sidebar-secondary { + position: fixed; + height: 100%; + top: 0; +} + +.sb-sidebar-primary { + left: -17rem; + transition: left 250ms ease-in-out; +} +.sb-sidebar-secondary { + right: -17rem; + transition: right 250ms ease-in-out; +} + +.sb-sidebar-toggle { + display: none; +} +.sb-sidebar-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + + transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; + + opacity: 0; + background-color: rgba(0, 0, 0, 0.54); +} + +#sb-sidebar-toggle--primary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], +#sb-sidebar-toggle--secondary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { + width: 100%; + height: 100%; + opacity: 1; + transition: width 0ms ease, height 0ms ease, opacity 250ms ease; +} + +#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { + left: 0; +} +#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { + right: 0; +} + +/* Full-width mode */ +.drop-secondary-sidebar-for-full-width-content + .hide-when-secondary-sidebar-shown { + display: none !important; +} +.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { + display: none !important; +} + +/* Mobile views */ +.sb-page-width { + width: 100%; +} + +.sb-article-container, +.sb-footer-content__inner, +.drop-secondary-sidebar-for-full-width-content .sb-article, +.drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 100vw; +} + +.sb-article, +.match-content-width { + padding: 0 1rem; + box-sizing: border-box; +} + +@media (min-width: 32rem) { + .sb-article, + .match-content-width { + padding: 0 2rem; + } +} + +/* Tablet views */ +@media (min-width: 42rem) { + .sb-article-container { + width: auto; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 42rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 46rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 46rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 50rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 50rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Tablet views */ +@media (min-width: 59rem) { + .sb-sidebar-secondary { + position: static; + } + .hide-when-secondary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 63rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 67rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Desktop views */ +@media (min-width: 76rem) { + .sb-sidebar-primary { + position: static; + } + .hide-when-primary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} + +/* Full desktop views */ +@media (min-width: 80rem) { + .sb-article, + .match-content-width { + width: 46rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } +} + +@media (min-width: 84rem) { + .sb-article, + .match-content-width { + width: 50rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } +} + +@media (min-width: 88rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-page-width { + width: 88rem; + } +} diff --git a/v0.1.0/_static/sphinx_highlight.js b/v0.1.0/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/v0.1.0/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/v0.1.0/_static/styles/furo-extensions.css b/v0.1.0/_static/styles/furo-extensions.css new file mode 100644 index 00000000..bc447f22 --- /dev/null +++ b/v0.1.0/_static/styles/furo-extensions.css @@ -0,0 +1,2 @@ +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/v0.1.0/_static/styles/furo-extensions.css.map b/v0.1.0/_static/styles/furo-extensions.css.map new file mode 100644 index 00000000..9ba5637f --- /dev/null +++ b/v0.1.0/_static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/v0.1.0/_static/styles/furo.css b/v0.1.0/_static/styles/furo.css new file mode 100644 index 00000000..3d29a218 --- /dev/null +++ b/v0.1.0/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}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;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}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}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-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}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:3.5rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/v0.1.0/_static/styles/furo.css.map b/v0.1.0/_static/styles/furo.css.map new file mode 100644 index 00000000..d1dfb109 --- /dev/null +++ b/v0.1.0/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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0CACE,CAFF,kBACA,CACE,wEACA,CARA,YACA,CAKF,mBAFF,OAII,eACA,CAJF,iCAJE,cAGJ,CANI,oBAEA,CAKF,SAIE,2BADA,UACA,kBAGF,sCACA,CAFF,WACE,WACA,qCACE,gCACA,2EACA,sDAKJ,aACE,mDAII,CAJJ,6CAII,kEACA,iBACE,iDACA,+CACE,aACA,WADA,+BACA,uEANN,YACE,mDAEE,mBADF,0CACE,CADF,qBACE,0DACA,YACE,4DACA,sEANN,YACE,8CACA,kBADA,UACA,2CACE,2EACA,cACE,kEACA,mEANN,yBACE,4DACA,sBACE,+EAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kEAGA,8CAEA,uDAKA,oCAEA,yDAEE,gEAKF,+CC5FA,0EAGE,CACA,qDCLJ,+DAIE,sCAIA,kEACE,yBACA,2FAMA,gBACA,yGCbF,mBAOA,2MAIA,4HAYA,0DACE,8GAYF,8HAQE,mBAEA,6HAOF,YAGA,mIAME,eACA,CAFF,YAEE,4FAMJ,8BAEE,uBAYA,sCAEE,CAJF,oBAEA,CARA,wCAEA,CAHA,8BACA,CAFA,eACA,CAGA,wCAEA,CAEA,mDAIE,kCACE,6BACA,4CAKJ,kDAIA,eACE,aAGF,8BACE,uDACA,sCACA,cAEA,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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto\n display: block\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #646776; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #ffffffcc; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: 1rem\n width: 1rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1rem\n width: 1rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page svg\n color: inherit\n height: 1rem\n width: 1rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: var(--header-height)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 3.5rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > p,\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 0.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(0.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(0.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the
+
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

About these docs#

+ +
+

How the documentation is organized#

+
    +
  • Tutorials contains lessons that take the reader through a series +of steps to complete a project of some kind

  • +
  • Reference guides contain technical reference +material. They describe how this project works and how to use it but assume +that you have a basic understanding of key concepts.

  • +
  • How-to guides are recipes. They guide you through the +steps involved in addressing key problems and use-cases. They are more +advanced than tutorials and assume some knowledge of how the application +works.

  • +
+
+
+ +
+
+ +
+ +
+