Update architect-ui, bootstrap, javascript and css

This commit is contained in:
Deon George 2023-03-25 23:33:27 +11:00
parent a46a61249e
commit dd17873905
195 changed files with 28857 additions and 10615 deletions

7
.gitignore vendored
View File

@ -10,3 +10,10 @@ Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
public/css/app.css
public/js/app.js
public/js/vendor.js
public/js/manifest.js
public/fonts/vendor
public/images/vendor
public/mix-manifest.json

View File

@ -13,10 +13,10 @@ final class Mechanisms extends Schema
{
return $this->values
->transform(function($item) {
$format = sprintf('<abbr class="pb-1" title="%s"><i class="fas fa-book pr-2"></i>%s</abbr>%s<p class="mb-0">%s</p>',
$format = sprintf('<abbr class="pb-1" title="%s"><i class="fas fa-book pe-2"></i>%s</abbr>%s<p class="mb-0">%s</p>',
$item,
static::get($item,'title'),
($x=static::get($item,'ref')) ? sprintf('<abbr class="pl-2" title="%s"><i class="fas fa-comment-dots"></i></abbr>',$x) : '',
($x=static::get($item,'ref')) ? sprintf('<abbr class="ps-2" title="%s"><i class="fas fa-comment-dots"></i></abbr>',$x) : '',
static::get($item,'desc'),
);

View File

@ -14,10 +14,10 @@ final class OID extends Schema
return $this->values
->transform(function($item) {
if (preg_match('/[0-9]+\.[0-9]+\.[0-9]+/',$item)) {
$format = sprintf('<abbr class="pb-1" title="%s"><i class="fas fa-list-ol pr-2"></i>%s</abbr>%s<p class="mb-0">%s</p>',
$format = sprintf('<abbr class="pb-1" title="%s"><i class="fas fa-list-ol pe-2"></i>%s</abbr>%s<p class="mb-0">%s</p>',
$item,
static::get($item,'title'),
($x=static::get($item,'ref')) ? sprintf('<abbr class="pl-2" title="%s"><i class="fas fa-comment-dots"></i></abbr>',$x) : '',
($x=static::get($item,'ref')) ? sprintf('<abbr class="ps-2" title="%s"><i class="fas fa-comment-dots"></i></abbr>',$x) : '',
static::get($item,'desc'),
);

14795
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,4 @@
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
@ -9,18 +8,23 @@
"prod": "npm run production",
"production": "mix --production"
},
"devDependencies": {
"axios": "^0.21",
"jquery": "^3.6.3",
"laravel-mix": "^6.0.6",
"lodash": "^4.17.19",
"mix": "^0.0.1",
"postcss": "^8.1.14",
"resolve-url-loader": "^5.0.0",
"sass": "^1.57.1",
"sass-loader": "^12.1.0",
"yarn": "^1.22.19"
},
"resolutions": {},
"dependencies": {
"@fortawesome/fontawesome-free": "^6.3.0",
"@popperjs/core": "^2.11.6",
"animate-sass": "^0.8.2",
"axios": "^1.3.4",
"bootstrap": "^5.2.3",
"jquery": "^3.6.3",
"jquery-ui": "^1.13.2",
"jquery.fancytree": "^2.38.3",
"laravel-mix": "^6.0.49",
"less-loader": "^11.1.0",
"metismenu": "^3.0.7",
"pe7-icon": "^1.0.4",
"resolve-url-loader": "^5.0.0",
"sass": "^1.58.3",
"sass-loader": "^13.2.0",
"select2": "^4.1.0-rc.0"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 893 KiB

182
public/css/fixes.css vendored
View File

@ -1,61 +1,41 @@
/*
body {
font-size: 0.85em;
}
*/
/* Trim our sidebar down to 250px */
.app-sidebar {
width: 250px;
min-width: 250px;
.logo-src {
background: url('/images/logo-h.png');
width: 152px !important;
}
.app-header__logo {
width: 250px;
}
.fixed-sidebar:not(.fixed-header) .app-header {
margin-left: 250px;
}
.fixed-sidebar .app-main .app-main__outer {
padding-left: 250px;
}
.font-icon-wrapper i {
font-size: 1.2rem;
}
/* Fixes for data tables */
/** Fixes for data tables **/
/* Fix pagination buttons */
.dataTables_wrapper .dataTables_paginate .paginate_button {
padding: 0 0;
margin-left: 0;
border: 0 solid;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
border: 0 solid;
background: #fff;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:active {
box-shadow: 0 0 0 #fff;
background-color: #fff;
}
/* Remove multiple sorting images on tables */
table.dataTable thead .sorting_asc {
background-image: none !important;
}
table.dataTable thead .sorting_desc {
background-image: none !important;
}
table.dataTable thead .sorting {
background-image: none !important;
}
/* Remove blue border from chrome on buttons */
/** Remove blue border from chrome on buttons **/
/* Remove outline for non-keyboard :focus */
*:focus:not(.focus-visible) {
outline: none !important;
@ -63,30 +43,18 @@ table.dataTable thead .sorting {
}
/* Optional: Customize .focus-visible */
/*
.focus-visible {
outline-color: lightgreen;
}
*/
*:disabled {
cursor: not-allowed;
}
/* A selected indicator - used with icons */
.tag-selected {
color: orange;
}
.tag-selected:hover {
cursor: pointer;
}
.card-header h3.card-title {
font-size: 1.0rem;
}
/** SIDEBAR FIXES **/
/**
/*
The sidebar has a few states:
+ Wide Screen
- Open (app-container fixed-sidebar) &
@ -98,66 +66,91 @@ table.dataTable thead .sorting {
+ Small Screen
- Missing (?) &
- Click Open (app-container fixed-sidebar closed-sidebar-mobile closed-sidebar sidebar-mobile-open)
*/
*/
/* Fancy Tree Fixes */
/** Remove the border around the tree **/
ul.fancytree-container {
border: 0;
}
/** Tree Placement **/
/** Fancy Tree Fixes **/
/*
@todo The unopened lazy branches off the tree are off by 5px. see *-cdl. below
@todo The last node is missing some dots, connecting to the previous node
*/
/* Tree Placement */
#tree > ul {
padding-left: 0;
}
/** Fix tree rendering **/
.fancytree-node {
line-height: 1.75em;
}
/** Fix position of tree expander and checkbox */
span.fancytree-checkbox, span.fancytree-custom-icon, span.fancytree-expander, span.fancytree-icon {
margin-top: 4px;
/* Remove the border around the tree */
ul.fancytree-container {
border: 0 !important;
}
/* Position branch center of icon */
ul.fancytree-container ul {
padding: 0 0 0 20px;
padding: 0 0 0 20px !important;
}
/* Show treeicon when collapsed and remove it when open */
/* @todo treeicon appears when not hovering on page in small mode */
/* Fix tree rendering */
.fancytree-node {
line-height: 1.75em;
}
/* Fix position of tree expander and checkbox */
.fancytree-exp-cl span.fancytree-expander { /* last link closed */
margin-top: 2px;
background-position: 0 -93px !important;
}
.fancytree-exp-el span.fancytree-expander { /* last link expanded */
margin-top: 2px;
background-position: -32px -93px !important;
}
.fancytree-lazy.fancytree-exp-cd.fancytree-ico-c span.fancytree-expander,
.fancytree-lazy.fancytree-exp-cdl.fancytree-ico-c span.fancytree-expander { /* last link not opened */
margin-top: 5px;
/* had to disable this - as we loose our spinner
background-position: -80px -93px;
*/
}
.fancytree-exp-c span.fancytree-expander { /* link closed */
background-position: -16px -76px !important;
}
.fancytree-exp-e span.fancytree-expander { /* link expanded */
background-position: -32px -76px !important;
}
.fancytree-node.fancytree-exp-n span.fancytree-expander,
.fancytree-node.fancytree-exp-n span.fancytree-expander:hover { /* node */
margin-top: 4px;
background-position: 0 -63px;
}
.fancytree-node.fancytree-exp-nl span.fancytree-expander { /* node last */
margin-top: 3px;
background-position: -16px -62px !important;
}
/** Show treeicon when collapsed and remove it when open **/
.sidebar-mobile-open:hover #treeicon, /* small */
.fixed-sidebar #treeicon, /* wide */
.fixed-sidebar .app-sidebar:hover #treeicon /* wide & closed:hover */
{
display: none;
}
.closed-sidebar #treeicon
{
opacity: 1;
display: inline;
}
/* Architect Fixes */
/** Remove the Cyan vertical line from the tree **/
/** Architect Fixes **/
/* Remove the Cyan vertical line from the tree */
.vertical-nav-menu #tree ul:before {
opacity: 0;
}
/** Fix elipse icon (top right) on small display */
/* Fix ellipsis icon (top right) on small display with the light background */
.closed-sidebar .app-header.header-text-light .app-header__menu .mobile-toggle-header-nav {
background: #343a40;
}
/* Hide tree when collapsed and show it when open */
/* @todo tree disappears when not hovering on page in small mode - related to #treeicon - see server icons they work? */
.sidebar-mobile-open:hover #tree, /* small */
.fixed-sidebar #tree, /* wide */
.fixed-sidebar .app-sidebar:hover #tree /* wide & closed:hover */
{
display: block;
}
.closed-sidebar #tree {
display: none;
}
@ -169,3 +162,58 @@ ul.fancytree-container ul {
.closed-sidebar .app-sidebar:hover .server-icon, .sidebar-mobile-open .server-icon {
display: flex;
}
.font-icon-wrapper {
text-align: center;
border: #e9ecef solid 1px;
border-radius: 0.25rem;
margin: 0 0 10px 0;
padding: 5px;
}
.font-icon-wrapper:hover {
background: #f8f9fa;
color: #3f6ad8;
}
.font-icon-wrapper i {
font-size: 1.2rem;
}
/*
.font-icon-wrapper {
text-align: center;
border: $gray-200 solid 1px;
@include border-radius($border-radius);
margin: 0 0 10px;
padding: 5px;
&.font-icon-lg {
float: left;
padding: 10px;
text-align: center;
margin-right: 15px;
min-width: 64px;
i {
font-size: $h1-font-size;
}
}
&:hover {
background: $gray-100;
color: $primary;
p {
color: $gray-600;
}
}
i {
font-size: ($font-size-base * 1.5);
}
p {
color: $gray-500;
font-size: calc($font-size-sm / 1.2);
margin: 5px 0 0;
}
}
*/

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

2
public/js/app.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

6
public/js/custom.js vendored
View File

@ -27,6 +27,10 @@ $(document).ready(function() {
autoCollapse: true, // Automatically collapse all siblings, when a node is expanded.
autoScroll: true, // Automatically scroll nodes into visible area.
focusOnSelect: true, // Set focus when node is checked by a mouse click
glyph: {
preset: 'bootstrap3', // @todo look at changing this to awesome5
map: {}
},
click: function(event,data) {
if (data.targetType == 'title') {
$.ajax({
@ -78,4 +82,4 @@ $(document).ready(function() {
}
}
});
});
});

21
resources/js/app.js vendored
View File

@ -1 +1,22 @@
import './bootstrap';
// Imports
window.$ = window.jQuery = require('jquery');
//const $ = require('jquery');
// Fancy Tree
import {createTree} from 'jquery.fancytree';
import 'jquery.fancytree/dist/modules/jquery.fancytree.edit';
import 'jquery.fancytree/dist/modules/jquery.fancytree.filter';
import 'jquery.fancytree/dist/modules/jquery.fancytree.glyph';
// import 'jquery-ui/dist/jquery-ui'; // USED?
import 'jquery.fancytree/dist/skin-xp/ui.fancytree.min.css';
// Bootstrap - included in architectui
// import 'bootstrap/dist/js/bootstrap.bundle';
// Select2
import 'select2/dist/js/select2';
// Architect UI
import '../themes/architect/src/app';

View File

@ -1 +1,8 @@
// @import "node_modules/bootstrap/scss/bootstrap";
// Architect UI
@import "resources/themes/architect/src/base.scss";
// Fancy Tree
@import "jquery.fancytree/dist/skin-xp/ui.fancytree";
// Select2
@import "select2/dist/css/select2";

93
resources/themes/architect/src/app.js vendored Normal file
View File

@ -0,0 +1,93 @@
// Imports
import $ from "jquery";
import * as bootstrap from 'bootstrap';
import 'metismenu';
// Stylesheets
// import './assets/base.scss';
// import '../../themes/architect/src/base.scss';
$(document).ready(() => {
// Sidebar Menu
setTimeout(function () {
$(".vertical-nav-menu").metisMenu();
}, 100);
// Search wrapper trigger
$('.search-icon').click(function () {
$(this).parent().parent().addClass('active');
});
$('.search-wrapper .btn-close').click(function () {
$(this).parent().removeClass('active');
});
// Stop Bootstrap 5 Dropdown for closing on click inside
$('.dropdown-menu').on('click', function (event) {
var events = $._data(document, 'events') || {};
events = events.click || [];
for (var i = 0; i < events.length; i++) {
if (events[i].selector) {
if ($(event.target).is(events[i].selector)) {
events[i].handler.call(event.target, event);
}
$(event.target).parents(events[i].selector).each(function () {
events[i].handler.call(this, event);
});
}
}
event.stopPropagation(); //Always stop propagation
});
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl);
});
// BS5 Tooltips
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl);
});
$('.mobile-toggle-nav').click(function () {
$(this).toggleClass('is-active');
$('.app-container').toggleClass('sidebar-mobile-open');
});
$('.mobile-toggle-header-nav').click(function () {
$(this).toggleClass('active');
$('.app-header__content').toggleClass('header-mobile-open');
});
// Responsive
var resizeClass = function () {
var win = document.body.clientWidth;
if (win < 1250) {
$('.app-container').addClass('closed-sidebar-mobile closed-sidebar');
$('.app-header').removeClass("heard-text-light bg-dark").addClass("bg-light header-text-dark");
} else {
$('.app-header').addClass("heard-text-light bg-dark").removeClass("bg-light header-text-dark");
$('.app-container').removeClass('closed-sidebar-mobile closed-sidebar');
}
};
$(window).on('resize', function () {
resizeClass();
});
resizeClass();
});

112
resources/themes/architect/src/base.scss vendored Normal file
View File

@ -0,0 +1,112 @@
/*!
=========================================================
* ArchitectUI HTML Theme Dashboard - v2.0.0
=========================================================
* Product Page: https://dashboardpack.com
* Copyright 2021 DashboardPack (https://dashboardpack.com)
* Licensed under MIT (https://github.com/DashboardPack/architectui-html-theme-free/blob/master/LICENSE)
=========================================================
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
// BOOTSTRAP 5 VARIABLES
// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)
@import "components/bootstrap5/functions";
// 2. Include any default variable overrides here
@import "themes/layout-variables";
// 3. Include remainder of required Bootstrap stylesheets
@import "components/bootstrap5/variables";
@import "components/bootstrap5/mixins";
@import "components/bootstrap5/utilities";
// BOOTSTRAP 5 IMPORTS
@import "components/bootstrap5/root";
@import "components/bootstrap5/reboot";
@import "components/bootstrap5/type";
@import "components/bootstrap5/images";
@import "components/bootstrap5/containers";
@import "components/bootstrap5/grid";
@import "components/bootstrap5/tables";
@import "components/bootstrap5/forms";
@import "components/bootstrap5/buttons";
@import "components/bootstrap5/transitions";
@import "components/bootstrap5/dropdown";
@import "components/bootstrap5/button-group";
@import "components/bootstrap5/nav";
@import "components/bootstrap5/navbar";
@import "components/bootstrap5/card";
// @import "components/bootstrap5/accordion";
@import "components/bootstrap5/breadcrumb";
@import "components/bootstrap5/pagination";
@import "components/bootstrap5/badge";
@import "components/bootstrap5/alert";
// @import "components/bootstrap5/progress";
@import "components/bootstrap5/list-group";
@import "components/bootstrap5/close";
// @import "components/bootstrap5/toasts";
@import "components/bootstrap5/modal";
@import "components/bootstrap5/tooltip";
// @import "components/bootstrap5/popover";
// @import "components/bootstrap5/carousel";
// @import "components/bootstrap5/spinners";
// @import "components/bootstrap5/offcanvas";
// @import "components/bootstrap5/jumbotron";
@import "components/bootstrap5/helpers";
@import "components/bootstrap5/utilities/api";
// LAYOUT
@import "layout/layout";
// UTILS
@import "utils/helpers";
@import "utils/backgrounds";
@import "utils/animate";
@import "utils/comps-animations";
// ELEMENTS
@import "elements/buttons";
@import "elements/dropdown";
@import "elements/badges";
@import "elements/cards";
@import "elements/tabs";
// @import "elements/accordions";
@import "elements/modals";
@import "elements/navs";
@import "elements/listgroup";
@import "elements/forms";
@import "elements/pagination";
// DASHBOARD BOXES
@import "widgets/content-boxes/content-boxes";
// COMPONENTS
// Perfect Scrollbar
// @import "components/perfect-scrollbar/perfect-scrollbar";
// FontAwesome
@import "components/icons/fontawesome/fontawesome";
// P7 Icons
@import "components/icons/p7icons";
// Hamburger button
@import "components/hamburgers/hamburgers";
// Notifications
// @import "components/notifications/toastr";
// Popovers & Tooltips
@import "components/popovers-tooltips/popovers-tooltips";
// Calendar
// @import "components/calendar/calendar";
// Maps
// @import "components/maps/vector-maps";
// Responsive
@import "layout/responsive/responsive-base";
// DEMO
// @import "demo-ui/demo";

View File

@ -0,0 +1,57 @@
//
// Base styles
//
.alert {
position: relative;
padding: $alert-padding-y $alert-padding-x;
margin-bottom: $alert-margin-bottom;
border: $alert-border-width solid transparent;
@include border-radius($alert-border-radius);
}
// Headings for larger alerts
.alert-heading {
// Specified to prevent conflicts of changing $headings-color
color: inherit;
}
// Provide class for links that match alerts
.alert-link {
font-weight: $alert-link-font-weight;
}
// Dismissible alerts
//
// Expand the right padding and account for the close button's positioning.
.alert-dismissible {
padding-right: $alert-dismissible-padding-r;
// Adjust close link position
.btn-close {
position: absolute;
top: 0;
right: 0;
z-index: $stretched-link-z-index + 1;
padding: $alert-padding-y * 1.25 $alert-padding-x;
}
}
// scss-docs-start alert-modifiers
// Generate contextual modifier classes for colorizing the alert.
@each $state, $value in $theme-colors {
$alert-background: shift-color($value, $alert-bg-scale);
$alert-border: shift-color($value, $alert-border-scale);
$alert-color: shift-color($value, $alert-color-scale);
@if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {
$alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));
}
.alert-#{$state} {
@include alert-variant($alert-background, $alert-border, $alert-color);
}
}
// scss-docs-end alert-modifiers

View File

@ -0,0 +1,29 @@
// Base class
//
// Requires one of the contextual, color modifier classes for `color` and
// `background-color`.
.badge {
display: inline-block;
padding: $badge-padding-y $badge-padding-x;
@include font-size($badge-font-size);
font-weight: $badge-font-weight;
line-height: 1;
color: $badge-color;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
@include border-radius($badge-border-radius);
@include gradient-bg();
// Empty badges collapse automatically
&:empty {
display: none;
}
}
// Quick fix for badges in buttons
.btn .badge {
position: relative;
top: -1px;
}

View File

@ -0,0 +1,28 @@
.breadcrumb {
display: flex;
flex-wrap: wrap;
padding: $breadcrumb-padding-y $breadcrumb-padding-x;
margin-bottom: $breadcrumb-margin-bottom;
@include font-size($breadcrumb-font-size);
list-style: none;
background-color: $breadcrumb-bg;
@include border-radius($breadcrumb-border-radius);
}
.breadcrumb-item {
// The separator between breadcrumbs (by default, a forward-slash: "/")
+ .breadcrumb-item {
padding-left: $breadcrumb-item-padding-x;
&::before {
float: left; // Suppress inline spacings and underlining of the separator
padding-right: $breadcrumb-item-padding-x;
color: $breadcrumb-divider-color;
content: var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"};
}
}
&.active {
color: $breadcrumb-active-color;
}
}

View File

@ -0,0 +1,139 @@
// Make the div behave like a button
.btn-group,
.btn-group-vertical {
position: relative;
display: inline-flex;
vertical-align: middle; // match .btn alignment given font-size hack above
> .btn {
position: relative;
flex: 1 1 auto;
}
// Bring the hover, focused, and "active" buttons to the front to overlay
// the borders properly
> .btn-check:checked + .btn,
> .btn-check:focus + .btn,
> .btn:hover,
> .btn:focus,
> .btn:active,
> .btn.active {
z-index: 1;
}
}
// Optional: Group multiple button groups together for a toolbar
.btn-toolbar {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
.input-group {
width: auto;
}
}
.btn-group {
// Prevent double borders when buttons are next to each other
> .btn:not(:first-child),
> .btn-group:not(:first-child) {
margin-left: -$btn-border-width;
}
// Reset rounded corners
> .btn:not(:last-child):not(.dropdown-toggle),
> .btn-group:not(:last-child) > .btn {
@include border-end-radius(0);
}
// The left radius should be 0 if the button is:
// - the "third or more" child
// - the second child and the previous element isn't `.btn-check` (making it the first child visually)
// - part of a btn-group which isn't the first child
> .btn:nth-child(n + 3),
> :not(.btn-check) + .btn,
> .btn-group:not(:first-child) > .btn {
@include border-start-radius(0);
}
}
// Sizing
//
// Remix the default button sizing classes into new ones for easier manipulation.
.btn-group-sm > .btn { @extend .btn-sm; }
.btn-group-lg > .btn { @extend .btn-lg; }
//
// Split button dropdowns
//
.dropdown-toggle-split {
padding-right: $btn-padding-x * .75;
padding-left: $btn-padding-x * .75;
&::after,
.dropup &::after,
.dropend &::after {
margin-left: 0;
}
.dropstart &::before {
margin-right: 0;
}
}
.btn-sm + .dropdown-toggle-split {
padding-right: $btn-padding-x-sm * .75;
padding-left: $btn-padding-x-sm * .75;
}
.btn-lg + .dropdown-toggle-split {
padding-right: $btn-padding-x-lg * .75;
padding-left: $btn-padding-x-lg * .75;
}
// The clickable button for toggling the menu
// Set the same inset shadow as the :active state
.btn-group.show .dropdown-toggle {
@include box-shadow($btn-active-box-shadow);
// Show no shadow for `.btn-link` since it has no other button styles.
&.btn-link {
@include box-shadow(none);
}
}
//
// Vertical button groups
//
.btn-group-vertical {
flex-direction: column;
align-items: flex-start;
justify-content: center;
> .btn,
> .btn-group {
width: 100%;
}
> .btn:not(:first-child),
> .btn-group:not(:first-child) {
margin-top: -$btn-border-width;
}
// Reset rounded corners
> .btn:not(:last-child):not(.dropdown-toggle),
> .btn-group:not(:last-child) > .btn {
@include border-bottom-radius(0);
}
> .btn ~ .btn,
> .btn-group:not(:first-child) > .btn {
@include border-top-radius(0);
}
}

View File

@ -0,0 +1,111 @@
//
// Base styles
//
.btn {
display: inline-block;
font-family: $btn-font-family;
font-weight: $btn-font-weight;
line-height: $btn-line-height;
color: $body-color;
text-align: center;
text-decoration: if($link-decoration == none, null, none);
white-space: $btn-white-space;
vertical-align: middle;
cursor: if($enable-button-pointers, pointer, null);
user-select: none;
background-color: transparent;
border: $btn-border-width solid transparent;
@include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-border-radius);
@include transition($btn-transition);
&:hover {
color: $body-color;
text-decoration: if($link-hover-decoration == underline, none, null);
}
.btn-check:focus + &,
&:focus {
outline: 0;
box-shadow: $btn-focus-box-shadow;
}
.btn-check:checked + &,
.btn-check:active + &,
&:active,
&.active {
@include box-shadow($btn-active-box-shadow);
&:focus {
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
}
}
&:disabled,
&.disabled,
fieldset:disabled & {
pointer-events: none;
opacity: $btn-disabled-opacity;
@include box-shadow(none);
}
}
//
// Alternate buttons
//
// scss-docs-start btn-variant-loops
@each $color, $value in $theme-colors {
.btn-#{$color} {
@include button-variant($value, $value);
}
}
@each $color, $value in $theme-colors {
.btn-outline-#{$color} {
@include button-outline-variant($value);
}
}
// scss-docs-end btn-variant-loops
//
// Link buttons
//
// Make a button look and behave like a link
.btn-link {
font-weight: $font-weight-normal;
color: $btn-link-color;
text-decoration: $link-decoration;
&:hover {
color: $btn-link-hover-color;
text-decoration: $link-hover-decoration;
}
&:focus {
text-decoration: $link-hover-decoration;
}
&:disabled,
&.disabled {
color: $btn-link-disabled-color;
}
// No need for an active state here
}
//
// Button Sizes
//
.btn-lg {
@include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);
}
.btn-sm {
@include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);
}

View File

@ -0,0 +1,215 @@
//
// Base styles
//
.card {
position: relative;
display: flex;
flex-direction: column;
min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
height: $card-height;
word-wrap: break-word;
background-color: $card-bg;
background-clip: border-box;
border: $card-border-width solid $card-border-color;
@include border-radius($card-border-radius);
> hr {
margin-right: 0;
margin-left: 0;
}
> .list-group {
border-top: inherit;
border-bottom: inherit;
&:first-child {
border-top-width: 0;
@include border-top-radius($card-inner-border-radius);
}
&:last-child {
border-bottom-width: 0;
@include border-bottom-radius($card-inner-border-radius);
}
}
// Due to specificity of the above selector (`.card > .list-group`), we must
// use a child selector here to prevent double borders.
> .card-header + .list-group,
> .list-group + .card-footer {
border-top: 0;
}
}
.card-body {
// Enable `flex-grow: 1` for decks and groups so that card blocks take up
// as much space as possible, ensuring footers are aligned to the bottom.
flex: 1 1 auto;
padding: $card-spacer-y $card-spacer-x;
color: $card-color;
}
.card-title {
margin-bottom: $card-title-spacer-y;
}
.card-subtitle {
margin-top: -$card-title-spacer-y * .5;
margin-bottom: 0;
}
.card-text:last-child {
margin-bottom: 0;
}
.card-link {
&:hover {
text-decoration: none;
}
+ .card-link {
margin-left: $card-spacer-x;
}
}
//
// Optional textual caps
//
.card-header {
padding: $card-cap-padding-y $card-cap-padding-x;
margin-bottom: 0; // Removes the default margin-bottom of <hN>
color: $card-cap-color;
background-color: $card-cap-bg;
border-bottom: $card-border-width solid $card-border-color;
&:first-child {
@include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
}
}
.card-footer {
padding: $card-cap-padding-y $card-cap-padding-x;
color: $card-cap-color;
background-color: $card-cap-bg;
border-top: $card-border-width solid $card-border-color;
&:last-child {
@include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);
}
}
//
// Header navs
//
.card-header-tabs {
margin-right: -$card-cap-padding-x * .5;
margin-bottom: -$card-cap-padding-y;
margin-left: -$card-cap-padding-x * .5;
border-bottom: 0;
@if $nav-tabs-link-active-bg != $card-bg {
.nav-link.active {
background-color: $card-bg;
border-bottom-color: $card-bg;
}
}
}
.card-header-pills {
margin-right: -$card-cap-padding-x * .5;
margin-left: -$card-cap-padding-x * .5;
}
// Card image
.card-img-overlay {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
padding: $card-img-overlay-padding;
@include border-radius($card-inner-border-radius);
}
.card-img,
.card-img-top,
.card-img-bottom {
width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
}
.card-img,
.card-img-top {
@include border-top-radius($card-inner-border-radius);
}
.card-img,
.card-img-bottom {
@include border-bottom-radius($card-inner-border-radius);
}
//
// Card groups
//
.card-group {
// The child selector allows nested `.card` within `.card-group`
// to display properly.
> .card {
margin-bottom: $card-group-margin;
}
@include media-breakpoint-up(sm) {
display: flex;
flex-flow: row wrap;
// The child selector allows nested `.card` within `.card-group`
// to display properly.
> .card {
// Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
flex: 1 0 0%;
margin-bottom: 0;
+ .card {
margin-left: 0;
border-left: 0;
}
// Handle rounded corners
@if $enable-rounded {
&:not(:last-child) {
@include border-end-radius(0);
.card-img-top,
.card-header {
// stylelint-disable-next-line property-disallowed-list
border-top-right-radius: 0;
}
.card-img-bottom,
.card-footer {
// stylelint-disable-next-line property-disallowed-list
border-bottom-right-radius: 0;
}
}
&:not(:first-child) {
@include border-start-radius(0);
.card-img-top,
.card-header {
// stylelint-disable-next-line property-disallowed-list
border-top-left-radius: 0;
}
.card-img-bottom,
.card-footer {
// stylelint-disable-next-line property-disallowed-list
border-bottom-left-radius: 0;
}
}
}
}
}
}

View File

@ -0,0 +1,40 @@
// transparent background and border properties included for button version.
// iOS requires the button element instead of an anchor tag.
// If you want the anchor version, it requires `href="#"`.
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
.btn-close {
box-sizing: content-box;
width: $btn-close-width;
height: $btn-close-height;
padding: $btn-close-padding-y $btn-close-padding-x;
color: $btn-close-color;
background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements
border: 0; // for button elements
@include border-radius();
opacity: $btn-close-opacity;
// Override <a>'s hover style
&:hover {
color: $btn-close-color;
text-decoration: none;
opacity: $btn-close-hover-opacity;
}
&:focus {
outline: 0;
box-shadow: $btn-close-focus-shadow;
opacity: $btn-close-focus-opacity;
}
&:disabled,
&.disabled {
pointer-events: none;
user-select: none;
opacity: $btn-close-disabled-opacity;
}
}
.btn-close-white {
filter: $btn-close-white-filter;
}

View File

@ -0,0 +1,41 @@
// Container widths
//
// Set the container width, and override it for fixed navbars in media queries.
@if $enable-grid-classes {
// Single container class with breakpoint max-widths
.container,
// 100% wide container at all breakpoints
.container-fluid {
@include make-container();
}
// Responsive containers that are 100% wide until a breakpoint
@each $breakpoint, $container-max-width in $container-max-widths {
.container-#{$breakpoint} {
@extend .container-fluid;
}
@include media-breakpoint-up($breakpoint, $grid-breakpoints) {
%responsive-container-#{$breakpoint} {
max-width: $container-max-width;
}
// Extend each breakpoint which is smaller or equal to the current breakpoint
$extend-breakpoint: true;
@each $name, $width in $grid-breakpoints {
@if ($extend-breakpoint) {
.container#{breakpoint-infix($name, $grid-breakpoints)} {
@extend %responsive-container-#{$breakpoint};
}
// Once the current breakpoint is reached, stop extending
@if ($breakpoint == $name) {
$extend-breakpoint: false;
}
}
}
}
}
}

View File

@ -0,0 +1,507 @@
// Embedded icons from Open Iconic.
// Released under MIT and copyright 2014 Waybury.
// https://useiconic.com/open
// Checkboxes and radios
//
// Base class takes care of all the key behavioral aspects.
.custom-control {
position: relative;
display: block;
min-height: $font-size-base * $line-height-base;
padding-left: $custom-control-gutter + $custom-control-indicator-size;
}