diff --git a/atst/assets.py b/atst/assets.py index 6d8351a6..aaf1f82e 100644 --- a/atst/assets.py +++ b/atst/assets.py @@ -4,7 +4,7 @@ environment = Environment() css = Bundle( "../static/assets/index.css", - output="../static/assets/styles.%(version)s.css", + output="../static/assets/index.%(version)s.css", ) environment.register("css", css) diff --git a/static/js/index.js b/js/index.js similarity index 70% rename from static/js/index.js rename to js/index.js index 91a30f3e..8289b7e4 100644 --- a/static/js/index.js +++ b/js/index.js @@ -2,3 +2,5 @@ import classes from '../styles/atat.scss' import './thing' +console.log('hellooooo') + diff --git a/static/js/thing.js b/js/thing.js similarity index 100% rename from static/js/thing.js rename to js/thing.js diff --git a/package.json b/package.json index 421c767b..b2d67129 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "ATST Stateless Services", "main": "index.js", "scripts": { - "watch": "parcel watch static/js/index.js -d static/assets -o index.js --no-autoinstall", - "build": "parcel build static/js/index.js -d static/assets -o index.js", + "watch": "parcel watch js/index.js -d static/assets -o index.js --no-autoinstall", + "build": "parcel build js/index.js -d static/assets -o index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", diff --git a/static/assets/angle-arrow-down-hover.9cc540eb.svg b/static/assets/angle-arrow-down-hover.9cc540eb.svg new file mode 100644 index 00000000..63b09db8 --- /dev/null +++ b/static/assets/angle-arrow-down-hover.9cc540eb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/angle-arrow-down-hover.baa52fa9.png b/static/assets/angle-arrow-down-hover.baa52fa9.png new file mode 100644 index 00000000..e611376d Binary files /dev/null and b/static/assets/angle-arrow-down-hover.baa52fa9.png differ diff --git a/static/assets/angle-arrow-down-primary-hover.11d98d2a.svg b/static/assets/angle-arrow-down-primary-hover.11d98d2a.svg new file mode 100644 index 00000000..0777e09f --- /dev/null +++ b/static/assets/angle-arrow-down-primary-hover.11d98d2a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/angle-arrow-down-primary-hover.d936067e.png b/static/assets/angle-arrow-down-primary-hover.d936067e.png new file mode 100644 index 00000000..2ea69897 Binary files /dev/null and b/static/assets/angle-arrow-down-primary-hover.d936067e.png differ diff --git a/static/assets/angle-arrow-down-primary.1c0886c7.svg b/static/assets/angle-arrow-down-primary.1c0886c7.svg new file mode 100644 index 00000000..f522e715 --- /dev/null +++ b/static/assets/angle-arrow-down-primary.1c0886c7.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/angle-arrow-down-primary.ab8d4776.png b/static/assets/angle-arrow-down-primary.ab8d4776.png new file mode 100644 index 00000000..ee7b9ed6 Binary files /dev/null and b/static/assets/angle-arrow-down-primary.ab8d4776.png differ diff --git a/static/assets/angle-arrow-down.da471750.svg b/static/assets/angle-arrow-down.da471750.svg new file mode 100644 index 00000000..87cfc3a0 --- /dev/null +++ b/static/assets/angle-arrow-down.da471750.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/angle-arrow-down.eaf9b383.png b/static/assets/angle-arrow-down.eaf9b383.png new file mode 100644 index 00000000..31a81906 Binary files /dev/null and b/static/assets/angle-arrow-down.eaf9b383.png differ diff --git a/static/assets/angle-arrow-up-primary-hover.656ab109.svg b/static/assets/angle-arrow-up-primary-hover.656ab109.svg new file mode 100644 index 00000000..05a4c041 --- /dev/null +++ b/static/assets/angle-arrow-up-primary-hover.656ab109.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/angle-arrow-up-primary-hover.87ccb668.png b/static/assets/angle-arrow-up-primary-hover.87ccb668.png new file mode 100644 index 00000000..a8af5709 Binary files /dev/null and b/static/assets/angle-arrow-up-primary-hover.87ccb668.png differ diff --git a/static/assets/angle-arrow-up-primary.b38f7f9a.svg b/static/assets/angle-arrow-up-primary.b38f7f9a.svg new file mode 100644 index 00000000..7b3ec391 --- /dev/null +++ b/static/assets/angle-arrow-up-primary.b38f7f9a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/angle-arrow-up-primary.fd1251b8.png b/static/assets/angle-arrow-up-primary.fd1251b8.png new file mode 100644 index 00000000..20fdf18e Binary files /dev/null and b/static/assets/angle-arrow-up-primary.fd1251b8.png differ diff --git a/static/assets/arrow-both.40570b7e.svg b/static/assets/arrow-both.40570b7e.svg new file mode 100644 index 00000000..4c7af72a --- /dev/null +++ b/static/assets/arrow-both.40570b7e.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/arrow-both.4bb0bc24.png b/static/assets/arrow-both.4bb0bc24.png new file mode 100644 index 00000000..075ffa97 Binary files /dev/null and b/static/assets/arrow-both.4bb0bc24.png differ diff --git a/static/assets/arrow-down.08222248.svg b/static/assets/arrow-down.08222248.svg new file mode 100644 index 00000000..79e1c6ae --- /dev/null +++ b/static/assets/arrow-down.08222248.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/arrow-down.188ad70b.png b/static/assets/arrow-down.188ad70b.png new file mode 100644 index 00000000..d6fc7100 Binary files /dev/null and b/static/assets/arrow-down.188ad70b.png differ diff --git a/static/assets/arrow-right.8dc15dc6.svg b/static/assets/arrow-right.8dc15dc6.svg new file mode 100644 index 00000000..5d29cdde --- /dev/null +++ b/static/assets/arrow-right.8dc15dc6.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/arrow-right.c5e6e18a.png b/static/assets/arrow-right.c5e6e18a.png new file mode 100644 index 00000000..5765f1b6 Binary files /dev/null and b/static/assets/arrow-right.c5e6e18a.png differ diff --git a/static/assets/checkmark.13582669.svg b/static/assets/checkmark.13582669.svg new file mode 100644 index 00000000..798c9989 --- /dev/null +++ b/static/assets/checkmark.13582669.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/close.34c66938.svg b/static/assets/close.34c66938.svg new file mode 100644 index 00000000..25f10873 --- /dev/null +++ b/static/assets/close.34c66938.svg @@ -0,0 +1,12 @@ + + + + Fill 15 Copy + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/static/assets/close.707c1f41.png b/static/assets/close.707c1f41.png new file mode 100644 index 00000000..677ac8f4 Binary files /dev/null and b/static/assets/close.707c1f41.png differ diff --git a/static/assets/correct8.4e87f243.svg b/static/assets/correct8.4e87f243.svg new file mode 100644 index 00000000..bd7b38b2 --- /dev/null +++ b/static/assets/correct8.4e87f243.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/correct8.a03d2fcf.png b/static/assets/correct8.a03d2fcf.png new file mode 100644 index 00000000..4b76107e Binary files /dev/null and b/static/assets/correct8.a03d2fcf.png differ diff --git a/static/assets/correct9.860cef73.png b/static/assets/correct9.860cef73.png new file mode 100644 index 00000000..a83160a0 Binary files /dev/null and b/static/assets/correct9.860cef73.png differ diff --git a/static/assets/correct9.f5b58d71.svg b/static/assets/correct9.f5b58d71.svg new file mode 100644 index 00000000..485f42e5 --- /dev/null +++ b/static/assets/correct9.f5b58d71.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/error.77a47b7b.png b/static/assets/error.77a47b7b.png new file mode 100644 index 00000000..0d434975 Binary files /dev/null and b/static/assets/error.77a47b7b.png differ diff --git a/static/assets/error.fed7fc9a.svg b/static/assets/error.fed7fc9a.svg new file mode 100644 index 00000000..20b8057a --- /dev/null +++ b/static/assets/error.fed7fc9a.svg @@ -0,0 +1,17 @@ + + + + + + diff --git a/static/assets/external-link-alt-hover.720d3de5.svg b/static/assets/external-link-alt-hover.720d3de5.svg new file mode 100644 index 00000000..2958691b --- /dev/null +++ b/static/assets/external-link-alt-hover.720d3de5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/external-link-alt-hover.fe210d33.png b/static/assets/external-link-alt-hover.fe210d33.png new file mode 100644 index 00000000..bf0242ce Binary files /dev/null and b/static/assets/external-link-alt-hover.fe210d33.png differ diff --git a/static/assets/external-link-alt.410f199e.png b/static/assets/external-link-alt.410f199e.png new file mode 100644 index 00000000..7761c284 Binary files /dev/null and b/static/assets/external-link-alt.410f199e.png differ diff --git a/static/assets/external-link-alt.f8c085df.svg b/static/assets/external-link-alt.f8c085df.svg new file mode 100644 index 00000000..2c4edd7e --- /dev/null +++ b/static/assets/external-link-alt.f8c085df.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/external-link-hover.0007810e.png b/static/assets/external-link-hover.0007810e.png new file mode 100644 index 00000000..9df376d4 Binary files /dev/null and b/static/assets/external-link-hover.0007810e.png differ diff --git a/static/assets/external-link-hover.e82acbc1.svg b/static/assets/external-link-hover.e82acbc1.svg new file mode 100644 index 00000000..98942ea9 --- /dev/null +++ b/static/assets/external-link-hover.e82acbc1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/external-link.0ba33f83.svg b/static/assets/external-link.0ba33f83.svg new file mode 100644 index 00000000..51b6cf20 --- /dev/null +++ b/static/assets/external-link.0ba33f83.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/assets/external-link.7cc7907a.png b/static/assets/external-link.7cc7907a.png new file mode 100644 index 00000000..b98fd998 Binary files /dev/null and b/static/assets/external-link.7cc7907a.png differ diff --git a/static/assets/facebook25.0247732a.svg b/static/assets/facebook25.0247732a.svg new file mode 100644 index 00000000..2a136e15 --- /dev/null +++ b/static/assets/facebook25.0247732a.svg @@ -0,0 +1 @@ + diff --git a/static/assets/facebook25.e89f66fb.png b/static/assets/facebook25.e89f66fb.png new file mode 100644 index 00000000..98d55698 Binary files /dev/null and b/static/assets/facebook25.e89f66fb.png differ diff --git a/static/assets/hero.1d4e1843.png b/static/assets/hero.1d4e1843.png new file mode 100644 index 00000000..6197b334 Binary files /dev/null and b/static/assets/hero.1d4e1843.png differ diff --git a/static/assets/index.4338282b.js b/static/assets/index.4338282b.js new file mode 100644 index 00000000..ac02491a --- /dev/null +++ b/static/assets/index.4338282b.js @@ -0,0 +1,362 @@ +// modules are defined as an array +// [ module function, map of requires ] +// +// map of requires is short require name -> numeric require +// +// anything defined in a previous bundle is accessed via the +// orig method which is the require for previous bundles + +// eslint-disable-next-line no-global-assign +parcelRequire = (function (modules, cache, entry, globalName) { + // Save the require from previous bundle to this closure if any + var previousRequire = typeof parcelRequire === 'function' && parcelRequire; + var nodeRequire = typeof require === 'function' && require; + + function newRequire(name, jumped) { + if (!cache[name]) { + if (!modules[name]) { + // if we cannot find the module within our internal map or + // cache jump to the current global require ie. the last bundle + // that was added to the page. + var currentRequire = typeof parcelRequire === 'function' && parcelRequire; + if (!jumped && currentRequire) { + return currentRequire(name, true); + } + + // If there are other bundles on this page the require from the + // previous one is saved to 'previousRequire'. Repeat this as + // many times as there are bundles until the module is found or + // we exhaust the require chain. + if (previousRequire) { + return previousRequire(name, true); + } + + // Try the node require function if it exists. + if (nodeRequire && typeof name === 'string') { + return nodeRequire(name); + } + + var err = new Error('Cannot find module \'' + name + '\''); + err.code = 'MODULE_NOT_FOUND'; + throw err; + } + + localRequire.resolve = resolve; + + var module = cache[name] = new newRequire.Module(name); + + modules[name][0].call(module.exports, localRequire, module, module.exports, this); + } + + return cache[name].exports; + + function localRequire(x){ + return newRequire(localRequire.resolve(x)); + } + + function resolve(x){ + return modules[name][1][x] || x; + } + } + + function Module(moduleName) { + this.id = moduleName; + this.bundle = newRequire; + this.exports = {}; + } + + newRequire.isParcelRequire = true; + newRequire.Module = Module; + newRequire.modules = modules; + newRequire.cache = cache; + newRequire.parent = previousRequire; + newRequire.register = function (id, exports) { + modules[id] = [function (require, module) { + module.exports = exports; + }, {}]; + }; + + for (var i = 0; i < entry.length; i++) { + newRequire(entry[i]); + } + + if (entry.length) { + // Expose entry point to Node, AMD or browser globals + // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js + var mainExports = newRequire(entry[entry.length - 1]); + + // CommonJS + if (typeof exports === "object" && typeof module !== "undefined") { + module.exports = mainExports; + + // RequireJS + } else if (typeof define === "function" && define.amd) { + define(function () { + return mainExports; + }); + + // {% endassets %} diff --git a/templates/components.html b/templates/components.html deleted file mode 100644 index a9b566cd..00000000 --- a/templates/components.html +++ /dev/null @@ -1,145 +0,0 @@ -{% macro Icon(name, classes="") -%} - {% autoescape false %} - - {% endautoescape %} -{%- endmacro %} - -{% macro SidenavItem(label, href, active=False, icon=None, subnav=None) -%} -
  • - - {% if icon %} - {{ Icon(icon, classes="sidenav__link-icon") }} - {% endif %} - - {{label}} - - - {% if subnav and active %} - - {% endif %} -
  • -{%- endmacro %} - -{% macro Modal() -%} - -{%- endmacro %} - -{% macro EmptyState(message, actionLabel, actionHref, icon=None) -%} -
    -

    {{ message }}

    - - {% if icon %} - {{ Icon(icon) }} - {% endif %} - - {{ actionLabel }} -
    -{%- endmacro %} - -{% macro Alert(title, message=None, actions=None, level='info') -%} -{% set role = 'alertdialog' if actions else 'alert' %} -{% set levels = { - 'warning': { - 'icon': 'alert', - 'tone': 'assertive' - }, - 'error': { - 'icon': 'alert', - 'tone': 'assertive' - }, - 'info': { - 'icon': 'info', - 'tone': 'polite' - }, - 'success': { - 'icon': 'ok', - 'tone': 'polite' - } -} %} - -
    - {{ Icon(levels.get(level).get('icon'), classes='alert__icon icon--large') }} - -
    -

    {{title}}

    - - {% if message %} -
    {{ message | safe }}
    - {% endif %} - - {% if actions %} -
    {{ actions | safe }}
    - {% endif %} -
    -
    -{%- endmacro %} - -{% macro TextInput(field, placeholder='') -%} -
    - - - {{ field(placeholder=placeholder) | safe }} - - {% if field.errors %} - {% for error in field.errors %} - {{ error }} - {% endfor %} - {% endif %} -
    -{%- endmacro %} - -{% macro OptionsInput(field, inline=False) -%} -
    - -
    - - {{ field.label }} - - {% if field.description %} - {{ field.description | safe }} - {% endif %} - - {% if field.errors %} - {{ Icon('alert') }} - {% endif %} - - - {{ field() }} - - {% if field.errors %} - {% for error in field.errors %} - {{ error }} - {% endfor %} - {% endif %} - -
    -
    - -{%- endmacro %} diff --git a/templates/components/alert.html b/templates/components/alert.html new file mode 100644 index 00000000..d3385d1d --- /dev/null +++ b/templates/components/alert.html @@ -0,0 +1,39 @@ +{% from "components/icon.html" import Icon %} + +{% macro Alert(title, message=None, actions=None, level='info') -%} + {% set role = 'alertdialog' if actions else 'alert' %} + {% set levels = { + 'warning': { + 'icon': 'alert', + 'tone': 'assertive' + }, + 'error': { + 'icon': 'alert', + 'tone': 'assertive' + }, + 'info': { + 'icon': 'info', + 'tone': 'polite' + }, + 'success': { + 'icon': 'ok', + 'tone': 'polite' + } + } %} + +
    + {{ Icon(levels.get(level).get('icon'), classes='alert__icon icon--large') }} + +
    +

    {{title}}

    + + {% if message %} +
    {{ message | safe }}
    + {% endif %} + + {% if actions %} +
    {{ actions | safe }}
    + {% endif %} +
    +
    +{%- endmacro %} diff --git a/templates/components/alert.html.to b/templates/components/alert.html.to deleted file mode 100644 index 05cac613..00000000 --- a/templates/components/alert.html.to +++ /dev/null @@ -1,35 +0,0 @@ -{% set role = 'alertdialog' if actions else 'alert' %} -{% set levels = { - 'warning': { - 'icon': 'alert', - 'tone': 'assertive' - }, - 'error': { - 'icon': 'alert', - 'tone': 'assertive' - }, - 'info': { - 'icon': 'info', - 'tone': 'polite' - }, - 'success': { - 'icon': 'ok', - 'tone': 'polite' - } -} %} - -
    - {% module Icon(levels.get(level).get('icon'), classes='alert__icon icon--large') %} - -
    -

    {{title}}

    - - {% if message %} -
    {% raw message %}
    - {% end %} - - {% if actions %} -
    {% raw actions %}
    - {% end %} -
    -
    diff --git a/templates/components/empty_state.html b/templates/components/empty_state.html new file mode 100644 index 00000000..7dc6f119 --- /dev/null +++ b/templates/components/empty_state.html @@ -0,0 +1,13 @@ +{% from "components/icon.html" import Icon %} + +{% macro EmptyState(message, actionLabel, actionHref, icon=None) -%} +
    +

    {{ message }}

    + + {% if icon %} + {{ Icon(icon) }} + {% endif %} + + {{ actionLabel }} +
    +{%- endmacro %} diff --git a/templates/components/empty_state.html.to b/templates/components/empty_state.html.to deleted file mode 100644 index 30246ddb..00000000 --- a/templates/components/empty_state.html.to +++ /dev/null @@ -1,9 +0,0 @@ -
    -

    {{ message }}

    - - {% if icon %} - {% module Icon(icon) %} - {% end %} - - {{ actionLabel }} -
    diff --git a/templates/components/icon.html b/templates/components/icon.html new file mode 100644 index 00000000..42139e57 --- /dev/null +++ b/templates/components/icon.html @@ -0,0 +1,6 @@ +{% macro Icon(name, classes="") -%} + {% autoescape false %} + + {% endautoescape %} +{%- endmacro %} + diff --git a/templates/components/icon.html.to b/templates/components/icon.html.to deleted file mode 100644 index 99e74b40..00000000 --- a/templates/components/icon.html.to +++ /dev/null @@ -1,2 +0,0 @@ -{% autoescape None %} - diff --git a/templates/components/modal.html b/templates/components/modal.html new file mode 100644 index 00000000..8e483de4 --- /dev/null +++ b/templates/components/modal.html @@ -0,0 +1,9 @@ +{% macro Modal() -%} + +{%- endmacro %} diff --git a/templates/components/modal.html.to b/templates/components/modal.html.to deleted file mode 100644 index 4330adbd..00000000 --- a/templates/components/modal.html.to +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/templates/components/options_input.html b/templates/components/options_input.html new file mode 100644 index 00000000..55342c24 --- /dev/null +++ b/templates/components/options_input.html @@ -0,0 +1,27 @@ +{% macro OptionsInput(field, inline=False) -%} +
    + +
    + + {{ field.label }} + + {% if field.description %} + {{ field.description | safe }} + {% endif %} + + {% if field.errors %} + {{ Icon('alert') }} + {% endif %} + + + {{ field() }} + + {% if field.errors %} + {% for error in field.errors %} + {{ error }} + {% endfor %} + {% endif %} + +
    +
    +{%- endmacro %} diff --git a/templates/components/options_input.html.to b/templates/components/options_input.html.to deleted file mode 100644 index 8a15e041..00000000 --- a/templates/components/options_input.html.to +++ /dev/null @@ -1,25 +0,0 @@ -
    - -
    - - {{ label }} - - {% if description %} - {% raw description %} - {% end %} - - {% if errors %} - {% module Icon('alert') %} - {% end %} - - - {% raw field() %} - - {% if errors %} - {% for error in errors %} - {{ error }} - {% end %} - {% end %} - -
    -
    diff --git a/templates/components/sidenav_item.html b/templates/components/sidenav_item.html new file mode 100644 index 00000000..64f5b765 --- /dev/null +++ b/templates/components/sidenav_item.html @@ -0,0 +1,28 @@ +{% from "components/icon.html" import Icon %} + +{% macro SidenavItem(label, href, active=False, icon=None, subnav=None) -%} +
  • + + {% if icon %} + {{ Icon(icon, classes="sidenav__link-icon") }} + {% endif %} + + {{label}} + + + {% if subnav and active %} + + {% endif %} +
  • +{%- endmacro %} diff --git a/templates/components/text_input.html b/templates/components/text_input.html new file mode 100644 index 00000000..0f50ca89 --- /dev/null +++ b/templates/components/text_input.html @@ -0,0 +1,23 @@ +{% macro TextInput(field, placeholder='') -%} +
    + + + {{ field(placeholder=placeholder) | safe }} + + {% if field.errors %} + {% for error in field.errors %} + {{ error }} + {% endfor %} + {% endif %} +
    +{%- endmacro %} diff --git a/templates/components/text_input.html.to b/templates/components/text_input.html.to deleted file mode 100644 index 2a800abc..00000000 --- a/templates/components/text_input.html.to +++ /dev/null @@ -1,21 +0,0 @@ -
    - - - {% raw field(placeholder=placeholder) %} - - {% if errors %} - {% for error in errors %} - {{ error }} - {% end %} - {% end %} -
    diff --git a/templates/member_edit.html.to b/templates/member_edit.html.to index d454152c..fbe92f35 100644 --- a/templates/member_edit.html.to +++ b/templates/member_edit.html.to @@ -1,5 +1,7 @@ {% extends "base_workspace.html.to" %} +{% from "components/alert.html" import Alert %} + {% block template_vars %} {% set is_new_member = False %} {% set member_name = "Danny Knight" %} @@ -10,11 +12,12 @@ {% block workspace_content %} -{% module Alert( +{{ Alert( "UI Mock", message="

    Please note, this screen is a non-functional UI mockup.

    ", level="info" - ) %} + ) +}}
    diff --git a/templates/navigation/_sidenav_item.html.to b/templates/navigation/_sidenav_item.html.to deleted file mode 100644 index 888245bc..00000000 --- a/templates/navigation/_sidenav_item.html.to +++ /dev/null @@ -1,24 +0,0 @@ -
  • - - {% if icon %} - {% module Icon(icon, classes="sidenav__link-icon") %} - {% end %} - - {{label}} - - - {% if subnav and active %} - - {% end %} -
  • diff --git a/templates/navigation/global_navigation.html b/templates/navigation/global_navigation.html index 594bf574..79728185 100644 --- a/templates/navigation/global_navigation.html +++ b/templates/navigation/global_navigation.html @@ -1,4 +1,5 @@ -{% from "components.html" import SidenavItem %} +{% from "components/sidenav_item.html" import SidenavItem %} +