This commit is contained in:
2018-05-28 13:01:13 +02:00
parent 906f96a15e
commit 2de92c908b
163 changed files with 13425 additions and 79 deletions
@@ -0,0 +1,17 @@
// Variables and mixins
@import "spectre/variables";
@import "spectre/mixins";
/*! Spectre.css Experimentals v#{$version} | MIT License | github.com/picturepan2/spectre */
// Experimentals
@import "spectre/autocomplete";
@import "spectre/calendars";
@import "spectre/carousels";
@import "spectre/comparison-sliders";
@import "spectre/filters";
@import "spectre/meters";
@import "spectre/off-canvas";
@import "spectre/parallax";
@import "spectre/progress";
@import "spectre/sliders";
@import "spectre/timelines";
@@ -0,0 +1,10 @@
// Variables and mixins
@import "spectre/variables";
@import "spectre/mixins";
/*! Spectre.css Icons v#{$version} | MIT License | github.com/picturepan2/spectre */
// Icons
@import "spectre/icons/icons-core";
@import "spectre/icons/icons-navigation";
@import "spectre/icons/icons-action";
@import "spectre/icons/icons-object";
@@ -0,0 +1,59 @@
// Variables and mixins
@import "spectre/variables";
@import "spectre/mixins";
/*! Spectre.css v#{$version} | MIT License | github.com/picturepan2/spectre */
// Reset and dependencies
@import "spectre/normalize";
@import "spectre/base";
// Elements
@import "spectre/typography";
@import "spectre/asian";
@import "spectre/tables";
@import "spectre/buttons";
@import "spectre/forms";
@import "spectre/labels";
@import "spectre/codes";
@import "spectre/media";
// Layout
@import "spectre/layout";
@import "spectre/navbar";
// Components
@import "spectre/accordions";
@import "spectre/autocomplete";
@import "spectre/avatars";
@import "spectre/badges";
@import "spectre/breadcrumbs";
@import "spectre/bars";
@import "spectre/cards";
@import "spectre/chips";
@import "spectre/dropdowns";
@import "spectre/empty";
@import "spectre/menus";
@import "spectre/modals";
@import "spectre/navs";
@import "spectre/pagination";
@import "spectre/panels";
@import "spectre/popovers";
@import "spectre/steps";
@import "spectre/tabs";
@import "spectre/tiles";
@import "spectre/toasts";
@import "spectre/tooltips";
// Utility classes
@import "spectre/animations";
@import "spectre/utilities";
// Extras
.search-input {
@extend .form-input;
}
.button {
@extend .btn;
}
@@ -0,0 +1,316 @@
// Icon resize
.icon-resize-horiz,
.icon-resize-vert {
&::before,
&::after {
border: $icon-border-width solid currentColor;
border-bottom: 0;
border-right: 0;
content: "";
height: .45em;
width: .45em;
}
&::before {
transform: translate(-50%, -90%) rotate(45deg);
}
&::after {
transform: translate(-50%, -10%) rotate(225deg);
}
}
.icon-resize-horiz {
&::before {
transform: translate(-90%, -50%) rotate(-45deg);
}
&::after {
transform: translate(-10%, -50%) rotate(135deg);
}
}
// Icon more
.icon-more-horiz,
.icon-more-vert {
&::before {
background: currentColor;
box-shadow: -.4em 0, .4em 0;
border-radius: 50%;
content: "";
height: 3px;
width: 3px;
}
}
.icon-more-vert {
&::before {
box-shadow: 0 -.4em, 0 .4em;
}
}
// Icon plus, minus, cross
.icon-plus,
.icon-minus,
.icon-cross {
&::before {
background: currentColor;
content: "";
height: $icon-border-width;
width: 100%;
}
}
.icon-plus,
.icon-cross {
&::after {
background: currentColor;
content: "";
height: 100%;
width: $icon-border-width;
}
}
.icon-cross {
&::before {
width: 100%;
}
&::after {
height: 100%;
}
&::before,
&::after {
transform: translate(-50%, -50%) rotate(45deg);
}
}
// Icon check
.icon-check {
&::before {
border: $icon-border-width solid currentColor;
border-right: 0;
border-top: 0;
content: "";
height: .5em;
width: .9em;
transform: translate(-50%, -75%) rotate(-45deg);
}
}
// Icon stop
.icon-stop {
border: $icon-border-width solid currentColor;
border-radius: 50%;
&::before {
background: currentColor;
content: "";
height: $icon-border-width;
transform: translate(-50%, -50%) rotate(45deg);
width: 1em;
}
}
// Icon shutdown
.icon-shutdown {
border: $icon-border-width solid currentColor;
border-radius: 50%;
border-top-color: transparent;
&::before {
background: currentColor;
content: "";
height: .5em;
top: .1em;
width: $icon-border-width;
}
}
// Icon refresh
.icon-refresh {
&::before {
border: $icon-border-width solid currentColor;
border-radius: 50%;
border-right-color: transparent;
content: "";
height: 1em;
width: 1em;
}
&::after {
border: .2em solid currentColor;
border-top-color: transparent;
border-left-color: transparent;
content: "";
height: 0;
left: 80%;
top: 20%;
width: 0;
}
}
// Icon search
.icon-search {
&::before {
border: $icon-border-width solid currentColor;
border-radius: 50%;
content: "";
height: .75em;
left: 5%;
top: 5%;
transform: translate(0, 0) rotate(45deg);
width: .75em;
}
&::after {
background: currentColor;
content: "";
height: $icon-border-width;
left: 80%;
top: 80%;
transform: translate(-50%, -50%) rotate(45deg);
width: .4em;
}
}
// Icon edit
.icon-edit {
&::before {
border: $icon-border-width solid currentColor;
content: "";
height: .4em;
transform: translate(-40%, -60%) rotate(-45deg);
width: .85em;
}
&::after {
border: .15em solid currentColor;
border-top-color: transparent;
border-right-color: transparent;
content: "";
height: 0;
left: 5%;
top: 95%;
transform: translate(0, -100%);
width: 0;
}
}
// Icon delete
.icon-delete {
&::before {
border: $icon-border-width solid currentColor;
border-bottom-left-radius: $border-radius;
border-bottom-right-radius: $border-radius;
border-top: 0;
content: "";
height: .75em;
top: 60%;
width: .75em;
}
&::after {
background: currentColor;
box-shadow: -.25em .2em, .25em .2em;
content: "";
height: $icon-border-width;
top: $icon-border-width/2;
width: .5em;
}
}
// Icon share
.icon-share {
border: $icon-border-width solid currentColor;
border-radius: $border-radius;
border-right: 0;
border-top: 0;
&::before {
border: $icon-border-width solid currentColor;
border-left: 0;
border-top: 0;
content: "";
height: .4em;
left: 100%;
top: .25em;
transform: translate(-125%, -50%) rotate(-45deg);
width: .4em;
}
&::after {
border: $icon-border-width solid currentColor;
border-bottom: 0;
border-right: 0;
border-radius: 75% 0;
content: "";
height: .5em;
width: .6em;
}
}
// Icon flag
.icon-flag {
&::before {
background: currentColor;
content: "";
height: 1em;
left: 15%;
width: $icon-border-width;
}
&::after {
border: $icon-border-width solid currentColor;
border-bottom-right-radius: $border-radius;
border-left: 0;
border-top-right-radius: $border-radius;
content: "";
height: .65em;
top: 35%;
left: 60%;
width: .8em;
}
}
// Icon bookmark
.icon-bookmark {
&::before {
border: $icon-border-width solid currentColor;
border-bottom: 0;
border-top-left-radius: $border-radius;
border-top-right-radius: $border-radius;
content: "";
height: .9em;
width: .8em;
}
&::after {
border: $icon-border-width solid currentColor;
border-bottom: 0;
border-left: 0;
border-radius: $border-radius;
content: "";
height: .5em;
transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg);
width: .5em;
}
}
// Icon download & upload
.icon-download,
.icon-upload {
border-bottom: $icon-border-width solid currentColor;
&::before {
border: $icon-border-width solid currentColor;
border-bottom: 0;
border-right: 0;
content: "";
height: .5em;
width: .5em;
transform: translate(-50%, -60%) rotate(-135deg);
}
&::after {
background: currentColor;
content: "";
height: .6em;
top: 40%;
width: $icon-border-width;
}
}
.icon-upload {
&::before {
transform: translate(-50%, -60%) rotate(45deg);
}
&::after {
top: 50%;
}
}
@@ -0,0 +1,53 @@
// Icon variables
$icon-border-width: $border-width-lg;
$icon-prefix: "icon";
// Icon base style
.#{$icon-prefix} {
box-sizing: border-box;
display: inline-block;
font-size: inherit;
font-style: normal;
height: 1em;
position: relative;
text-indent: -9999px;
vertical-align: middle;
width: 1em;
&::before,
&::after {
display: block;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
}
// Icon sizes
&.icon-2x {
font-size: 1.6rem;
}
&.icon-3x {
font-size: 2.4rem;
}
&.icon-4x {
font-size: 3.2rem;
}
}
// Component icon support
.accordion,
.btn,
.toast,
.menu {
.#{$icon-prefix} {
vertical-align: -10%;
}
}
.btn-lg {
.#{$icon-prefix} {
vertical-align: -15%;
}
}
@@ -0,0 +1,133 @@
// Icon arrows
.icon-arrow-down,
.icon-arrow-left,
.icon-arrow-right,
.icon-arrow-up,
.icon-downward,
.icon-back,
.icon-forward,
.icon-upward {
&::before {
border: $icon-border-width solid currentColor;
border-bottom: 0;
border-right: 0;
content: "";
height: .65em;
width: .65em;
}
}
.icon-arrow-down {
&::before {
transform: translate(-50%, -75%) rotate(225deg);
}
}
.icon-arrow-left {
&::before {
transform: translate(-25%, -50%) rotate(-45deg);
}
}
.icon-arrow-right {
&::before {
transform: translate(-75%, -50%) rotate(135deg);
}
}
.icon-arrow-up {
&::before {
transform: translate(-50%, -25%) rotate(45deg);
}
}
.icon-back,
.icon-forward {
&::after {
background: currentColor;
content: "";
height: $icon-border-width;
width: .8em;
}
}
.icon-downward,
.icon-upward {
&::after {
background: currentColor;
content: "";
height: .8em;
width: $icon-border-width;
}
}
.icon-back {
&::after {
left: 55%;
}
&::before {
transform: translate(-50%, -50%) rotate(-45deg);
}
}
.icon-downward {
&::after {
top: 45%;
}
&::before {
transform: translate(-50%, -50%) rotate(-135deg);
}
}
.icon-forward {
&::after {
left: 45%;
}
&::before {
transform: translate(-50%, -50%) rotate(135deg);
}
}
.icon-upward {
&::after {
top: 55%;
}
&::before {
transform: translate(-50%, -50%) rotate(45deg);
}
}
// Icon caret
.icon-caret {
&::before {
border-top: .3em solid currentColor;
border-right: .3em solid transparent;
border-left: .3em solid transparent;
content: "";
height: 0;
transform: translate(-50%, -25%);
width: 0;
}
}
// Icon menu
.icon-menu {
&::before {
background: currentColor;
box-shadow: 0 -.35em, 0 .35em;
content: "";
height: $icon-border-width;
width: 100%;
}
}
// Icon apps
.icon-apps {
&::before {
background: currentColor;
box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em;
content: "";
height: 3px;
width: 3px;
}
}
@@ -0,0 +1,176 @@
// Icon time
.icon-time {
border: $icon-border-width solid currentColor;
border-radius: 50%;
&::before {
background: currentColor;
content: "";
height: .4em;
transform: translate(-50%, -75%);
width: $icon-border-width;
}
&::after {
background: currentColor;
content: "";
height: .3em;
transform: translate(-50%, -75%) rotate(90deg);
transform-origin: 50% 90%;
width: $icon-border-width;
}
}
// Icon mail
.icon-mail {
&::before {
border: $icon-border-width solid currentColor;
border-radius: $border-radius;
content: "";
height: .8em;
width: 1em;
}
&::after {
border: $icon-border-width solid currentColor;
border-right: 0;
border-top: 0;
content: "";
height: .5em;
transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg);
width: .5em;
}
}
// Icon people
.icon-people {
&::before {
border: $icon-border-width solid currentColor;
border-radius: 50%;
content: "";
height: .45em;
top: 25%;
width: .45em;
}
&::after {
border: $icon-border-width solid currentColor;
border-radius: 50% 50% 0 0;
content: "";
height: .4em;
top: 75%;
width: .9em;
}
}
// Icon message
.icon-message {
border: $icon-border-width solid currentColor;
border-bottom: 0;
border-radius: $border-radius;
border-right: 0;
&::before {
border: $icon-border-width solid currentColor;
border-bottom-right-radius: $border-radius;
border-left: 0;
border-top: 0;
content: "";
height: .8em;
left: 65%;
top: 40%;
width: .7em;
}
&::after {
background: currentColor;
border-radius: $border-radius;
content: "";
height: .3em;
left: 10%;
top: 100%;
transform: translate(0, -90%) rotate(45deg);
width: $icon-border-width;
}
}
// Icon photo
.icon-photo {
border: $icon-border-width solid currentColor;
border-radius: $border-radius;
&::before {
border: $icon-border-width solid currentColor;
border-radius: 50%;
content: "";
height: .25em;
left: 35%;
top: 35%;
width: .25em;
}
&::after {
border: $icon-border-width solid currentColor;
border-bottom: 0;
border-left: 0;
content: "";
height: .5em;
left: 60%;
transform: translate(-50%, 25%) rotate(-45deg);
width: .5em;
}
}
// Icon link
.icon-link {
&::before,
&::after {
border: $icon-border-width solid currentColor;
border-radius: 5em 0 0 5em;
border-right: 0;
content: "";
height: .5em;
width: .75em;
}
&::before {
transform: translate(-70%, -45%) rotate(-45deg);
}
&::after {
transform: translate(-30%, -55%) rotate(135deg);
}
}
// Icon location
.icon-location {
&::before {
border: $icon-border-width solid currentColor;
border-radius: 50% 50% 50% 0;
content: "";
height: .8em;
transform: translate(-50%, -60%) rotate(-45deg);
width: .8em;
}
&::after {
border: $icon-border-width solid currentColor;
border-radius: 50%;
content: "";
height: .2em;
transform: translate(-50%, -80%);
width: .2em;
}
}
// Icon emoji
.icon-emoji {
border: $icon-border-width solid currentColor;
border-radius: 50%;
&::before {
border-radius: 50%;
box-shadow: -.17em -.15em, .17em -.15em;
content: "";
height: .1em;
width: .1em;
}
&::after {
border: $icon-border-width solid currentColor;
border-bottom-color: transparent;
border-radius: 50%;
border-right-color: transparent;
content: "";
height: .5em;
transform: translate(-50%, -40%) rotate(-135deg);
width: .5em;
}
}
@@ -0,0 +1,6 @@
// Avatar mixin
@mixin avatar-base($size: $unit-8) {
font-size: $size / 2;
height: $size;
width: $size;
}
@@ -0,0 +1,54 @@
// Button variant mixin
@mixin button-variant($color: $primary-color) {
background: $color;
border-color: darken($color, 3%);
color: $light-color;
&:focus {
@include control-shadow($color);
}
&:focus,
&:hover {
background: darken($color, 2%);
border-color: darken($color, 5%);
color: $light-color;
}
&:active,
&.active {
background: darken($color, 7%);
border-color: darken($color, 10%);
color: $light-color;
}
&.loading {
&::after {
border-bottom-color: $light-color;
border-left-color: $light-color;
}
}
}
@mixin button-outline-variant($color: $primary-color) {
background: $light-color;
border-color: $color;
color: $color;
&:focus {
@include control-shadow($color);
}
&:focus,
&:hover {
background: lighten($color, 50%);
border-color: darken($color, 2%);
color: $color;
}
&:active,
&.active {
background: $color;
border-color: darken($color, 5%);
color: $light-color;
}
&.loading {
&::after {
border-bottom-color: $color;
border-left-color: $color;
}
}
}
@@ -0,0 +1,8 @@
// Clearfix mixin
@mixin clearfix() {
&::after {
clear: both;
content: "";
display: table;
}
}
@@ -0,0 +1,24 @@
// Background color utility mixin
@mixin bg-color-variant($name: ".bg-primary", $color: $primary-color) {
#{$name} {
background: $color;
@if (lightness($color) < 60) {
color: $light-color;
}
}
}
// Text color utility mixin
@mixin text-color-variant($name: ".text-primary", $color: $primary-color) {
#{$name} {
color: $color;
}
a#{$name} {
&:focus,
&:hover {
color: darken($color, 5%);
}
}
}
@@ -0,0 +1,11 @@
// Label base style
@mixin label-base() {
border-radius: $border-radius;
line-height: 1.2;
padding: .1rem .15rem;
}
@mixin label-variant($color: $light-color, $bg-color: $primary-color) {
background: $bg-color;
color: $color;
}
@@ -0,0 +1,65 @@
// Margin utility mixin
@mixin margin-variant($id: 1, $size: $unit-1) {
.m-#{$id} {
margin: $size;
}
.mb-#{$id} {
margin-bottom: $size;
}
.ml-#{$id} {
margin-left: $size;
}
.mr-#{$id} {
margin-right: $size;
}
.mt-#{$id} {
margin-top: $size;
}
.mx-#{$id} {
margin-left: $size;
margin-right: $size;
}
.my-#{$id} {
margin-bottom: $size;
margin-top: $size;
}
}
// Padding utility mixin
@mixin padding-variant($id: 1, $size: $unit-1) {
.p-#{$id} {
padding: $size;
}
.pb-#{$id} {
padding-bottom: $size;
}
.pl-#{$id} {
padding-left: $size;
}
.pr-#{$id} {
padding-right: $size;
}
.pt-#{$id} {
padding-top: $size;
}
.px-#{$id} {
padding-left: $size;
padding-right: $size;
}
.py-#{$id} {
padding-bottom: $size;
padding-top: $size;
}
}
@@ -0,0 +1,9 @@
// Component focus shadow
@mixin control-shadow($color: $primary-color) {
box-shadow: 0 0 0 .1rem rgba($color, .2);
}
// Shadow mixin
@mixin shadow-variant($offset) {
box-shadow: 0 $offset ($offset + .05rem) * 2 rgba($dark-color, .3);
}
@@ -0,0 +1,6 @@
// Text Ellipsis
@mixin text-ellipsis() {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@@ -0,0 +1,5 @@
// Toast variant mixin
@mixin toast-variant($color: $dark-color) {
background: rgba($color, .9);
border-color: $color;
}
@@ -0,0 +1,4 @@
// Component transition
@mixin control-transition() {
transition: all .2s ease;
}
@@ -0,0 +1,29 @@
// Text colors
@include text-color-variant(".text-primary", $primary-color);
@include text-color-variant(".text-secondary", $secondary-color-dark);
@include text-color-variant(".text-gray", $gray-color);
@include text-color-variant(".text-light", $light-color);
@include text-color-variant(".text-success", $success-color);
@include text-color-variant(".text-warning", $warning-color);
@include text-color-variant(".text-error", $error-color);
// Background colors
@include bg-color-variant(".bg-primary", $primary-color);
@include bg-color-variant(".bg-secondary", $secondary-color);
@include bg-color-variant(".bg-dark", $dark-color);
@include bg-color-variant(".bg-gray", $bg-color);
@include bg-color-variant(".bg-success", $success-color);
@include bg-color-variant(".bg-warning", $warning-color);
@include bg-color-variant(".bg-error", $error-color);
@@ -0,0 +1,24 @@
// Cursors
.c-hand {
cursor: pointer;
}
.c-move {
cursor: move;
}
.c-zoom-in {
cursor: zoom-in;
}
.c-zoom-out {
cursor: zoom-out;
}
.c-not-allowed {
cursor: not-allowed;
}
.c-auto {
cursor: auto;
}
@@ -0,0 +1,44 @@
// Display
.d-block {
display: block;
}
.d-inline {
display: inline;
}
.d-inline-block {
display: inline-block;
}
.d-flex {
display: flex;
}
.d-inline-flex {
display: inline-flex;
}
.d-none,
.d-hide {
display: none !important;
}
.d-visible {
visibility: visible;
}
.d-invisible {
visibility: hidden;
}
.text-hide {
background: transparent;
border: 0;
color: transparent;
font-size: 0;
line-height: 0;
text-shadow: none;
}
.text-assistive {
border: 0;
clip: rect(0,0,0,0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
@@ -0,0 +1,50 @@
// Divider
.divider,
.divider-vert {
display: block;
position: relative;
&[data-content]::after {
background: $bg-color-light;
color: $gray-color;
content: attr(data-content);
display: inline-block;
font-size: $font-size-sm;
padding: 0 $unit-2;
transform: translateY(-$font-size-sm + $border-width);
}
}
.divider {
border-top: $border-width solid $border-color;
height: $border-width;
margin: $unit-2 0;
&[data-content] {
margin: $unit-4 0;
}
}
.divider-vert {
display: block;
padding: $unit-4;
&::before {
border-left: $border-width solid $border-color;
bottom: $unit-2;
content: "";
display: block;
left: 50%;
position: absolute;
top: $unit-2;
transform: translateX(-50%);
}
&[data-content]::after {
left: 50%;
padding: $unit-1 0;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
}
}
@@ -0,0 +1,34 @@
// Loading
.loading {
color: transparent !important;
min-height: $unit-4;
pointer-events: none;
position: relative;
&::after {
animation: loading 500ms infinite linear;
border: $border-width-lg solid $primary-color;
border-radius: 50%;
border-right-color: transparent;
border-top-color: transparent;
content: "";
display: block;
height: $unit-4;
left: 50%;
margin-left: -$unit-2;
margin-top: -$unit-2;
position: absolute;
top: 50%;
width: $unit-4;
z-index: $zindex-0;
}
&.loading-lg {
min-height: $unit-10;
&::after {
height: $unit-8;
margin-left: -$unit-4;
margin-top: -$unit-4;
width: $unit-8;
}
}
}
@@ -0,0 +1,50 @@
// Position
.clearfix {
@include clearfix();
}
.float-left {
float: left !important;
}
.float-right {
float: right !important;
}
.relative {
position: relative;
}
.absolute {
position: absolute;
}
.fixed {
position: fixed;
}
.centered {
display: block;
float: none;
margin-left: auto;
margin-right: auto;
}
.flex-centered {
align-items: center;
display: flex;
justify-content: center;
}
// Spacing
@include margin-variant(0, 0);
@include margin-variant(1, $unit-1);
@include margin-variant(2, $unit-2);
@include padding-variant(0, 0);
@include padding-variant(1, $unit-1);
@include padding-variant(2, $unit-2);
@@ -0,0 +1,8 @@
// Shapes
.rounded {
border-radius: $border-radius;
}
.circle {
border-radius: 50%;
}
@@ -0,0 +1,64 @@
// Text
// Text alignment utilities
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
.text-justify {
text-align: justify;
}
// Text transform utilities
.text-lowercase {
text-transform: lowercase;
}
.text-uppercase {
text-transform: uppercase;
}
.text-capitalize {
text-transform: capitalize;
}
// Text style utilities
.text-normal {
font-weight: normal;
}
.text-bold {
font-weight: bold;
}
.text-italic {
font-style: italic;
}
.text-large {
font-size: 1.2em;
}
// Text overflow utilities
.text-ellipsis {
@include text-ellipsis();
}
.text-clip {
overflow: hidden;
text-overflow: clip;
white-space: nowrap;
}
.text-break {
hyphens: auto;
word-break: break-word;
word-wrap: break-word;
}
@@ -0,0 +1,20 @@
// Core variables and mixins
@import 'spectre/variables';
@import 'spectre/mixins';
@import 'theme/variables';
@import 'theme/mixins';
@import 'theme/framework';
@import 'theme/typography';
@import 'theme/forms';
@import 'theme/mobile';
@import 'theme/animation';
@import 'theme/header';
@import 'theme/footer';
@import 'theme/menu';
// Extra Skeleton Styling
@import 'theme/blog';
@import 'theme/onepage';