Stuff to document: cards, avatar groups, …
Typography
H1 headline
H2 headline
H3 headline
H4 headline
A paragraph of regular text with a link, a few words in bold and even some italics. Secondary text can also be dimmed.
h1 H1 headline
h2 H2 headline
h3 H3 headline
h4 H4 headline
p A paragraph of regular text with
a(href="#") a link
|,
b a few words in bold
| and
i even some italics
|.
span.text-secondary Secondary text can also be dimmed.
Media queries & breakpoints
These are the defined breakpoints:
$mobile: 375px
$mobile-large: 400px
$mobile-wide: 576px
$tablet: 768px
$tablet-wide: 992px
$desktop: 1200px
$desktop-large: 1400px
Media queries exist for each breakpoint as $min-… (min-width) and $max-… (max-width) variations, used like this:
div
@media ($min-tablet)
// min-width: 768px
@media ($max-tablet)
// max-width: 767px (breakpoint - 1)
Grids
A simple 12-column flexbox grid, allowing you to use whatever elements you want. Use the .col-* classes to set specific sizes, or .col-shrink to make a column shrink to its contents. Apply .align-center to the .grid to vertically center the columns, or .grid-tight to use a smaller gap between columns. By default, grid columns get a bottom margin, which you can disable by setting .inline on the .grid.
.grid
div
div
div
.grid.grid-tight
div
div
div
div
.grid
.col-4
.col-8
.grid
div
.col-3
.col-2
.grid
div
.col-shrink
Forms
Following the Bootstrap conventions, these components and classes are available:
form
.form-group
label.form-label(for="exampleInput") Text input
input.form-control#exampleInput(type="text" aria-describedby="exampleInputHelp" placeholder="Optional placeholder")
.form-text#exampleInputHelp Optional help text
.form-group
label.form-label(for="exampleTextarea") Textarea
textarea.form-control#exampleTextarea(placeholder="Optional placeholder" rows="3")
.validation-message
+icon("error")
| Validation error text
.form-group
label.form-label(for="exampleSelect") Select
select.form-select#exampleSelect(aria-label="Default select example")
option(selected) A select menu
option(value="1") One
option(value="2") Two
option(value="3") Three
.form-group
label.form-label(for="exampleFileInput") File input
input.form-control#exampleFileInput(type="file")
.form-group
label.form-label(for="exampleDisabledInput") Disabled text input
input.form-control#exampleDisabledInput(type="text" disabled value="This input is disabled")
.form-group
label.form-label(for="exampleRange") Range slider
input#exampleRange(type="range" min="0" max="100" value="50")
There are also small and large form controls.
.form-group
input.form-control.form-control-sm(type="text" value="This is an input with class .form-control-sm")
.form-group
input.form-control.form-control-lg(type="text" value="This is an input with class .form-control-lg")
.form-group
select.form-select.form-control-sm
option(selected) A small select menu
Input groups
Use input groups to combine inputs with icons, text, …
.form-group
.input-group.form-control-lg
.input-group-text
+icon("action")
select.form-select
option(selected) Choose an action
.form-group
.input-group
.input-group-text €
input.form-control(type="text" placeholder="Value")
.form-group
.input-group
.input-group-text
+icon("user")
input.form-control(type="text" placeholder="username")
.input-group-text @example.com
Checkboxes & radio buttons
.grid
.form-group
.form-label Checkboxes
label.form-check
input.form-check-input(type="checkbox" checked)
.form-check-label Option
label.form-check
input.form-check-input(type="checkbox")
.form-check-label Option
label.form-check
input.form-check-input(type="checkbox" disabled)
.form-check-label Disabled option
.form-group
.form-label Switches
label.form-check
input.form-switch-input(type="checkbox" checked)
.form-check-label Option
label.form-check
input.form-switch-input(type="checkbox")
.form-check-label Option
label.form-check
input.form-switch-input(type="checkbox" disabled)
.form-check-label Disabled option
.form-group
.form-label Radio buttons
label.form-check
input.form-radio-input(type="radio" name="styleguideRadios" checked)
.form-check-label Option
label.form-check
input.form-radio-input(type="radio" name="styleguideRadios")
.form-check-label Option
label.form-check
input.form-radio-input(type="radio" name="styleguideRadios" disabled)
.form-check-label Disabled option
Buttons
button.btn(type="button") Button
a.btn(href="#") Link button
button.btn.btn-secondary(type="button") Secondary button
button.btn.btn-gradient(type="button") Gradient button
button.btn.btn-destructive(type="button") Destructive button
button.btn(type="button" disabled) Disabled button
button.btn.btn-sm(type="button") Small button
button.btn.btn-lg(type="button") Large button
button.btn.btn-loading(type="button") Loading button
Form layout
Use grids to layout forms.
.grid
.form-group
label.form-label(for="exampleLayout1") Username
input.form-control#exampleLayout1(type="email" placeholder="Email address")
.form-group
label.form-label(for="exampleLayout2") Password
input.form-control#exampleLayout2(type="password")
.form-group
label.form-label(for="exampleLayout3") Address
input.form-control#exampleLayout3(type="address" placeholder="Full address")
input.btn(type="submit" value="Submit")Pill navigation
Standard component for tabbed navigation.
ul.nav-pills
li: a(href="#") One
li: a(href="#") Two
li: .active(aria-current="page") Three
li: a(href="#") FourList groups
Use a .list-group for all kinds of item lists.
.grid.inline
.list-group.col-4
h3 Toggle list
label.list-group-item
.graphic
+icon("portfolio")
.list-group-content
| Portfolio
input.form-switch-input(type="checkbox")
label.list-group-item
.graphic
+icon("action")
.list-group-content
| Actions
input.form-switch-input(type="checkbox")
label.list-group-item
.graphic
+icon("violations")
.list-group-content
| Violations
input.form-switch-input(type="checkbox" checked)
.list-group.col-4
h3 Person list
label.list-group-item
.graphic: +avatar("https://i.pravatar.cc/150?u=1")
.list-group-content
.list-group-person
.name Some name
.role Some role
input.form-check-input(type="checkbox" checked)
label.list-group-item
.graphic: +avatar("https://i.pravatar.cc/150?u=2")
.list-group-content
.list-group-person
.name Another Name
.role Some role
input.form-check-input(type="checkbox")
label.list-group-item
.graphic: +avatar("https://i.pravatar.cc/150?u=3")
.list-group-content
.list-group-person
.name Another Name
.role Some role
input.form-check-input(type="checkbox")
.list-group.col-4
h3 List with actions and sorting
.list-group-item
.list-group-action.list-group-drag
+icon("drag")
.list-group-content
.list-group-text Item 1
a.list-group-action(href="#")
+icon("edit")
a.list-group-action(href="#")
+icon("trash")
.list-group-item
.list-group-action.list-group-drag
+icon("drag")
.list-group-content
.list-group-text Item 2
a.list-group-action(href="#")
+icon("edit")
a.list-group-action(href="#")
+icon("trash")
a.list-group-item(href="#")
.list-group-action
+icon("add")
.list-group-content
.list-group-text Add item
Icons
The icons are a mix of custom icons and Bootstrap icons. The SVGs are injected straight into the HTML. All SVGs should be 16px × 16px, with a 0 0 16 16 viewbox. By default icons have aria-hidden="true", but if you use an icon by itself without any text label, you should provide a label to the mixin.
- action-active
- action-badge
- action-closed
- action-committed
- action-done
- action-draft
- action-hold
- action-new
- action-none
- action-proposal
- action-shape
- action
- add
- check-circle
- check
- chevron-down
- chevron-left
- chevron-right
- chevron-up
- circle
- close-circle
- close
- comment
- configure
- confirmed
- cost
- customer
- dashboard
- data
- date-due
- delta-down
- delta-flat
- delta-up
- download
- drag
- edit
- error
- evolution
- exception
- freshness-error
- freshness-ok
- help
- icon-missing
- info
- item-status
- kpi
- list
- more
- next
- nine-cell
- none
- palette
- portfolio
- previous
- product
- proposal
- search
- select
- settings
- sub-action
- task
- timeframe
- trash
- tree
- user
- view-discard
- view-new
- view-save
- violation-actioned
- violation-badge
- violation-dismissed
- violation-new
- violation-shape
- violation
- warning
- action-active
- action-badge
- action-closed
- action-committed
- action-done
- action-draft
- action-hold
- action-new
- action-none
- action-proposal
- action-shape
- action
- add
- check-circle
- check
- chevron-down
- chevron-left
- chevron-right
- chevron-up
- circle
- close-circle
- close
- comment
- configure
- confirmed
- cost
- customer
- dashboard
- data
- date-due
- delta-down
- delta-flat
- delta-up
- download
- drag
- edit
- error
- evolution
- exception
- freshness-error
- freshness-ok
- help
- icon-missing
- info
- item-status
- kpi
- list
- more
- next
- nine-cell
- none
- palette
- portfolio
- previous
- product
- proposal
- search
- select
- settings
- sub-action
- task
- timeframe
- trash
- tree
- user
- view-discard
- view-new
- view-save
- violation-actioned
- violation-badge
- violation-dismissed
- violation-new
- violation-shape
- violation
- warning
Loading spinner
For loading animations, use a .btn-loading button, or just drop a .loading class on any empty element.
p: button.btn.btn-loading(type="button") Loading button
.loading Optional message…Empty state
When no content is available, use this class to indicate that.
.empty-state No agenda items
Optionally you can use an icon too.
.empty-state No open actions. You're all set!
.empty-state-icon 🍻Toasts
Toasts are lightweight notifications, and mostly follow Bootstrap conventions. They can be shown inline, or called with Javascript and shown fixed in the bottom right corner of the viewport.
+toast.show(true)(data-bs-autohide="false") Generic inline toast.
+toast.success.show(true)(data-bs-autohide="false") Success message toast.
+toast.error.show(true)(data-bs-autohide="false")
+icon.toast-icon("error")
| Error message toast with an icon.
+toast.warning.show(true)(data-bs-autohide="false") Warning message toast with a link.
button.btn.toastTrigger(type="button" data-target="#liveToast") Show live toast
+toast.success#liveToast(data-bs-autohide="false") Succesfully triggered live toast!Dialogs
There are 3 types of modal dialogs: simple popup boxes for prompts, sidebar popovers for settings, and full-page overlay panels for detail views.
Open popupOpen popoverOpen overlay
Tooltips
Slap a tooltip on it with data-tooltip="[Text goes here]", and optionally place them with data-placement.
p
button.btn(data-tooltip="Tooltip") Tooltip on top (default)
button.btn(data-tooltip="Tooltip" data-placement="bottom") Tooltip on bottom
button.btn(data-tooltip="Tooltip" data-placement="left") Tooltip on left
button.btn(data-tooltip="Tooltip" data-placement="right") Tooltip on right
p
button.btn(data-tooltip="Tooltip" data-placement="top-end") Tooltip on top-end
button.btn(data-tooltip="Tooltip" data-placement="bottom-end") Tooltip on bottom-end
button.btn(data-tooltip="Tooltip" data-placement="top-start") Tooltip on top-start
button.btn(data-tooltip="Tooltip" data-placement="bottom-start") Tooltip on bottom-start