first commit

This commit is contained in:
2026-05-21 08:40:24 -04:00
commit b084545275
711 changed files with 3659856 additions and 0 deletions

BIN
streamlit_dashboard/docs/_build/html.zip vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
config: f4cb7426e956939be96b663f5a18a2d3
tags: 645f666f9bcd5a90fca523b33c5a78b7

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
auth\_config\_loader module
===========================
.. automodule:: auth_config_loader
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,19 @@
.. Streamlit Dashboard documentation master file, created by
sphinx-quickstart on Mon Apr 20 13:21:01 2026.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Streamlit Dashboard documentation
=================================
Add your content using ``reStructuredText`` syntax. See the
`reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html>`_
documentation for details.
.. toctree::
:maxdepth: 2
:caption: Contents:
modules

View File

@@ -0,0 +1,7 @@
main module
===========
.. automodule:: main
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,7 @@
streamlit_dashboard
===================
.. toctree::
:maxdepth: 4
streamlit_dashboard

View File

@@ -0,0 +1,7 @@
streamlit\_constants module
===========================
.. automodule:: streamlit_constants
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,47 @@
streamlit\_dashboard.cached\_function\_wrappers namespace
=========================================================
.. py:module:: streamlit_dashboard.cached_function_wrappers
Submodules
----------
streamlit\_dashboard.cached\_function\_wrappers.client\_list\_cached\_functions module
--------------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.cached_function_wrappers.client_list_cached_functions
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.cached\_function\_wrappers.funding\_milestones\_cached\_functions module
---------------------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.cached_function_wrappers.funding_milestones_cached_functions
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.cached\_function\_wrappers.nbs\_cached\_functions module
-----------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.cached_function_wrappers.nbs_cached_functions
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.cached\_function\_wrappers.shared module
-------------------------------------------------------------
.. automodule:: streamlit_dashboard.cached_function_wrappers.shared
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.cached\_function\_wrappers.trainings\_cached\_functions module
-----------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.cached_function_wrappers.trainings_cached_functions
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,15 @@
streamlit\_dashboard.components namespace
=========================================
.. py:module:: streamlit_dashboard.components
Submodules
----------
streamlit\_dashboard.components.neoserra\_export\_link\_grabber module
----------------------------------------------------------------------
.. automodule:: streamlit_dashboard.components.neoserra_export_link_grabber
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,119 @@
streamlit\_dashboard.page\_classes namespace
============================================
.. py:module:: streamlit_dashboard.page_classes
Submodules
----------
streamlit\_dashboard.page\_classes.admin\_panel\_page\_class module
-------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.admin_panel_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.authentication\_page\_wrapper module
-----------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.authentication_page_wrapper
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.center\_milestones\_page\_class module
-------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.center_milestones_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.funding\_milestones\_page\_class module
--------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.funding_milestones_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.naics\_report\_page\_class module
--------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.naics_report_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.nbs\_milestones\_page\_class module
----------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.nbs_milestones_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.page\_class\_constants module
----------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.page_class_constants
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.report\_comparer\_page\_class module
-----------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.report_comparer_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.training\_attendee\_counts\_class module
---------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.training_attendee_counts_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.training\_attendee\_ranges\_page\_class module
---------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.training_attendee_ranges_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.training\_count\_statistics\_page\_class module
----------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.training_count_statistics_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.training\_event\_count\_attendee\_comparison\_page\_class module
---------------------------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.training_event_count_attendee_comparison_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.training\_event\_count\_page\_class module
-----------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.training_event_count_page_class
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.page\_classes.training\_primary\_topics\_page\_class module
--------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.page_classes.training_primary_topics_page_class
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,43 @@
streamlit\_dashboard namespace
==============================
.. py:module:: streamlit_dashboard
Subpackages
-----------
.. toctree::
:maxdepth: 4
streamlit_dashboard.cached_function_wrappers
streamlit_dashboard.components
streamlit_dashboard.page_classes
streamlit_dashboard.streamlit_pages
streamlit_dashboard.utility_classes
Submodules
----------
streamlit\_dashboard.auth\_config\_loader module
------------------------------------------------
.. automodule:: streamlit_dashboard.auth_config_loader
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.main module
--------------------------------
.. automodule:: streamlit_dashboard.main
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_constants module
------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_constants
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,103 @@
streamlit\_dashboard.streamlit\_pages namespace
===============================================
.. py:module:: streamlit_dashboard.streamlit_pages
Submodules
----------
streamlit\_dashboard.streamlit\_pages.admin\_streamlit\_page module
-------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.admin_streamlit_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.center\_streamlit\_page module
--------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.center_streamlit_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.comparer\_streamlit\_page module
----------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.comparer_streamlit_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.funding\_streamlit\_page module
---------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.funding_streamlit_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.naics\_streamlit\_page module
-------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.naics_streamlit_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.nbs\_streamlit\_page module
-----------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.nbs_streamlit_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.training\_attendee\_ranges\_page module
-----------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.training_attendee_ranges_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.trainings\_attendees\_count\_page module
------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.trainings_attendees_count_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.trainings\_count\_statistics\_page module
-------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.trainings_count_statistics_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.trainings\_event\_attendee\_comparison\_page module
-----------------------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.trainings_event_attendee_comparison_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.trainings\_event\_count\_page module
--------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.trainings_event_count_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.streamlit\_pages.trainings\_primary\_topic\_page module
----------------------------------------------------------------------------
.. automodule:: streamlit_dashboard.streamlit_pages.trainings_primary_topic_page
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,31 @@
streamlit\_dashboard.utility\_classes namespace
===============================================
.. py:module:: streamlit_dashboard.utility_classes
Submodules
----------
streamlit\_dashboard.utility\_classes.base\_report\_page module
---------------------------------------------------------------
.. automodule:: streamlit_dashboard.utility_classes.base_report_page
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.utility\_classes.dashboard\_config\_parser module
----------------------------------------------------------------------
.. automodule:: streamlit_dashboard.utility_classes.dashboard_config_parser
:members:
:show-inheritance:
:undoc-members:
streamlit\_dashboard.utility\_classes.figure\_with\_max\_y module
-----------------------------------------------------------------
.. automodule:: streamlit_dashboard.utility_classes.figure_with_max_y
:members:
:show-inheritance:
:undoc-members:

View File

@@ -0,0 +1,663 @@
/* -- page layout ----------------------------------------------------------- */
body {
font-family: Georgia, serif;
font-size: 17px;
background-color: #fff;
color: #000;
margin: 0;
padding: 0;
}
div.document {
width: 940px;
margin: 30px auto 0 auto;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 220px;
}
div.sphinxsidebar {
width: 220px;
font-size: 14px;
line-height: 1.5;
}
hr {
border: 1px solid #B1B4B6;
}
div.body {
background-color: #fff;
color: #3E4349;
padding: 0 30px 0 30px;
}
div.body > .section {
text-align: left;
}
div.footer {
width: 940px;
margin: 20px auto 30px auto;
font-size: 14px;
color: #888;
text-align: right;
}
div.footer a {
color: #888;
}
p.caption {
font-family: inherit;
font-size: inherit;
}
div.relations {
display: none;
}
div.sphinxsidebar {
max-height: 100%;
overflow-y: auto;
}
div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}
div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}
div.sphinxsidebarwrapper {
padding: 18px 10px;
}
div.sphinxsidebarwrapper p.logo {
padding: 0;
margin: -10px 0 0 0px;
text-align: center;
}
div.sphinxsidebarwrapper h1.logo {
margin-top: -10px;
text-align: center;
margin-bottom: 5px;
text-align: left;
}
div.sphinxsidebarwrapper h1.logo-name {
margin-top: 0px;
}
div.sphinxsidebarwrapper p.blurb {
margin-top: 0;
font-style: normal;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: Georgia, serif;
color: #444;
font-size: 24px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}
div.sphinxsidebar h4 {
font-size: 20px;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}
div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}
div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}
div.sphinxsidebar ul li.toctree-l1 > a {
font-size: 120%;
}
div.sphinxsidebar ul li.toctree-l2 > a {
font-size: 110%;
}
div.sphinxsidebar input {
border: 1px solid #CCC;
font-family: Georgia, serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox {
margin: 1em 0;
}
div.sphinxsidebar .search > div {
display: table-cell;
}
div.sphinxsidebar hr {
border: none;
height: 1px;
color: #AAA;
background: #AAA;
text-align: left;
margin-left: 0;
width: 50%;
}
div.sphinxsidebar .badge {
border-bottom: none;
}
div.sphinxsidebar .badge:hover {
border-bottom: none;
}
/* To address an issue with donation coming after search */
div.sphinxsidebar h3.donation {
margin-top: 10px;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #004B6B;
text-decoration: underline;
}
a:hover {
color: #6D4100;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: Georgia, serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: #DDD;
padding: 0 4px;
text-decoration: none;
}
a.headerlink:hover {
color: #444;
background: #EAEAEA;
}
div.body p, div.body dd, div.body li {
line-height: 1.4em;
}
div.admonition {
margin: 20px 0px;
padding: 10px 30px;
background-color: #EEE;
border: 1px solid #CCC;
}
div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fafafa;
}
div.admonition p.admonition-title {
font-family: Georgia, serif;
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}
div.admonition p.last {
margin-bottom: 0;
}
dt:target, .highlight {
background: #FAF3E8;
}
div.warning {
background-color: #FCC;
border: 1px solid #FAA;
}
div.danger {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}
div.error {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}
div.caution {
background-color: #FCC;
border: 1px solid #FAA;
}
div.attention {
background-color: #FCC;
border: 1px solid #FAA;
}
div.important {
background-color: #EEE;
border: 1px solid #CCC;
}
div.note {
background-color: #EEE;
border: 1px solid #CCC;
}
div.tip {
background-color: #EEE;
border: 1px solid #CCC;
}
div.hint {
background-color: #EEE;
border: 1px solid #CCC;
}
div.seealso {
background-color: #EEE;
border: 1px solid #CCC;
}
div.topic {
background-color: #EEE;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre, tt, code {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
}
.hll {
background-color: #FFC;
margin: 0 -12px;
padding: 0 12px;
display: block;
}
img.screenshot {
}
tt.descname, tt.descclassname, code.descname, code.descclassname {
font-size: 0.95em;
}
tt.descname, code.descname {
padding-right: 0.08em;
}
img.screenshot {
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}
table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}
table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}
table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #EEE;
background: #FDFDFD;
font-size: 0.9em;
}
table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}
table.field-list th {
padding: 0 0.8em 0 0;
}
table.field-list td {
padding: 0;
}
table.field-list p {
margin-bottom: 0.8em;
}
/* Cloned from
* https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
*/
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
table.footnote td.label {
width: .1px;
padding: 0.3em 0 0.3em 0.5em;
}
table.footnote td {
padding: 0.3em 0.5em;
}
dl {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding: 0;
}
dl dd {
margin-left: 30px;
}
blockquote {
margin: 0 0 0 30px;
padding: 0;
}
ul, ol {
/* Matches the 30px from the narrow-screen "li > ul" selector below */
margin: 10px 0 10px 30px;
padding: 0;
}
pre {
background: unset;
padding: 7px 30px;
margin: 15px 0px;
line-height: 1.3em;
}
div.viewcode-block:target {
background: #ffd;
}
dl pre, blockquote pre, li pre {
margin-left: 0;
padding-left: 30px;
}
tt, code {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}
tt.xref, code.xref, a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fff;
}
a.reference {
text-decoration: none;
border-bottom: 1px dotted #004B6B;
}
a.reference:hover {
border-bottom: 1px solid #6D4100;
}
/* Don't put an underline on images */
a.image-reference, a.image-reference:hover {
border-bottom: none;
}
a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #004B6B;
}
a.footnote-reference:hover {
border-bottom: 1px solid #6D4100;
}
a:hover tt, a:hover code {
background: #EEE;
}
@media screen and (max-width: 940px) {
body {
margin: 0;
padding: 20px 30px;
}
div.documentwrapper {
float: none;
background: #fff;
margin-left: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
}
div.sphinxsidebar {
display: block;
float: none;
width: unset;
margin: 50px -30px -20px -30px;
padding: 10px 20px;
background: #333;
color: #FFF;
}
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: #fff;
}
div.sphinxsidebar a {
color: #AAA;
}
div.sphinxsidebar p.logo {
display: none;
}
div.document {
width: 100%;
margin: 0;
}
div.footer {
display: none;
}
div.bodywrapper {
margin: 0;
}
div.body {
min-height: 0;
min-width: auto; /* fixes width on small screens, breaks .hll */
padding: 0;
}
.hll {
/* "fixes" the breakage */
width: max-content;
}
.rtd_doc_footer {
display: none;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.github {
display: none;
}
ul {
margin-left: 0;
}
li > ul {
/* Matches the 30px from the "ul, ol" selector above */
margin-left: 30px;
}
}
/* misc. */
.revsys-inline {
display: none!important;
}
/* Hide ugly table cell borders in ..bibliography:: directive output */
table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
border: none;
/* Below needed in some edge cases; if not applied, bottom shadows appear */
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
/* relbar */
.related {
line-height: 30px;
width: 100%;
font-size: 0.9rem;
}
.related.top {
border-bottom: 1px solid #EEE;
margin-bottom: 20px;
}
.related.bottom {
border-top: 1px solid #EEE;
}
.related ul {
padding: 0;
margin: 0;
list-style: none;
}
.related li {
display: inline;
}
nav#rellinks {
float: right;
}
nav#rellinks li+li:before {
content: "|";
}
nav#breadcrumbs li+li:before {
content: "\00BB";
}
/* Hide certain items when printing */
@media print {
div.related {
display: none;
}
}
img.github {
position: absolute;
top: 0;
border: 0;
right: 0;
}

View File

@@ -0,0 +1,476 @@
// @ts-check
/**@constructor*/
BaseStemmer = function() {
/** @protected */
this.current = '';
this.cursor = 0;
this.limit = 0;
this.limit_backward = 0;
this.bra = 0;
this.ket = 0;
/**
* @param {string} value
*/
this.setCurrent = function(value) {
this.current = value;
this.cursor = 0;
this.limit = this.current.length;
this.limit_backward = 0;
this.bra = this.cursor;
this.ket = this.limit;
};
/**
* @return {string}
*/
this.getCurrent = function() {
return this.current;
};
/**
* @param {BaseStemmer} other
*/
this.copy_from = function(other) {
/** @protected */
this.current = other.current;
this.cursor = other.cursor;
this.limit = other.limit;
this.limit_backward = other.limit_backward;
this.bra = other.bra;
this.ket = other.ket;
};
/**
* @param {number[]} s
* @param {number} min
* @param {number} max
* @return {boolean}
*/
this.in_grouping = function(s, min, max) {
/** @protected */
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor++;
return true;
};
/**
* @param {number[]} s
* @param {number} min
* @param {number} max
* @return {boolean}
*/
this.go_in_grouping = function(s, min, max) {
/** @protected */
while (this.cursor < this.limit) {
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min)
return true;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0)
return true;
this.cursor++;
}
return false;
};
/**
* @param {number[]} s
* @param {number} min
* @param {number} max
* @return {boolean}
*/
this.in_grouping_b = function(s, min, max) {
/** @protected */
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor--;
return true;
};
/**
* @param {number[]} s
* @param {number} min
* @param {number} max
* @return {boolean}
*/
this.go_in_grouping_b = function(s, min, max) {
/** @protected */
while (this.cursor > this.limit_backward) {
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) return true;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return true;
this.cursor--;
}
return false;
};
/**
* @param {number[]} s
* @param {number} min
* @param {number} max
* @return {boolean}
*/
this.out_grouping = function(s, min, max) {
/** @protected */
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) {
this.cursor++;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) {
this.cursor++;
return true;
}
return false;
};
/**
* @param {number[]} s
* @param {number} min
* @param {number} max
* @return {boolean}
*/
this.go_out_grouping = function(s, min, max) {
/** @protected */
while (this.cursor < this.limit) {
var ch = this.current.charCodeAt(this.cursor);
if (ch <= max && ch >= min) {
ch -= min;
if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) != 0) {
return true;
}
}
this.cursor++;
}
return false;
};
/**
* @param {number[]} s
* @param {number} min
* @param {number} max
* @return {boolean}
*/
this.out_grouping_b = function(s, min, max) {
/** @protected */
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) {
this.cursor--;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) {
this.cursor--;
return true;
}
return false;
};
/**
* @param {number[]} s
* @param {number} min
* @param {number} max
* @return {boolean}
*/
this.go_out_grouping_b = function(s, min, max) {
/** @protected */
while (this.cursor > this.limit_backward) {
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch <= max && ch >= min) {
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) != 0) {
return true;
}
}
this.cursor--;
}
return false;
};
/**
* @param {string} s
* @return {boolean}
*/
this.eq_s = function(s)
{
/** @protected */
if (this.limit - this.cursor < s.length) return false;
if (this.current.slice(this.cursor, this.cursor + s.length) != s)
{
return false;
}
this.cursor += s.length;
return true;
};
/**
* @param {string} s
* @return {boolean}
*/
this.eq_s_b = function(s)
{
/** @protected */
if (this.cursor - this.limit_backward < s.length) return false;
if (this.current.slice(this.cursor - s.length, this.cursor) != s)
{
return false;
}
this.cursor -= s.length;
return true;
};
/**
* @param {Among[]} v
* @return {number}
*/
this.find_among = function(v)
{
/** @protected */
var i = 0;
var j = v.length;
var c = this.cursor;
var l = this.limit;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >>> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j; // smaller
// w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
var w = v[k];
var i2;
for (i2 = common; i2 < w[0].length; i2++)
{
if (c + common == l)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break; // v->s has been inspected
if (j == i) break; // only one item in v
// - but now we need to go round once more to get
// v->s inspected. This looks messy, but is actually
// the optimal approach.
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c + w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c + w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
// find_among_b is for backwards processing. Same comments apply
/**
* @param {Among[]} v
* @return {number}
*/
this.find_among_b = function(v)
{
/** @protected */
var i = 0;
var j = v.length
var c = this.cursor;
var lb = this.limit_backward;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j;
var w = v[k];
var i2;
for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
{
if (c - common == lb)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break;
if (j == i) break;
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c - w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c - w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
/* to replace chars between c_bra and c_ket in this.current by the
* chars in s.
*/
/**
* @param {number} c_bra
* @param {number} c_ket
* @param {string} s
* @return {number}
*/
this.replace_s = function(c_bra, c_ket, s)
{
/** @protected */
var adjustment = s.length - (c_ket - c_bra);
this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
this.limit += adjustment;
if (this.cursor >= c_ket) this.cursor += adjustment;
else if (this.cursor > c_bra) this.cursor = c_bra;
return adjustment;
};
/**
* @return {boolean}
*/
this.slice_check = function()
{
/** @protected */
if (this.bra < 0 ||
this.bra > this.ket ||
this.ket > this.limit ||
this.limit > this.current.length)
{
return false;
}
return true;
};
/**
* @param {number} c_bra
* @return {boolean}
*/
this.slice_from = function(s)
{
/** @protected */
var result = false;
if (this.slice_check())
{
this.replace_s(this.bra, this.ket, s);
result = true;
}
return result;
};
/**
* @return {boolean}
*/
this.slice_del = function()
{
/** @protected */
return this.slice_from("");
};
/**
* @param {number} c_bra
* @param {number} c_ket
* @param {string} s
*/
this.insert = function(c_bra, c_ket, s)
{
/** @protected */
var adjustment = this.replace_s(c_bra, c_ket, s);
if (c_bra <= this.bra) this.bra += adjustment;
if (c_bra <= this.ket) this.ket += adjustment;
};
/**
* @return {string}
*/
this.slice_to = function()
{
/** @protected */
var result = '';
if (this.slice_check())
{
result = this.current.slice(this.bra, this.ket);
}
return result;
};
/**
* @return {string}
*/
this.assign_to = function()
{
/** @protected */
return this.current.slice(0, this.limit);
};
};

View File

@@ -0,0 +1,906 @@
/*
* Sphinx stylesheet -- basic theme.
*/
/* -- 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-top: 10px;
}
ul.search li {
padding: 5px 0;
}
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: inherit;
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;
}
/* -- 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;
}
}

View File

@@ -0,0 +1 @@
/* This file intentionally left blank. */

View File

@@ -0,0 +1,150 @@
/*
* Base JavaScript utilities for all Sphinx HTML documentation.
*/
"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);

View File

@@ -0,0 +1,13 @@
const DOCUMENTATION_OPTIONS = {
VERSION: '1.0',
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,
};

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 250 250" fill="#fff">
<path d="M0 0l115 115h15l12 27 108 108V0z" fill="#151513"/>
<path d="M128 109c-15-9-9-19-9-19 3-7 2-11 2-11-1-7 3-2 3-2 4 5 2 11 2 11-3 10 5 15 9 16"/>
<path d="M115 115s4 2 5 0l14-14c3-2 6-3 8-3-8-11-15-24 2-41 5-5 10-7 16-7 1-2 3-7 12-11 0 0 5 3 7 16 4 2 8 5 12 9s7 8 9 12c14 3 17 7 17 7-4 8-9 11-11 11 0 6-2 11-7 16-16 16-30 10-41 2 0 3-1 7-5 11l-12 11c-1 1 1 5 1 5z"/>
</svg>

After

Width:  |  Height:  |  Size: 490 B

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

View File

@@ -0,0 +1,84 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
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: #000 } /* Generic */
.highlight .k { color: #004461; font-weight: bold } /* Keyword */
.highlight .l { color: #000 } /* Literal */
.highlight .n { color: #000 } /* Name */
.highlight .o { color: #582800 } /* Operator */
.highlight .x { color: #000 } /* Other */
.highlight .p { color: #000; 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 } /* 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: #000; font-style: italic } /* Generic.Emph */
.highlight .ges { color: #000 } /* 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: #888 } /* Generic.Output */
.highlight .gp { color: #745334 } /* Generic.Prompt */
.highlight .gs { color: #000; 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: #004461; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
.highlight .ld { color: #000 } /* Literal.Date */
.highlight .m { color: #900 } /* Literal.Number */
.highlight .s { color: #4E9A06 } /* Literal.String */
.highlight .na { color: #C4A000 } /* Name.Attribute */
.highlight .nb { color: #004461 } /* Name.Builtin */
.highlight .nc { color: #000 } /* Name.Class */
.highlight .no { color: #000 } /* Name.Constant */
.highlight .nd { color: #888 } /* Name.Decorator */
.highlight .ni { color: #CE5C00 } /* Name.Entity */
.highlight .ne { color: #C00; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #000 } /* Name.Function */
.highlight .nl { color: #F57900 } /* Name.Label */
.highlight .nn { color: #000 } /* Name.Namespace */
.highlight .nx { color: #000 } /* Name.Other */
.highlight .py { color: #000 } /* Name.Property */
.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #000 } /* Name.Variable */
.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
.highlight .pm { color: #000; font-weight: bold } /* Punctuation.Marker */
.highlight .w { color: #F8F8F8 } /* Text.Whitespace */
.highlight .mb { color: #900 } /* Literal.Number.Bin */
.highlight .mf { color: #900 } /* Literal.Number.Float */
.highlight .mh { color: #900 } /* Literal.Number.Hex */
.highlight .mi { color: #900 } /* Literal.Number.Integer */
.highlight .mo { color: #900 } /* 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: #000 } /* Name.Function.Magic */
.highlight .vc { color: #000 } /* Name.Variable.Class */
.highlight .vg { color: #000 } /* Name.Variable.Global */
.highlight .vi { color: #000 } /* Name.Variable.Instance */
.highlight .vm { color: #000 } /* Name.Variable.Magic */
.highlight .il { color: #900 } /* Literal.Number.Integer.Long */

View File

@@ -0,0 +1,693 @@
/*
* Sphinx JavaScript utilities for the full-text search.
*/
"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, kind] = 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,
};
}
// Global search result kind enum, used by themes to style search results.
// prettier-ignore
class SearchResultKind {
static get index() { return "index"; }
static get object() { return "object"; }
static get text() { return "text"; }
static get title() { return "title"; }
}
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 _escapeHTML = (text) => {
return text
.replaceAll("&", "&amp;")
.replaceAll("<", "&lt;")
.replaceAll(">", "&gt;")
.replaceAll('"', "&quot;")
.replaceAll("'", "&apos;");
};
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, kind] = item;
let listItem = document.createElement("li");
// Add a class representing the item's type:
// can be used by a theme's CSS selector for styling
// See SearchResultKind for the class names.
listItem.classList.add(`kind-${kind}`);
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 = _escapeHTML(title);
if (descr) {
listItem.appendChild(document.createElement("span")).innerHTML =
` (${_escapeHTML(descr)})`;
// highlight search terms in the description
if (SPHINX_HIGHLIGHT_ENABLED)
// SPHINX_HIGHLIGHT_ENABLED is 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, anchor),
);
// highlight search terms in the summary
if (SPHINX_HIGHLIGHT_ENABLED)
// SPHINX_HIGHLIGHT_ENABLED is 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 = Documentation.ngettext(
"Search finished, found one page matching the search query.",
"Search finished, found ${resultCount} pages matching the search query.",
resultCount,
).replace("${resultCount}", resultCount);
};
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);
};
// Helper function used by query() to order search results.
// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
// Order the results by score (in opposite order of appearance, since the
// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
const _orderResultsByScoreThenName = (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;
};
/**
* 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, anchor) => {
const htmlElement = new DOMParser().parseFromString(
htmlString,
"text/html",
);
for (const removalQuery of [".headerlink", "script", "style"]) {
htmlElement.querySelectorAll(removalQuery).forEach((el) => {
el.remove();
});
}
if (anchor) {
const anchorContent = htmlElement.querySelector(
`[role="main"] ${anchor}`,
);
if (anchorContent) return anchorContent.textContent;
console.warn(
`Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`,
);
}
// if anchor not specified or not found, fall back to main content
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. 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.setAttribute("role", "list");
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);
},
_parseQuery: (query) => {
// 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 set is from language_data.js
if (stopwords.has(queryTermLower) || 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) {
// SPHINX_HIGHLIGHT_ENABLED is 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]);
return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
},
/**
* execute search (requires search index to be loaded)
*/
_performSearch: (
query,
searchTerms,
excludedTerms,
highlightTerms,
objectTerms,
) => {
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;
// Collect multiple result groups to be sorted separately and then ordered.
// Each is an array of [docname, title, anchor, descr, score, filename, kind].
const normalResults = [];
const nonMainIndexResults = [];
_removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase().trim();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (
title.toLowerCase().trim().includes(queryLower)
&& queryLower.length >= title.length / 2
) {
for (const [file, id] of foundTitles) {
const score = Math.round(
(Scorer.title * queryLower.length) / title.length,
);
const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
normalResults.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score + boost,
filenames[file],
SearchResultKind.title,
]);
}
}
}
// 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, isMain] of foundEntries) {
const score = Math.round((100 * queryLower.length) / entry.length);
const result = [
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
SearchResultKind.index,
];
if (isMain) {
normalResults.push(result);
} else {
nonMainIndexResults.push(result);
}
}
}
}
// lookup as object
objectTerms.forEach((term) =>
normalResults.push(...Search.performObjectSearch(term, objectTerms)),
);
// lookup as search terms in fulltext
normalResults.push(
...Search.performTermsSearch(searchTerms, excludedTerms),
);
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
normalResults.forEach((item) => (item[4] = Scorer.score(item)));
nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
}
// Sort each group of results by score and then alphabetically by name.
normalResults.sort(_orderResultsByScoreThenName);
nonMainIndexResults.sort(_orderResultsByScoreThenName);
// Combine the result groups in (reverse) order.
// Non-main index entries are typically arbitrary cross-references,
// so display them after other results.
let results = [...nonMainIndexResults, ...normalResults];
// 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;
}, []);
return results.reverse();
},
query: (query) => {
const [
searchQuery,
searchTerms,
excludedTerms,
highlightTerms,
objectTerms,
] = Search._parseQuery(query);
const results = Search._performSearch(
searchQuery,
searchTerms,
excludedTerms,
highlightTerms,
objectTerms,
);
// 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]],
SearchResultKind.object,
]);
};
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 = [];
// find documents, if any, containing the query word in their text/title term indices
// use Object.hasOwnProperty to avoid mismatching against prototype properties
const arr = [
{
files: terms.hasOwnProperty(word) ? terms[word] : undefined,
score: Scorer.term,
},
{
files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined,
score: Scorer.title,
},
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
if (!terms.hasOwnProperty(word)) {
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord))
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
}
if (!titleTerms.hasOwnProperty(word)) {
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord))
arr.push({ files: titleTerms[term], 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, new Map());
const fileScores = scoreMap.get(file);
fileScores.set(word, record.score);
});
});
// create the mapping
files.forEach((file) => {
if (!fileMap.has(file)) fileMap.set(file, [word]);
else if (fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(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).get(w)));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
SearchResultKind.text,
]);
}
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, anchor) => {
const text = Search.htmlToText(htmlText, anchor);
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);

View File

@@ -0,0 +1,159 @@
/* 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");
// Update history only if '?highlight' is present; otherwise it
// clears text fragments (not set in window.location by the browser)
if (url.searchParams.has("highlight")) {
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(
'<p class="highlight-link">'
+ '<a href="javascript:SphinxHighlight.hideSearchWords()">'
+ _("Hide Search Matches")
+ "</a></p>",
),
);
},
/**
* 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();
});

View File

@@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>auth_config_loader module &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-auth_config_loader">
<span id="auth-config-loader-module"></span><h1>auth_config_loader module<a class="headerlink" href="#module-auth_config_loader" title="Link to this heading"></a></h1>
<dl class="py function">
<dt class="sig sig-object py" id="auth_config_loader.load_auth_config">
<span class="sig-prename descclassname"><span class="pre">auth_config_loader.</span></span><span class="sig-name descname"><span class="pre">load_auth_config</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">config_path</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Authenticate</span></span></span><a class="headerlink" href="#auth_config_loader.load_auth_config" title="Link to this definition"></a></dt>
<dd></dd></dl>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">streamlit_dashboard</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/auth_config_loader.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,480 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Index &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a>
| <a href="#B"><strong>B</strong></a>
| <a href="#C"><strong>C</strong></a>
| <a href="#D"><strong>D</strong></a>
| <a href="#E"><strong>E</strong></a>
| <a href="#F"><strong>F</strong></a>
| <a href="#G"><strong>G</strong></a>
| <a href="#I"><strong>I</strong></a>
| <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a>
| <a href="#N"><strong>N</strong></a>
| <a href="#P"><strong>P</strong></a>
| <a href="#R"><strong>R</strong></a>
| <a href="#S"><strong>S</strong></a>
| <a href="#W"><strong>W</strong></a>
</div>
<h2 id="A">A</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage">AdminPanelPage (class in streamlit_dashboard.page_classes.admin_panel_page_class)</a>
</li>
</ul></td>
</tr></table>
<h2 id="B">B</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage">BaseReportPage (class in streamlit_dashboard.utility_classes.base_report_page)</a>
</li>
</ul></td>
</tr></table>
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn">ComparerColumn (class in streamlit_dashboard.page_classes.report_comparer_page_class)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage">ComparerPage (class in streamlit_dashboard.page_classes.report_comparer_page_class)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair.current_fy">current_fy (streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair attribute)</a>
</li>
</ul></td>
</tr></table>
<h2 id="D">D</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig">DashboardConfig (class in streamlit_dashboard.utility_classes.dashboard_config_parser)</a>
</li>
</ul></td>
</tr></table>
<h2 id="E">E</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair">ExportModulePair (class in streamlit_dashboard.utility_classes.dashboard_config_parser)</a>
</li>
</ul></td>
</tr></table>
<h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY.figure">figure (streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY">FigureWithMaxY (class in streamlit_dashboard.utility_classes.figure_with_max_y)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.figure_with_max_y.find_fig_max_y_and_generate_wrapper">find_fig_max_y_and_generate_wrapper() (in module streamlit_dashboard.utility_classes.figure_with_max_y)</a>
</li>
</ul></td>
</tr></table>
<h2 id="G">G</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.generate_figures">generate_figures() (streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage method)</a>
<ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.generate_figures">(streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.generate_figures">(streamlit_dashboard.utility_classes.base_report_page.BaseReportPage method)</a>
</li>
</ul></li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_clients_list_urls">get_clients_list_urls() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_funding_milestones_urls">get_funding_milestones_urls() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_log_level">get_log_level() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_log_path">get_log_path() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_nbs_milestones_urls">get_nbs_milestones_urls() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.get_page_name">get_page_name() (streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage static method)</a>
<ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.get_page_name">(streamlit_dashboard.utility_classes.base_report_page.BaseReportPage static method)</a>
</li>
</ul></li>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.get_syncable_figure_keys">get_syncable_figure_keys() (streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage method)</a>
<ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.get_syncable_figure_keys">(streamlit_dashboard.utility_classes.base_report_page.BaseReportPage method)</a>
</li>
</ul></li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_trainings_urls">get_trainings_urls() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.components.html#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber.get_widget_key">get_widget_key() (streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber method)</a>
<ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.Renderable.get_widget_key">(streamlit_dashboard.utility_classes.base_report_page.Renderable method)</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="I">I</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.is_valid_neoserra_url">is_valid_neoserra_url() (streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="L">L</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.load">load() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.html#streamlit_dashboard.auth_config_loader.load_auth_config">load_auth_config() (in module streamlit_dashboard.auth_config_loader)</a>
</li>
</ul></td>
</tr></table>
<h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY.max_y">max_y (streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY attribute)</a>
</li>
<li>
module
<ul>
<li><a href="streamlit_dashboard.html#module-streamlit_dashboard">streamlit_dashboard</a>
</li>
<li><a href="streamlit_dashboard.html#module-streamlit_dashboard.auth_config_loader">streamlit_dashboard.auth_config_loader</a>
</li>
<li><a href="streamlit_dashboard.cached_function_wrappers.html#module-streamlit_dashboard.cached_function_wrappers">streamlit_dashboard.cached_function_wrappers</a>
</li>
<li><a href="streamlit_dashboard.components.html#module-streamlit_dashboard.components">streamlit_dashboard.components</a>
</li>
<li><a href="streamlit_dashboard.components.html#module-streamlit_dashboard.components.neoserra_export_link_grabber">streamlit_dashboard.components.neoserra_export_link_grabber</a>
</li>
<li><a href="streamlit_dashboard.html#module-streamlit_dashboard.main">streamlit_dashboard.main</a>
</li>
<li><a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes">streamlit_dashboard.page_classes</a>
</li>
<li><a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.admin_panel_page_class">streamlit_dashboard.page_classes.admin_panel_page_class</a>
</li>
<li><a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.report_comparer_page_class">streamlit_dashboard.page_classes.report_comparer_page_class</a>
</li>
<li><a href="streamlit_dashboard.html#module-streamlit_dashboard.streamlit_constants">streamlit_dashboard.streamlit_constants</a>
</li>
<li><a href="streamlit_dashboard.streamlit_pages.html#module-streamlit_dashboard.streamlit_pages">streamlit_dashboard.streamlit_pages</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes">streamlit_dashboard.utility_classes</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.base_report_page">streamlit_dashboard.utility_classes.base_report_page</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.dashboard_config_parser">streamlit_dashboard.utility_classes.dashboard_config_parser</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.figure_with_max_y">streamlit_dashboard.utility_classes.figure_with_max_y</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="N">N</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.components.html#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber">NeoserraExportLinkGrabber (class in streamlit_dashboard.components.neoserra_export_link_grabber)</a>
</li>
</ul></td>
</tr></table>
<h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair.prev_fy">prev_fy (streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair attribute)</a>
</li>
</ul></td>
</tr></table>
<h2 id="R">R</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.components.html#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber.render">render() (streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber method)</a>
<ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage.render">(streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render">(streamlit_dashboard.utility_classes.base_report_page.BaseReportPage method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.Renderable.render">(streamlit_dashboard.utility_classes.base_report_page.Renderable method)</a>
</li>
</ul></li>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.render_controls">render_controls() (streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage method)</a>
<ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.render_controls">(streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render_controls">(streamlit_dashboard.utility_classes.base_report_page.BaseReportPage method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.render_figures">render_figures() (streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage method)</a>
<ul>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.render_figures">(streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render_figures">(streamlit_dashboard.utility_classes.base_report_page.BaseReportPage method)</a>
</li>
</ul></li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.Renderable">Renderable (class in streamlit_dashboard.utility_classes.base_report_page)</a>
</li>
</ul></td>
</tr></table>
<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.save">save() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.save_settings">save_settings() (streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_clients_list_current_fy_url">set_clients_list_current_fy_url() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_clients_list_prev_fy_url">set_clients_list_prev_fy_url() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_funding_milestones_current_fy_url">set_funding_milestones_current_fy_url() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_funding_milestones_prev_fy_url">set_funding_milestones_prev_fy_url() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_nbs_milestones_current_fy_url">set_nbs_milestones_current_fy_url() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_nbs_milestones_prev_fy_url">set_nbs_milestones_prev_fy_url() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_trainings_current_fy_url">set_trainings_current_fy_url() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_trainings_prev_fy_url">set_trainings_prev_fy_url() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig method)</a>
</li>
<li>
streamlit_dashboard
<ul>
<li><a href="streamlit_dashboard.html#module-streamlit_dashboard">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.auth_config_loader
<ul>
<li><a href="streamlit_dashboard.html#module-streamlit_dashboard.auth_config_loader">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.cached_function_wrappers
<ul>
<li><a href="streamlit_dashboard.cached_function_wrappers.html#module-streamlit_dashboard.cached_function_wrappers">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.components
<ul>
<li><a href="streamlit_dashboard.components.html#module-streamlit_dashboard.components">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.components.neoserra_export_link_grabber
<ul>
<li><a href="streamlit_dashboard.components.html#module-streamlit_dashboard.components.neoserra_export_link_grabber">module</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li>
streamlit_dashboard.main
<ul>
<li><a href="streamlit_dashboard.html#module-streamlit_dashboard.main">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.page_classes
<ul>
<li><a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.page_classes.admin_panel_page_class
<ul>
<li><a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.admin_panel_page_class">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.page_classes.report_comparer_page_class
<ul>
<li><a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.report_comparer_page_class">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.streamlit_constants
<ul>
<li><a href="streamlit_dashboard.html#module-streamlit_dashboard.streamlit_constants">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.streamlit_pages
<ul>
<li><a href="streamlit_dashboard.streamlit_pages.html#module-streamlit_dashboard.streamlit_pages">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.utility_classes
<ul>
<li><a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.utility_classes.base_report_page
<ul>
<li><a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.base_report_page">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.utility_classes.dashboard_config_parser
<ul>
<li><a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.dashboard_config_parser">module</a>
</li>
</ul></li>
<li>
streamlit_dashboard.utility_classes.figure_with_max_y
<ul>
<li><a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.figure_with_max_y">module</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="W">W</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.write_template">write_template() (streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig static method)</a>
</li>
</ul></td>
</tr></table>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">streamlit_dashboard</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Streamlit Dashboard documentation &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="streamlit_dashboard" href="modules.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="streamlit-dashboard-documentation">
<h1>Streamlit Dashboard documentation<a class="headerlink" href="#streamlit-dashboard-documentation" title="Link to this heading"></a></h1>
<p>Add your content using <code class="docutils literal notranslate"><span class="pre">reStructuredText</span></code> syntax. See the
<a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html">reStructuredText</a>
documentation for details.</p>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">streamlit_dashboard</a><ul>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.html">streamlit_dashboard namespace</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="#">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">streamlit_dashboard</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="#">Documentation overview</a><ul>
<li>Next: <a href="modules.html" title="next chapter">streamlit_dashboard</a></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/index.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>main module &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="main-module">
<h1>main module<a class="headerlink" href="#main-module" title="Link to this heading"></a></h1>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">streamlit_dashboard</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/main.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,183 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>streamlit_dashboard &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="streamlit_dashboard namespace" href="streamlit_dashboard.html" />
<link rel="prev" title="Streamlit Dashboard documentation" href="index.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="streamlit-dashboard">
<h1>streamlit_dashboard<a class="headerlink" href="#streamlit-dashboard" title="Link to this heading"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="streamlit_dashboard.html">streamlit_dashboard namespace</a><ul>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.html#subpackages">Subpackages</a><ul>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html">streamlit_dashboard.cached_function_wrappers namespace</a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#submodules">Submodules</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-client-list-cached-functions-module">streamlit_dashboard.cached_function_wrappers.client_list_cached_functions module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-funding-milestones-cached-functions-module">streamlit_dashboard.cached_function_wrappers.funding_milestones_cached_functions module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-nbs-cached-functions-module">streamlit_dashboard.cached_function_wrappers.nbs_cached_functions module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-shared-module">streamlit_dashboard.cached_function_wrappers.shared module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-trainings-cached-functions-module">streamlit_dashboard.cached_function_wrappers.trainings_cached_functions module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.components.html">streamlit_dashboard.components namespace</a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.components.html#submodules">Submodules</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.components.html#module-streamlit_dashboard.components.neoserra_export_link_grabber">streamlit_dashboard.components.neoserra_export_link_grabber module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.page_classes.html">streamlit_dashboard.page_classes namespace</a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#submodules">Submodules</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.admin_panel_page_class">streamlit_dashboard.page_classes.admin_panel_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-authentication-page-wrapper-module">streamlit_dashboard.page_classes.authentication_page_wrapper module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-center-milestones-page-class-module">streamlit_dashboard.page_classes.center_milestones_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-funding-milestones-page-class-module">streamlit_dashboard.page_classes.funding_milestones_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-naics-report-page-class-module">streamlit_dashboard.page_classes.naics_report_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-nbs-milestones-page-class-module">streamlit_dashboard.page_classes.nbs_milestones_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-page-class-constants-module">streamlit_dashboard.page_classes.page_class_constants module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.report_comparer_page_class">streamlit_dashboard.page_classes.report_comparer_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-attendee-counts-class-module">streamlit_dashboard.page_classes.training_attendee_counts_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-attendee-ranges-page-class-module">streamlit_dashboard.page_classes.training_attendee_ranges_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-count-statistics-page-class-module">streamlit_dashboard.page_classes.training_count_statistics_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-event-count-attendee-comparison-page-class-module">streamlit_dashboard.page_classes.training_event_count_attendee_comparison_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-event-count-page-class-module">streamlit_dashboard.page_classes.training_event_count_page_class module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-primary-topics-page-class-module">streamlit_dashboard.page_classes.training_primary_topics_page_class module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html">streamlit_dashboard.streamlit_pages namespace</a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#submodules">Submodules</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-admin-streamlit-page-module">streamlit_dashboard.streamlit_pages.admin_streamlit_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-center-streamlit-page-module">streamlit_dashboard.streamlit_pages.center_streamlit_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-comparer-streamlit-page-module">streamlit_dashboard.streamlit_pages.comparer_streamlit_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-funding-streamlit-page-module">streamlit_dashboard.streamlit_pages.funding_streamlit_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-naics-streamlit-page-module">streamlit_dashboard.streamlit_pages.naics_streamlit_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-nbs-streamlit-page-module">streamlit_dashboard.streamlit_pages.nbs_streamlit_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-training-attendee-ranges-page-module">streamlit_dashboard.streamlit_pages.training_attendee_ranges_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-attendees-count-page-module">streamlit_dashboard.streamlit_pages.trainings_attendees_count_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-count-statistics-page-module">streamlit_dashboard.streamlit_pages.trainings_count_statistics_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-event-attendee-comparison-page-module">streamlit_dashboard.streamlit_pages.trainings_event_attendee_comparison_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-event-count-page-module">streamlit_dashboard.streamlit_pages.trainings_event_count_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-primary-topic-page-module">streamlit_dashboard.streamlit_pages.trainings_primary_topic_page module</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.utility_classes.html">streamlit_dashboard.utility_classes namespace</a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#submodules">Submodules</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.base_report_page">streamlit_dashboard.utility_classes.base_report_page module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.dashboard_config_parser">streamlit_dashboard.utility_classes.dashboard_config_parser module</a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.figure_with_max_y">streamlit_dashboard.utility_classes.figure_with_max_y module</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.html#module-streamlit_dashboard.auth_config_loader">streamlit_dashboard.auth_config_loader module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.html#streamlit_dashboard.auth_config_loader.load_auth_config"><code class="docutils literal notranslate"><span class="pre">load_auth_config()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.html#module-streamlit_dashboard.main">streamlit_dashboard.main module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.html#module-streamlit_dashboard.streamlit_constants">streamlit_dashboard.streamlit_constants module</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">streamlit_dashboard</a><ul>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.html">streamlit_dashboard namespace</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="index.html" title="previous chapter">Streamlit Dashboard documentation</a></li>
<li>Next: <a href="streamlit_dashboard.html" title="next chapter">streamlit_dashboard namespace</a></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/modules.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

Binary file not shown.

View File

@@ -0,0 +1,188 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Python Module Index &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Python Module Index</h1>
<div class="modindex-jumpbox">
<a href="#cap-s"><strong>s</strong></a>
</div>
<table class="indextable modindextable">
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-s"><td></td><td>
<strong>s</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
<td>
<a href="streamlit_dashboard.html#module-streamlit_dashboard"><code class="xref">streamlit_dashboard</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.html#module-streamlit_dashboard.auth_config_loader"><code class="xref">streamlit_dashboard.auth_config_loader</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.cached_function_wrappers.html#module-streamlit_dashboard.cached_function_wrappers"><code class="xref">streamlit_dashboard.cached_function_wrappers</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.components.html#module-streamlit_dashboard.components"><code class="xref">streamlit_dashboard.components</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.components.html#module-streamlit_dashboard.components.neoserra_export_link_grabber"><code class="xref">streamlit_dashboard.components.neoserra_export_link_grabber</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.html#module-streamlit_dashboard.main"><code class="xref">streamlit_dashboard.main</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes"><code class="xref">streamlit_dashboard.page_classes</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.admin_panel_page_class"><code class="xref">streamlit_dashboard.page_classes.admin_panel_page_class</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.report_comparer_page_class"><code class="xref">streamlit_dashboard.page_classes.report_comparer_page_class</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.html#module-streamlit_dashboard.streamlit_constants"><code class="xref">streamlit_dashboard.streamlit_constants</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.streamlit_pages.html#module-streamlit_dashboard.streamlit_pages"><code class="xref">streamlit_dashboard.streamlit_pages</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes"><code class="xref">streamlit_dashboard.utility_classes</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.base_report_page"><code class="xref">streamlit_dashboard.utility_classes.base_report_page</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.dashboard_config_parser"><code class="xref">streamlit_dashboard.utility_classes.dashboard_config_parser</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.figure_with_max_y"><code class="xref">streamlit_dashboard.utility_classes.figure_with_max_y</code></a></td><td>
<em></em></td></tr>
</table>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">streamlit_dashboard</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,121 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Search &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
<script src="searchindex.js" defer="defer"></script>
<meta name="robots" content="noindex" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1 id="search-documentation">Search</h1>
<noscript>
<div class="admonition warning">
<p>
Please activate JavaScript to enable the search
functionality.
</p>
</div>
</noscript>
<p>
Searching for multiple words only shows matches that contain
all words.
</p>
<form action="" method="get">
<input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="search" />
<span id="search-progress" style="padding-left: 10px"></span>
</form>
<div id="search-results"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">streamlit_dashboard</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>streamlit_constants module &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-streamlit_constants">
<span id="streamlit-constants-module"></span><h1>streamlit_constants module<a class="headerlink" href="#module-streamlit_constants" title="Link to this heading"></a></h1>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="modules.html">streamlit_dashboard</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/streamlit_constants.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>streamlit_dashboard.cached_function_wrappers namespace &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="streamlit_dashboard.components namespace" href="streamlit_dashboard.components.html" />
<link rel="prev" title="streamlit_dashboard namespace" href="streamlit_dashboard.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-streamlit_dashboard.cached_function_wrappers">
<span id="streamlit-dashboard-cached-function-wrappers-namespace"></span><h1>streamlit_dashboard.cached_function_wrappers namespace<a class="headerlink" href="#module-streamlit_dashboard.cached_function_wrappers" title="Link to this heading"></a></h1>
<section id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-cached-function-wrappers-client-list-cached-functions-module">
<h2>streamlit_dashboard.cached_function_wrappers.client_list_cached_functions module<a class="headerlink" href="#streamlit-dashboard-cached-function-wrappers-client-list-cached-functions-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-cached-function-wrappers-funding-milestones-cached-functions-module">
<h2>streamlit_dashboard.cached_function_wrappers.funding_milestones_cached_functions module<a class="headerlink" href="#streamlit-dashboard-cached-function-wrappers-funding-milestones-cached-functions-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-cached-function-wrappers-nbs-cached-functions-module">
<h2>streamlit_dashboard.cached_function_wrappers.nbs_cached_functions module<a class="headerlink" href="#streamlit-dashboard-cached-function-wrappers-nbs-cached-functions-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-cached-function-wrappers-shared-module">
<h2>streamlit_dashboard.cached_function_wrappers.shared module<a class="headerlink" href="#streamlit-dashboard-cached-function-wrappers-shared-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-cached-function-wrappers-trainings-cached-functions-module">
<h2>streamlit_dashboard.cached_function_wrappers.trainings_cached_functions module<a class="headerlink" href="#streamlit-dashboard-cached-function-wrappers-trainings-cached-functions-module" title="Link to this heading"></a></h2>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">streamlit_dashboard</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="streamlit_dashboard.html">streamlit_dashboard namespace</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">streamlit_dashboard</a><ul>
<li><a href="streamlit_dashboard.html">streamlit_dashboard namespace</a><ul>
<li>Previous: <a href="streamlit_dashboard.html" title="previous chapter">streamlit_dashboard namespace</a></li>
<li>Next: <a href="streamlit_dashboard.components.html" title="next chapter">streamlit_dashboard.components namespace</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/streamlit_dashboard.cached_function_wrappers.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,176 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>streamlit_dashboard.components namespace &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="streamlit_dashboard.page_classes namespace" href="streamlit_dashboard.page_classes.html" />
<link rel="prev" title="streamlit_dashboard.cached_function_wrappers namespace" href="streamlit_dashboard.cached_function_wrappers.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-streamlit_dashboard.components">
<span id="streamlit-dashboard-components-namespace"></span><h1>streamlit_dashboard.components namespace<a class="headerlink" href="#module-streamlit_dashboard.components" title="Link to this heading"></a></h1>
<section id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
</section>
<section id="module-streamlit_dashboard.components.neoserra_export_link_grabber">
<span id="streamlit-dashboard-components-neoserra-export-link-grabber-module"></span><h2>streamlit_dashboard.components.neoserra_export_link_grabber module<a class="headerlink" href="#module-streamlit_dashboard.components.neoserra_export_link_grabber" title="Link to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.components.neoserra_export_link_grabber.</span></span><span class="sig-name descname"><span class="pre">NeoserraExportLinkGrabber</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">grabber_title</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prev_fy_initial_value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">current_fy_initial_value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Renderable</span></code></p>
<p>Reusable UI component for capturing paired API endpoint URLs.</p>
<p>This class encapsulates the state and presentation logic for modifying external data
endpoints. By grouping the current and previous fiscal period URLs into a single
renderable object, it standardizes the visual layout across the Admin Panel and
isolates the input-capture logic from the parent pages batch validation pipeline.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>grabber_title</strong> (<em>str</em>) The unique display name for this URL grouping (e.g., Client List).</p></li>
<li><p><strong>prev_fy_initial_value</strong> (<em>str</em>) The existing configuration URL for the previous fiscal period.</p></li>
<li><p><strong>current_fy_initial_value</strong> (<em>str</em>) The existing configuration URL for the current fiscal period.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber.get_widget_key">
<span class="sig-name descname"><span class="pre">get_widget_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">widget_unique_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber.get_widget_key" title="Link to this definition"></a></dt>
<dd><p>Generates globally unique identifiers for the components internal Streamlit widgets.</p>
<p>Because the Admin Panel renders multiple instances of this exact class on the same page,
this method prevents Streamlit <cite>DuplicateWidgetID</cite> execution crashes by prefixing the
local widget ID (e.g., prev_fy_url_text_input) with the instances unique title.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>widget_unique_id</strong> (<em>str</em>) The local identifier for the specific text input widget.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A concatenated, globally unique string key.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>str</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber.render">
<span class="sig-name descname"><span class="pre">render</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber.render" title="Link to this definition"></a></dt>
<dd><p>Maps the URL capture inputs to the provided Streamlit layout container.</p>
<p>Constructs a visually distinct, bordered container to group the paired fiscal period
endpoints together. It binds the text input widgets to the components internal state,
allowing the parent orchestrator to extract the modified strings during the form
submission phase.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit layout container (typically a form) to draw the widgets onto.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">streamlit_dashboard</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="streamlit_dashboard.html">streamlit_dashboard namespace</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">streamlit_dashboard</a><ul>
<li><a href="streamlit_dashboard.html">streamlit_dashboard namespace</a><ul>
<li>Previous: <a href="streamlit_dashboard.cached_function_wrappers.html" title="previous chapter">streamlit_dashboard.cached_function_wrappers namespace</a></li>
<li>Next: <a href="streamlit_dashboard.page_classes.html" title="next chapter">streamlit_dashboard.page_classes namespace</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/streamlit_dashboard.components.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,291 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>streamlit_dashboard namespace &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="streamlit_dashboard.cached_function_wrappers namespace" href="streamlit_dashboard.cached_function_wrappers.html" />
<link rel="prev" title="streamlit_dashboard" href="modules.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-streamlit_dashboard">
<span id="streamlit-dashboard-namespace"></span><h1>streamlit_dashboard namespace<a class="headerlink" href="#module-streamlit_dashboard" title="Link to this heading"></a></h1>
<section id="subpackages">
<h2>Subpackages<a class="headerlink" href="#subpackages" title="Link to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html">streamlit_dashboard.cached_function_wrappers namespace</a><ul>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-client-list-cached-functions-module">streamlit_dashboard.cached_function_wrappers.client_list_cached_functions module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-funding-milestones-cached-functions-module">streamlit_dashboard.cached_function_wrappers.funding_milestones_cached_functions module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-nbs-cached-functions-module">streamlit_dashboard.cached_function_wrappers.nbs_cached_functions module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-shared-module">streamlit_dashboard.cached_function_wrappers.shared module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.cached_function_wrappers.html#streamlit-dashboard-cached-function-wrappers-trainings-cached-functions-module">streamlit_dashboard.cached_function_wrappers.trainings_cached_functions module</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="streamlit_dashboard.components.html">streamlit_dashboard.components namespace</a><ul>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.components.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.components.html#module-streamlit_dashboard.components.neoserra_export_link_grabber">streamlit_dashboard.components.neoserra_export_link_grabber module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.components.html#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber"><code class="docutils literal notranslate"><span class="pre">NeoserraExportLinkGrabber</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.components.html#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber.get_widget_key"><code class="docutils literal notranslate"><span class="pre">NeoserraExportLinkGrabber.get_widget_key()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.components.html#streamlit_dashboard.components.neoserra_export_link_grabber.NeoserraExportLinkGrabber.render"><code class="docutils literal notranslate"><span class="pre">NeoserraExportLinkGrabber.render()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="streamlit_dashboard.page_classes.html">streamlit_dashboard.page_classes namespace</a><ul>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.admin_panel_page_class">streamlit_dashboard.page_classes.admin_panel_page_class module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage"><code class="docutils literal notranslate"><span class="pre">AdminPanelPage</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.generate_figures"><code class="docutils literal notranslate"><span class="pre">AdminPanelPage.generate_figures()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.get_page_name"><code class="docutils literal notranslate"><span class="pre">AdminPanelPage.get_page_name()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.get_syncable_figure_keys"><code class="docutils literal notranslate"><span class="pre">AdminPanelPage.get_syncable_figure_keys()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.is_valid_neoserra_url"><code class="docutils literal notranslate"><span class="pre">AdminPanelPage.is_valid_neoserra_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.render_controls"><code class="docutils literal notranslate"><span class="pre">AdminPanelPage.render_controls()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.render_figures"><code class="docutils literal notranslate"><span class="pre">AdminPanelPage.render_figures()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.save_settings"><code class="docutils literal notranslate"><span class="pre">AdminPanelPage.save_settings()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-authentication-page-wrapper-module">streamlit_dashboard.page_classes.authentication_page_wrapper module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-center-milestones-page-class-module">streamlit_dashboard.page_classes.center_milestones_page_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-funding-milestones-page-class-module">streamlit_dashboard.page_classes.funding_milestones_page_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-naics-report-page-class-module">streamlit_dashboard.page_classes.naics_report_page_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-nbs-milestones-page-class-module">streamlit_dashboard.page_classes.nbs_milestones_page_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-page-class-constants-module">streamlit_dashboard.page_classes.page_class_constants module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#module-streamlit_dashboard.page_classes.report_comparer_page_class">streamlit_dashboard.page_classes.report_comparer_page_class module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn"><code class="docutils literal notranslate"><span class="pre">ComparerColumn</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.generate_figures"><code class="docutils literal notranslate"><span class="pre">ComparerColumn.generate_figures()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.render_controls"><code class="docutils literal notranslate"><span class="pre">ComparerColumn.render_controls()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.render_figures"><code class="docutils literal notranslate"><span class="pre">ComparerColumn.render_figures()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage"><code class="docutils literal notranslate"><span class="pre">ComparerPage</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage.render"><code class="docutils literal notranslate"><span class="pre">ComparerPage.render()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-attendee-counts-class-module">streamlit_dashboard.page_classes.training_attendee_counts_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-attendee-ranges-page-class-module">streamlit_dashboard.page_classes.training_attendee_ranges_page_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-count-statistics-page-class-module">streamlit_dashboard.page_classes.training_count_statistics_page_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-event-count-attendee-comparison-page-class-module">streamlit_dashboard.page_classes.training_event_count_attendee_comparison_page_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-event-count-page-class-module">streamlit_dashboard.page_classes.training_event_count_page_class module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.page_classes.html#streamlit-dashboard-page-classes-training-primary-topics-page-class-module">streamlit_dashboard.page_classes.training_primary_topics_page_class module</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html">streamlit_dashboard.streamlit_pages namespace</a><ul>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-admin-streamlit-page-module">streamlit_dashboard.streamlit_pages.admin_streamlit_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-center-streamlit-page-module">streamlit_dashboard.streamlit_pages.center_streamlit_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-comparer-streamlit-page-module">streamlit_dashboard.streamlit_pages.comparer_streamlit_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-funding-streamlit-page-module">streamlit_dashboard.streamlit_pages.funding_streamlit_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-naics-streamlit-page-module">streamlit_dashboard.streamlit_pages.naics_streamlit_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-nbs-streamlit-page-module">streamlit_dashboard.streamlit_pages.nbs_streamlit_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-training-attendee-ranges-page-module">streamlit_dashboard.streamlit_pages.training_attendee_ranges_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-attendees-count-page-module">streamlit_dashboard.streamlit_pages.trainings_attendees_count_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-count-statistics-page-module">streamlit_dashboard.streamlit_pages.trainings_count_statistics_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-event-attendee-comparison-page-module">streamlit_dashboard.streamlit_pages.trainings_event_attendee_comparison_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-event-count-page-module">streamlit_dashboard.streamlit_pages.trainings_event_count_page module</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.streamlit_pages.html#streamlit-dashboard-streamlit-pages-trainings-primary-topic-page-module">streamlit_dashboard.streamlit_pages.trainings_primary_topic_page module</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="streamlit_dashboard.utility_classes.html">streamlit_dashboard.utility_classes namespace</a><ul>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#submodules">Submodules</a></li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.base_report_page">streamlit_dashboard.utility_classes.base_report_page module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage"><code class="docutils literal notranslate"><span class="pre">BaseReportPage</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.generate_figures"><code class="docutils literal notranslate"><span class="pre">BaseReportPage.generate_figures()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.get_page_name"><code class="docutils literal notranslate"><span class="pre">BaseReportPage.get_page_name()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.get_syncable_figure_keys"><code class="docutils literal notranslate"><span class="pre">BaseReportPage.get_syncable_figure_keys()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render"><code class="docutils literal notranslate"><span class="pre">BaseReportPage.render()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render_controls"><code class="docutils literal notranslate"><span class="pre">BaseReportPage.render_controls()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render_figures"><code class="docutils literal notranslate"><span class="pre">BaseReportPage.render_figures()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.Renderable"><code class="docutils literal notranslate"><span class="pre">Renderable</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.Renderable.get_widget_key"><code class="docutils literal notranslate"><span class="pre">Renderable.get_widget_key()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.base_report_page.Renderable.render"><code class="docutils literal notranslate"><span class="pre">Renderable.render()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.dashboard_config_parser">streamlit_dashboard.utility_classes.dashboard_config_parser module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig"><code class="docutils literal notranslate"><span class="pre">DashboardConfig</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_clients_list_urls"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.get_clients_list_urls()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_funding_milestones_urls"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.get_funding_milestones_urls()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_log_level"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.get_log_level()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_log_path"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.get_log_path()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_nbs_milestones_urls"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.get_nbs_milestones_urls()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_trainings_urls"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.get_trainings_urls()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.load"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.load()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.save"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.save()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_clients_list_current_fy_url"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.set_clients_list_current_fy_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_clients_list_prev_fy_url"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.set_clients_list_prev_fy_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_funding_milestones_current_fy_url"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.set_funding_milestones_current_fy_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_funding_milestones_prev_fy_url"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.set_funding_milestones_prev_fy_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_nbs_milestones_current_fy_url"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.set_nbs_milestones_current_fy_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_nbs_milestones_prev_fy_url"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.set_nbs_milestones_prev_fy_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_trainings_current_fy_url"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.set_trainings_current_fy_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_trainings_prev_fy_url"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.set_trainings_prev_fy_url()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.write_template"><code class="docutils literal notranslate"><span class="pre">DashboardConfig.write_template()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair"><code class="docutils literal notranslate"><span class="pre">ExportModulePair</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair.current_fy"><code class="docutils literal notranslate"><span class="pre">ExportModulePair.current_fy</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair.prev_fy"><code class="docutils literal notranslate"><span class="pre">ExportModulePair.prev_fy</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#module-streamlit_dashboard.utility_classes.figure_with_max_y">streamlit_dashboard.utility_classes.figure_with_max_y module</a><ul>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY"><code class="docutils literal notranslate"><span class="pre">FigureWithMaxY</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY.figure"><code class="docutils literal notranslate"><span class="pre">FigureWithMaxY.figure</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY.max_y"><code class="docutils literal notranslate"><span class="pre">FigureWithMaxY.max_y</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="streamlit_dashboard.utility_classes.html#streamlit_dashboard.utility_classes.figure_with_max_y.find_fig_max_y_and_generate_wrapper"><code class="docutils literal notranslate"><span class="pre">find_fig_max_y_and_generate_wrapper()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</section>
<section id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
</section>
<section id="module-streamlit_dashboard.auth_config_loader">
<span id="streamlit-dashboard-auth-config-loader-module"></span><h2>streamlit_dashboard.auth_config_loader module<a class="headerlink" href="#module-streamlit_dashboard.auth_config_loader" title="Link to this heading"></a></h2>
<dl class="py function">
<dt class="sig sig-object py" id="streamlit_dashboard.auth_config_loader.load_auth_config">
<span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.auth_config_loader.</span></span><span class="sig-name descname"><span class="pre">load_auth_config</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">config_path</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Authenticate</span></span></span><a class="headerlink" href="#streamlit_dashboard.auth_config_loader.load_auth_config" title="Link to this definition"></a></dt>
<dd></dd></dl>
</section>
<section id="module-streamlit_dashboard.main">
<span id="streamlit-dashboard-main-module"></span><h2>streamlit_dashboard.main module<a class="headerlink" href="#module-streamlit_dashboard.main" title="Link to this heading"></a></h2>
<p>Entry point and primary orchestrator for the Streamlit dashboard application.</p>
<p>This script establishes the global execution environment before rendering any specialized
report components. It acts as the central dependency provider, executing three critical
initialization phases to ensure child classes operate within a safe, predictable state:</p>
<ol class="arabic simple">
<li><p>Security &amp; Access Control: Initializes the session state with user credentials and roles.
It establishes the login UI and conditionally injects restricted routes (like the
<cite>AdminPanelPage</cite>) into the navigation tree based on specific role-based permissions.</p></li>
<li><p>Configuration State Management: Loads and strictly validates the <cite>DashboardConfig</cite>
YAML file, injecting it into the Streamlit session state. This fail-fast initialization
guarantees that all downstream report classes (e.g., <cite>NaicsReportPage</cite>, <cite>TrainingsEventCountsPage</cite>)
can reliably resolve their required Neoserra data endpoints based on user-selected fiscal
periods without performing redundant file I/O.</p></li>
<li><p>Global Telemetry: Configures a centralized rotating file and console logging architecture.
By defining this at the root level, any initialization or rendering errors caught within
the isolated execution boundaries of individual report pages are captured consistently.</p></li>
</ol>
</section>
<section id="module-streamlit_dashboard.streamlit_constants">
<span id="streamlit-dashboard-streamlit-constants-module"></span><h2>streamlit_dashboard.streamlit_constants module<a class="headerlink" href="#module-streamlit_dashboard.streamlit_constants" title="Link to this heading"></a></h2>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">streamlit_dashboard</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">streamlit_dashboard namespace</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">streamlit_dashboard</a><ul>
<li>Previous: <a href="modules.html" title="previous chapter">streamlit_dashboard</a></li>
<li>Next: <a href="streamlit_dashboard.cached_function_wrappers.html" title="next chapter">streamlit_dashboard.cached_function_wrappers namespace</a></li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/streamlit_dashboard.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,380 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>streamlit_dashboard.page_classes namespace &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="streamlit_dashboard.streamlit_pages namespace" href="streamlit_dashboard.streamlit_pages.html" />
<link rel="prev" title="streamlit_dashboard.components namespace" href="streamlit_dashboard.components.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-streamlit_dashboard.page_classes">
<span id="streamlit-dashboard-page-classes-namespace"></span><h1>streamlit_dashboard.page_classes namespace<a class="headerlink" href="#module-streamlit_dashboard.page_classes" title="Link to this heading"></a></h1>
<section id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
</section>
<section id="module-streamlit_dashboard.page_classes.admin_panel_page_class">
<span id="streamlit-dashboard-page-classes-admin-panel-page-class-module"></span><h2>streamlit_dashboard.page_classes.admin_panel_page_class module<a class="headerlink" href="#module-streamlit_dashboard.page_classes.admin_panel_page_class" title="Link to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.page_classes.admin_panel_page_class.</span></span><span class="sig-name descname"><span class="pre">AdminPanelPage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseReportPage</span></code></p>
<p>Provides a centralized administrative interface for configuring dashboard data sources.</p>
<p>Unlike standard report pages, this class does not generate or render data visualizations.
Instead, it hooks into the standard BaseReportPage lifecycle to render a configuration
form. It manages the retrieval, validation, and updating of Neoserra API export URLs
stored within the global DashboardConfig session state.</p>
<p>It employs strict regex validation to ensure data pipeline integrity, while also
providing a deliberate bypass mechanism to future-proof against external API changes.</p>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.generate_figures">
<span class="sig-name descname"><span class="pre">generate_figures</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">parameters</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.generate_figures" title="Link to this definition"></a></dt>
<dd><p>Overrides the standard data generation step as a no-op.</p>
<p>Because this page is strictly for configuration management, it circumvents
the data processing phase of the BaseReportPage lifecycle.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>parameters</strong> (<em>Dict</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em>) The parameter dictionary (empty from render_controls).</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>An empty dictionary representing no figure data.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Dict[str, Any]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.get_page_name">
<span class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">get_page_name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.get_page_name" title="Link to this definition"></a></dt>
<dd><p>Retrieves the human-readable name of the admin panel for UI navigation.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The static display name “Admin Panel”.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>str</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.get_syncable_figure_keys">
<span class="sig-name descname"><span class="pre">get_syncable_figure_keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.get_syncable_figure_keys" title="Link to this definition"></a></dt>
<dd><p>Declares that this page has no visual figures requiring axis synchronization.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>An empty list.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>List[str]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.is_valid_neoserra_url">
<span class="sig-name descname"><span class="pre">is_valid_neoserra_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">url</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.is_valid_neoserra_url" title="Link to this definition"></a></dt>
<dd><p>Validates a given URL against the expected Neoserra export API format.</p>
<p>Used as a gatekeeper during form submission to prevent malformed URLs from breaking
the dashboards data ingestion pipeline.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>url</strong> (<em>str</em>) The raw URL string to validate.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>True if the URL matches the expected Neoserra API pattern, False otherwise.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>bool</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.render_controls">
<span class="sig-name descname"><span class="pre">render_controls</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.render_controls" title="Link to this definition"></a></dt>
<dd><p>Builds the administrative form and handles the validation/submission pipeline.</p>
<p>This method constructs a unified Streamlit form containing URL grabber widgets for
various data modules (Clients, Trainings, NBS, Funding). By wrapping the inputs
in a single form, it ensures that configuration updates are processed as a single
batch rather than triggering piecemeal app reruns.</p>
<p>During submission, it utilizes an “all-or-nothing” validation strategy. If any link
fails regex validation (and the manual bypass is not checked), the entire save
operation is aborted to prevent partial configuration states.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit container to draw the administrative form onto.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>An empty dictionary, as this page does not pass parameters to generate_figures.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Dict[str, Any]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.render_figures">
<span class="sig-name descname"><span class="pre">render_figures</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.render_figures" title="Link to this definition"></a></dt>
<dd><p>Overrides the standard figure rendering step as a no-op.</p>
<p>Does nothing, as there are no visual charts or graphs to draw for the Admin Panel.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit container.</p></li>
<li><p><strong>output_data</strong> (<em>Dict</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em>) The empty output data from generate_figures.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.save_settings">
<span class="sig-name descname"><span class="pre">save_settings</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.admin_panel_page_class.AdminPanelPage.save_settings" title="Link to this definition"></a></dt>
<dd><p>Commits the current configuration state to persistent storage.</p>
<p>Extracts the DashboardConfig object from the Streamlit session state and triggers
its internal save mechanism, providing visual feedback to the user upon completion.</p>
</dd></dl>
</dd></dl>
</section>
<section id="streamlit-dashboard-page-classes-authentication-page-wrapper-module">
<h2>streamlit_dashboard.page_classes.authentication_page_wrapper module<a class="headerlink" href="#streamlit-dashboard-page-classes-authentication-page-wrapper-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-center-milestones-page-class-module">
<h2>streamlit_dashboard.page_classes.center_milestones_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-center-milestones-page-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-funding-milestones-page-class-module">
<h2>streamlit_dashboard.page_classes.funding_milestones_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-funding-milestones-page-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-naics-report-page-class-module">
<h2>streamlit_dashboard.page_classes.naics_report_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-naics-report-page-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-nbs-milestones-page-class-module">
<h2>streamlit_dashboard.page_classes.nbs_milestones_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-nbs-milestones-page-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-page-class-constants-module">
<h2>streamlit_dashboard.page_classes.page_class_constants module<a class="headerlink" href="#streamlit-dashboard-page-classes-page-class-constants-module" title="Link to this heading"></a></h2>
</section>
<section id="module-streamlit_dashboard.page_classes.report_comparer_page_class">
<span id="streamlit-dashboard-page-classes-report-comparer-page-class-module"></span><h2>streamlit_dashboard.page_classes.report_comparer_page_class module<a class="headerlink" href="#module-streamlit_dashboard.page_classes.report_comparer_page_class" title="Link to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.page_classes.report_comparer_page_class.</span></span><span class="sig-name descname"><span class="pre">ComparerColumn</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">report_name_map</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">report_configs</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">column_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseReportPage</span></code></p>
<p>Acts as an interactive proxy wrapper for a single report within a comparison layout.</p>
<p>Handles dynamic instantiation of a user-selected report and forcibly overrides its
instance ID. This guarantees that Streamlit widget keys remain completely unique
even if the user selects the exact same report class in both comparison columns.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>report_name_map</strong> (<em>dict</em>) Dictionary mapping UI display names to BaseReportPage classes.</p></li>
<li><p><strong>report_configs</strong> (<em>dict</em>) Dictionary mapping classes to their config keyword arguments.</p></li>
<li><p><strong>column_id</strong> (<em>str</em>) An identifier (e.g., left, right) prepended to prevent widget collisions.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.generate_figures">
<span class="sig-name descname"><span class="pre">generate_figures</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">parameters</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.generate_figures" title="Link to this definition"></a></dt>
<dd><p>Delegates figure generation to the currently instantiated report.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>parameters</strong> (<em>Dict</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em>) User inputs specific to the selected report.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>The output data payload from the selected report.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Dict[str, Any]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.render_controls">
<span class="sig-name descname"><span class="pre">render_controls</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.render_controls" title="Link to this definition"></a></dt>
<dd><p>Draws a selection menu to instantiate the desired report, then renders its specific controls.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit column container.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>The parameters generated by the selected reports controls.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Dict[str, Any]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.render_figures">
<span class="sig-name descname"><span class="pre">render_figures</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerColumn.render_figures" title="Link to this definition"></a></dt>
<dd><p>Delegates the final drawing phase to the currently instantiated report.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit column container.</p></li>
<li><p><strong>output_data</strong> (<em>Dict</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em>) The display data, potentially mutated by the parent ComparerPage.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.page_classes.report_comparer_page_class.</span></span><span class="sig-name descname"><span class="pre">ComparerPage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">report_configs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseReportPage</span></code></p>
<p>Orchestrates a dual-column layout to allow dynamic side-by-side report comparison.</p>
<p>Leverages the BaseReportPage lifecycle to intercept data generation between two
child columns. If identical report types are selected, it extracts their max values
and synchronizes their Y-axes globally before allowing the final rendering phase,
ensuring an accurate visual comparison.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>report_configs</strong> (<em>dict</em>) Mapping of report page classes to their respective instantiation arguments.</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage.render">
<span class="sig-name descname"><span class="pre">render</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.page_classes.report_comparer_page_class.ComparerPage.render" title="Link to this definition"></a></dt>
<dd><p>Splits the layout and manages the synchronization pipeline for both child reports.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>container</strong> (<em>DeltaGenerator</em>) The main Streamlit container allocated for the comparer.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<section id="streamlit-dashboard-page-classes-training-attendee-counts-class-module">
<h2>streamlit_dashboard.page_classes.training_attendee_counts_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-training-attendee-counts-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-training-attendee-ranges-page-class-module">
<h2>streamlit_dashboard.page_classes.training_attendee_ranges_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-training-attendee-ranges-page-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-training-count-statistics-page-class-module">
<h2>streamlit_dashboard.page_classes.training_count_statistics_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-training-count-statistics-page-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-training-event-count-attendee-comparison-page-class-module">
<h2>streamlit_dashboard.page_classes.training_event_count_attendee_comparison_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-training-event-count-attendee-comparison-page-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-training-event-count-page-class-module">
<h2>streamlit_dashboard.page_classes.training_event_count_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-training-event-count-page-class-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-page-classes-training-primary-topics-page-class-module">
<h2>streamlit_dashboard.page_classes.training_primary_topics_page_class module<a class="headerlink" href="#streamlit-dashboard-page-classes-training-primary-topics-page-class-module" title="Link to this heading"></a></h2>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">streamlit_dashboard</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="streamlit_dashboard.html">streamlit_dashboard namespace</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">streamlit_dashboard</a><ul>
<li><a href="streamlit_dashboard.html">streamlit_dashboard namespace</a><ul>
<li>Previous: <a href="streamlit_dashboard.components.html" title="previous chapter">streamlit_dashboard.components namespace</a></li>
<li>Next: <a href="streamlit_dashboard.streamlit_pages.html" title="next chapter">streamlit_dashboard.streamlit_pages namespace</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/streamlit_dashboard.page_classes.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>streamlit_dashboard.streamlit_pages namespace &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="streamlit_dashboard.utility_classes namespace" href="streamlit_dashboard.utility_classes.html" />
<link rel="prev" title="streamlit_dashboard.page_classes namespace" href="streamlit_dashboard.page_classes.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-streamlit_dashboard.streamlit_pages">
<span id="streamlit-dashboard-streamlit-pages-namespace"></span><h1>streamlit_dashboard.streamlit_pages namespace<a class="headerlink" href="#module-streamlit_dashboard.streamlit_pages" title="Link to this heading"></a></h1>
<section id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-admin-streamlit-page-module">
<h2>streamlit_dashboard.streamlit_pages.admin_streamlit_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-admin-streamlit-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-center-streamlit-page-module">
<h2>streamlit_dashboard.streamlit_pages.center_streamlit_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-center-streamlit-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-comparer-streamlit-page-module">
<h2>streamlit_dashboard.streamlit_pages.comparer_streamlit_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-comparer-streamlit-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-funding-streamlit-page-module">
<h2>streamlit_dashboard.streamlit_pages.funding_streamlit_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-funding-streamlit-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-naics-streamlit-page-module">
<h2>streamlit_dashboard.streamlit_pages.naics_streamlit_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-naics-streamlit-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-nbs-streamlit-page-module">
<h2>streamlit_dashboard.streamlit_pages.nbs_streamlit_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-nbs-streamlit-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-training-attendee-ranges-page-module">
<h2>streamlit_dashboard.streamlit_pages.training_attendee_ranges_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-training-attendee-ranges-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-trainings-attendees-count-page-module">
<h2>streamlit_dashboard.streamlit_pages.trainings_attendees_count_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-trainings-attendees-count-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-trainings-count-statistics-page-module">
<h2>streamlit_dashboard.streamlit_pages.trainings_count_statistics_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-trainings-count-statistics-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-trainings-event-attendee-comparison-page-module">
<h2>streamlit_dashboard.streamlit_pages.trainings_event_attendee_comparison_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-trainings-event-attendee-comparison-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-trainings-event-count-page-module">
<h2>streamlit_dashboard.streamlit_pages.trainings_event_count_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-trainings-event-count-page-module" title="Link to this heading"></a></h2>
</section>
<section id="streamlit-dashboard-streamlit-pages-trainings-primary-topic-page-module">
<h2>streamlit_dashboard.streamlit_pages.trainings_primary_topic_page module<a class="headerlink" href="#streamlit-dashboard-streamlit-pages-trainings-primary-topic-page-module" title="Link to this heading"></a></h2>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">streamlit_dashboard</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="streamlit_dashboard.html">streamlit_dashboard namespace</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">streamlit_dashboard</a><ul>
<li><a href="streamlit_dashboard.html">streamlit_dashboard namespace</a><ul>
<li>Previous: <a href="streamlit_dashboard.page_classes.html" title="previous chapter">streamlit_dashboard.page_classes namespace</a></li>
<li>Next: <a href="streamlit_dashboard.utility_classes.html" title="next chapter">streamlit_dashboard.utility_classes namespace</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/streamlit_dashboard.streamlit_pages.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,504 @@
<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>streamlit_dashboard.utility_classes namespace &#8212; Streamlit Dashboard 1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=5ecbeea2" />
<link rel="stylesheet" type="text/css" href="_static/basic.css?v=b08954a9" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=27fed22d" />
<script src="_static/documentation_options.js?v=f2a433a1"></script>
<script src="_static/doctools.js?v=fd6eb6e6"></script>
<script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="prev" title="streamlit_dashboard.streamlit_pages namespace" href="streamlit_dashboard.streamlit_pages.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-streamlit_dashboard.utility_classes">
<span id="streamlit-dashboard-utility-classes-namespace"></span><h1>streamlit_dashboard.utility_classes namespace<a class="headerlink" href="#module-streamlit_dashboard.utility_classes" title="Link to this heading"></a></h1>
<section id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
</section>
<section id="module-streamlit_dashboard.utility_classes.base_report_page">
<span id="streamlit-dashboard-utility-classes-base-report-page-module"></span><h2>streamlit_dashboard.utility_classes.base_report_page module<a class="headerlink" href="#module-streamlit_dashboard.utility_classes.base_report_page" title="Link to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.BaseReportPage">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.utility_classes.base_report_page.</span></span><span class="sig-name descname"><span class="pre">BaseReportPage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#streamlit_dashboard.utility_classes.base_report_page.Renderable" title="streamlit_dashboard.utility_classes.base_report_page.Renderable"><code class="xref py py-class docutils literal notranslate"><span class="pre">Renderable</span></code></a></p>
<p>Standardizes the rendering pipeline for all analytical report pages.</p>
<p>This class breaks down UI generation into a predictable, synchronous lifecycle:
1. Render controls (capture inputs).
2. Generate figures (process data).
3. Render figures (display outputs).
This strict pipeline allows higher-level orchestrators to intercept the process
mid-cycle (e.g., to mutate generated figures before they are drawn).</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>title</strong> (<em>str</em>) The title of the page, acting as its base instance ID.</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.generate_figures">
<span class="sig-name descname"><span class="pre">generate_figures</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">parameters</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.generate_figures" title="Link to this definition"></a></dt>
<dd><p>Processes parameters and generates the underlying data/figures for the report.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>parameters</strong> (<em>Dict</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em>) The dictionary of user inputs captured from render_controls.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A dictionary of computed outputs or Plotly figures.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Dict[str, Any]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.get_page_name">
<span class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">get_page_name</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.get_page_name" title="Link to this definition"></a></dt>
<dd><p>Retrieves the human-readable name of the report for UI selection menus.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The display name of the report.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>str</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.get_syncable_figure_keys">
<span class="sig-name descname"><span class="pre">get_syncable_figure_keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.get_syncable_figure_keys" title="Link to this definition"></a></dt>
<dd><p>Identifies which generated figures support external axis synchronization for when
two of the same report are displayed side by side.</p>
<p>This should really only be used for graphs for which axis synchronization makes sense
(like bar charts that show quantities not percentages)</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>A list of dictionary keys corresponding to figures in output_data
that can have their Y-axes scaled dynamically by a parent orchestrator.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>List[str]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render">
<span class="sig-name descname"><span class="pre">render</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render" title="Link to this definition"></a></dt>
<dd><p>Executes the standardized report lifecycle.</p>
<p>Sequentially chains control rendering, data generation, and figure drawing,
passing state safely between each phase and halting if user parameters are missing.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit layout container for the entire report.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render_controls">
<span class="sig-name descname"><span class="pre">render_controls</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render_controls" title="Link to this definition"></a></dt>
<dd><p>Renders the input widgets required to parameterize the report.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit container to draw the widgets onto.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A dictionary of user-selected parameters, or None if inputs are invalid.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>Dict[str, Any]</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render_figures">
<span class="sig-name descname"><span class="pre">render_figures</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.BaseReportPage.render_figures" title="Link to this definition"></a></dt>
<dd><p>Draws the previously generated figures and data onto the screen.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit container to draw the visuals onto.</p></li>
<li><p><strong>output_data</strong> (<em>Dict</em><em>[</em><em>str</em><em>, </em><em>Any</em><em>]</em>) The computed results returned by generate_figures.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.Renderable">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.utility_classes.base_report_page.</span></span><span class="sig-name descname"><span class="pre">Renderable</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instance_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.Renderable" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
<p>Abstract base class for UI components drawn to a Streamlit container.</p>
<p>Provides a strict contract for rendering and manages unique identifier generation.
This structure is critical in Streamlit to prevent widget state collisions
when multiple instances of the same UI component are rendered simultaneously.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>instance_id</strong> (<em>str</em>) A unique identifier for this specific rendered instance.</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.Renderable.get_widget_key">
<span class="sig-name descname"><span class="pre">get_widget_key</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">widget_unique_id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.Renderable.get_widget_key" title="Link to this definition"></a></dt>
<dd><p>Generates a globally unique Streamlit widget key for this specific instance.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>widget_unique_id</strong> (<em>str</em>) The local identifier for the specific widget.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A concatenated string combining the instance ID and widget ID.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>str</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.base_report_page.Renderable.render">
<span class="property"><span class="k"><span class="pre">abstractmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">render</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">container</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DeltaGenerator</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.base_report_page.Renderable.render" title="Link to this definition"></a></dt>
<dd><p>Renders the components UI elements onto the specified Streamlit container.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>container</strong> (<em>DeltaGenerator</em>) The Streamlit layout element where this component will be drawn.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<section id="module-streamlit_dashboard.utility_classes.dashboard_config_parser">
<span id="streamlit-dashboard-utility-classes-dashboard-config-parser-module"></span><h2>streamlit_dashboard.utility_classes.dashboard_config_parser module<a class="headerlink" href="#module-streamlit_dashboard.utility_classes.dashboard_config_parser" title="Link to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.utility_classes.dashboard_config_parser.</span></span><span class="sig-name descname"><span class="pre">DashboardConfig</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Central manager for application configuration state and schema validation.</p>
<p>This class handles the serialization, parsing, and strict validation of the YAML
configuration file. It acts as the single source of truth for all external Neoserra
data endpoints and logging behaviors, abstracting the dictionary traversal away from
the reporting classes.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>filename</strong> (<em>str</em>) The filepath to the target YAML configuration file.</p>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_clients_list_urls">
<span class="sig-name descname"><span class="pre">get_clients_list_urls</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair"><span class="pre">ExportModulePair</span></a></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_clients_list_urls" title="Link to this definition"></a></dt>
<dd><p>Retrieves the paired endpoints for the client list dataset.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>An object containing the current and previous fiscal period URLs.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p><a class="reference internal" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair">ExportModulePair</a></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_funding_milestones_urls">
<span class="sig-name descname"><span class="pre">get_funding_milestones_urls</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair"><span class="pre">ExportModulePair</span></a></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_funding_milestones_urls" title="Link to this definition"></a></dt>
<dd><p>Retrieves the paired endpoints for the funding milestones dataset.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>An object containing the current and previous fiscal period URLs.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p><a class="reference internal" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair">ExportModulePair</a></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_log_level">
<span class="sig-name descname"><span class="pre">get_log_level</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_log_level" title="Link to this definition"></a></dt>
<dd><p>Translates the human-readable logging level from the configuration file into system constants.</p>
<p>Maps string values (e.g., “DEBUG”, “WARNING”) to their corresponding integer values
required by the native Python <cite>logging</cite> module.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The integer constant representing the logging severity level.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>int</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_log_path">
<span class="sig-name descname"><span class="pre">get_log_path</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_log_path" title="Link to this definition"></a></dt>
<dd><p>Retrieves the configured file path for the applications rotating file logger.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The target filepath, or None if the configuration is missing.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>str | None</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_nbs_milestones_urls">
<span class="sig-name descname"><span class="pre">get_nbs_milestones_urls</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair"><span class="pre">ExportModulePair</span></a></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_nbs_milestones_urls" title="Link to this definition"></a></dt>
<dd><p>Retrieves the paired endpoints for the New Business Starts dataset.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>An object containing the current and previous fiscal period URLs.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p><a class="reference internal" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair">ExportModulePair</a></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_trainings_urls">
<span class="sig-name descname"><span class="pre">get_trainings_urls</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair"><span class="pre">ExportModulePair</span></a></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.get_trainings_urls" title="Link to this definition"></a></dt>
<dd><p>Retrieves the paired endpoints for the training events dataset.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>An object containing the current and previous fiscal period URLs.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p><a class="reference internal" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair">ExportModulePair</a></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.load">
<span class="sig-name descname"><span class="pre">load</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.load" title="Link to this definition"></a></dt>
<dd><p>Reads the configuration file from disk and enforces strict schema validation.</p>
<p>Acts as a fail-fast gateway for the application environment. It manually verifies the
existence of every required organizational key (export modules, fiscal periods, and logging
parameters). If the YAML file is structurally malformed or missing endpoints, it immediately
raises explicit KeyErrors to halt application boot, preventing cascading fetch failures later.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.save">
<span class="sig-name descname"><span class="pre">save</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.save" title="Link to this definition"></a></dt>
<dd><p>Serializes the current in-memory configuration state to the YAML file on disk.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_clients_list_current_fy_url">
<span class="sig-name descname"><span class="pre">set_clients_list_current_fy_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">current_fy_url</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_clients_list_current_fy_url" title="Link to this definition"></a></dt>
<dd><p>Updates the in-memory endpoint URL for the current fiscal periods client dataset.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_clients_list_prev_fy_url">
<span class="sig-name descname"><span class="pre">set_clients_list_prev_fy_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prev_fy_url</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_clients_list_prev_fy_url" title="Link to this definition"></a></dt>
<dd><p>Updates the in-memory endpoint URL for the previous fiscal periods client dataset.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_funding_milestones_current_fy_url">
<span class="sig-name descname"><span class="pre">set_funding_milestones_current_fy_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">current_fy_url</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_funding_milestones_current_fy_url" title="Link to this definition"></a></dt>
<dd><p>Updates the in-memory endpoint URL for the current fiscal periods funding milestones dataset.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_funding_milestones_prev_fy_url">
<span class="sig-name descname"><span class="pre">set_funding_milestones_prev_fy_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prev_fy_url</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_funding_milestones_prev_fy_url" title="Link to this definition"></a></dt>
<dd><p>Updates the in-memory endpoint URL for the previous fiscal periods funding milestones dataset.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_nbs_milestones_current_fy_url">
<span class="sig-name descname"><span class="pre">set_nbs_milestones_current_fy_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">current_fy_url</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_nbs_milestones_current_fy_url" title="Link to this definition"></a></dt>
<dd><p>Updates the in-memory endpoint URL for the current fiscal periods New Business Starts dataset.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_nbs_milestones_prev_fy_url">
<span class="sig-name descname"><span class="pre">set_nbs_milestones_prev_fy_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prev_fy_url</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_nbs_milestones_prev_fy_url" title="Link to this definition"></a></dt>
<dd><p>Updates the in-memory endpoint URL for the previous fiscal periods New Business Starts dataset.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_trainings_current_fy_url">
<span class="sig-name descname"><span class="pre">set_trainings_current_fy_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">current_fy_url</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_trainings_current_fy_url" title="Link to this definition"></a></dt>
<dd><p>Updates the in-memory endpoint URL for the current fiscal periods training events dataset.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_trainings_prev_fy_url">
<span class="sig-name descname"><span class="pre">set_trainings_prev_fy_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prev_fy_url</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.set_trainings_prev_fy_url" title="Link to this definition"></a></dt>
<dd><p>Updates the in-memory endpoint URL for the previous fiscal periods training events dataset.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.write_template">
<span class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">write_template</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.DashboardConfig.write_template" title="Link to this definition"></a></dt>
<dd><p>Bootstraps a new environment by generating a default configuration file on disk.</p>
<p>Writes the hardcoded <cite>TEMPLATE_DICT</cite> schema to the specified path to ensure administrators
have the correct structural format when deploying the dashboard for the first time.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>filename</strong> (<em>str</em>) The target filepath for the generated YAML file.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.utility_classes.dashboard_config_parser.</span></span><span class="sig-name descname"><span class="pre">ExportModulePair</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">current_fy</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prev_fy</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Data structure pairing data export endpoints across adjacent fiscal periods.</p>
<p>This class groups the URLs for the current and previous fiscal years, allowing
the application to easily pass paired historical and active data sources to
downstream report pipelines.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair.current_fy">
<span class="sig-name descname"><span class="pre">current_fy</span></span><span class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair.current_fy" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair.prev_fy">
<span class="sig-name descname"><span class="pre">prev_fy</span></span><span class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.dashboard_config_parser.ExportModulePair.prev_fy" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
<section id="module-streamlit_dashboard.utility_classes.figure_with_max_y">
<span id="streamlit-dashboard-utility-classes-figure-with-max-y-module"></span><h2>streamlit_dashboard.utility_classes.figure_with_max_y module<a class="headerlink" href="#module-streamlit_dashboard.utility_classes.figure_with_max_y" title="Link to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY">
<span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.utility_classes.figure_with_max_y.</span></span><span class="sig-name descname"><span class="pre">FigureWithMaxY</span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">TypedDict</span></code></p>
<p>A helper container class that gets used by report pages to encapsulate
Plotly figures along with the maximum y value represented on the figures.</p>
<p>This aids in axis synchronization when two of the same report are shown side by side</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY.figure">
<span class="sig-name descname"><span class="pre">figure</span></span><span class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Figure</span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY.figure" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY.max_y">
<span class="sig-name descname"><span class="pre">max_y</span></span><span class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">float</span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY.max_y" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="streamlit_dashboard.utility_classes.figure_with_max_y.find_fig_max_y_and_generate_wrapper">
<span class="sig-prename descclassname"><span class="pre">streamlit_dashboard.utility_classes.figure_with_max_y.</span></span><span class="sig-name descname"><span class="pre">find_fig_max_y_and_generate_wrapper</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fig</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Figure</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY" title="streamlit_dashboard.utility_classes.figure_with_max_y.FigureWithMaxY"><span class="pre">FigureWithMaxY</span></a></span></span><a class="headerlink" href="#streamlit_dashboard.utility_classes.figure_with_max_y.find_fig_max_y_and_generate_wrapper" title="Link to this definition"></a></dt>
<dd><p>Helper to automatically extract the max Y value from a Plotly figure
and wrap it in the FigureWithMaxY utility class.</p>
</dd></dl>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Streamlit Dashboard</a></h1>
<search id="searchbox" style="display: none" role="search">
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">streamlit_dashboard</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="streamlit_dashboard.html">streamlit_dashboard namespace</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">streamlit_dashboard</a><ul>
<li><a href="streamlit_dashboard.html">streamlit_dashboard namespace</a><ul>
<li>Previous: <a href="streamlit_dashboard.streamlit_pages.html" title="previous chapter">streamlit_dashboard.streamlit_pages namespace</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2026, SBDC Team.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 9.1.0</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
<a href="_sources/streamlit_dashboard.utility_classes.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>