express_ui 0.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +38 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/config/express_ui_manifest.js +2 -0
  6. data/app/assets/javascripts/express_ui/application.js +1 -0
  7. data/app/assets/javascripts/express_ui/copy_code.js +63 -0
  8. data/app/assets/javascripts/express_ui/search.js +103 -0
  9. data/app/assets/javascripts/express_ui/styleguide.js +90 -0
  10. data/app/assets/stylesheets/express_ui/atoms/_animations.sass +35 -0
  11. data/app/assets/stylesheets/express_ui/atoms/_buttons.sass +119 -0
  12. data/app/assets/stylesheets/express_ui/atoms/_headings.sass +51 -0
  13. data/app/assets/stylesheets/express_ui/atoms/_icons.sass +3 -0
  14. data/app/assets/stylesheets/express_ui/atoms/_images.sass +37 -0
  15. data/app/assets/stylesheets/express_ui/atoms/_media_queries.sass +27 -0
  16. data/app/assets/stylesheets/express_ui/atoms/_mixins.sass +33 -0
  17. data/app/assets/stylesheets/express_ui/atoms/_reset.sass +11 -0
  18. data/app/assets/stylesheets/express_ui/atoms/_typography.sass +167 -0
  19. data/app/assets/stylesheets/express_ui/atoms/_variables.sass +52 -0
  20. data/app/assets/stylesheets/express_ui/molecules/_button_group.sass +54 -0
  21. data/app/assets/stylesheets/express_ui/molecules/_container.sass +29 -0
  22. data/app/assets/stylesheets/express_ui/molecules/_flash_messages.sass +56 -0
  23. data/app/assets/stylesheets/express_ui/molecules/_form_groups.sass +96 -0
  24. data/app/assets/stylesheets/express_ui/molecules/_forms.sass +159 -0
  25. data/app/assets/stylesheets/express_ui/molecules/_lists.sass +56 -0
  26. data/app/assets/stylesheets/express_ui/molecules/_nav.sass +85 -0
  27. data/app/assets/stylesheets/express_ui/molecules/_tables.sass +77 -0
  28. data/app/assets/stylesheets/express_ui/molecules/_tabs.sass +23 -0
  29. data/app/assets/stylesheets/express_ui/organisms/_header.sass +29 -0
  30. data/app/assets/stylesheets/express_ui/organisms/_sidebar.sass +113 -0
  31. data/app/assets/stylesheets/express_ui/style.sass +31 -0
  32. data/app/assets/stylesheets/express_ui/styleguide.sass +200 -0
  33. data/app/assets/stylesheets/express_ui/templates/_content_sidebar.sass +31 -0
  34. data/app/assets/stylesheets/express_ui/templates/_full_width.sass +5 -0
  35. data/app/assets/stylesheets/express_ui/templates/_half_width.sass +8 -0
  36. data/app/assets/stylesheets/express_ui/templates/_master_detail.sass +50 -0
  37. data/app/components/code_demo.rb +31 -0
  38. data/app/controllers/express_ui/about_controller.rb +10 -0
  39. data/app/controllers/express_ui/application_controller.rb +5 -0
  40. data/app/controllers/express_ui/styleguide_controller.rb +10 -0
  41. data/app/controllers/express_ui/templates_controller.rb +26 -0
  42. data/app/controllers/express_ui/uicomponents_controller.rb +26 -0
  43. data/app/helpers/express_ui/application_helper.rb +28 -0
  44. data/app/jobs/express_ui/application_job.rb +4 -0
  45. data/app/mailers/express_ui/application_mailer.rb +6 -0
  46. data/app/models/express_ui/application_record.rb +5 -0
  47. data/app/views/express_ui/atoms/_animations.html.erb +33 -0
  48. data/app/views/express_ui/atoms/_buttons.html.erb +129 -0
  49. data/app/views/express_ui/atoms/_headings.html.erb +3 -0
  50. data/app/views/express_ui/atoms/_icons.html.erb +13 -0
  51. data/app/views/express_ui/atoms/_mixins.html.erb +6 -0
  52. data/app/views/express_ui/atoms/_typography.html.erb +201 -0
  53. data/app/views/express_ui/atoms/_variables.html.erb +50 -0
  54. data/app/views/express_ui/molecules/_button_group.html.erb +90 -0
  55. data/app/views/express_ui/molecules/_container.html.erb +32 -0
  56. data/app/views/express_ui/molecules/_flash_messages.html.erb +49 -0
  57. data/app/views/express_ui/molecules/_form_group_horizontal.html.erb +14 -0
  58. data/app/views/express_ui/molecules/_form_group_inline.html.erb +1 -0
  59. data/app/views/express_ui/molecules/_form_group_single_line.html.erb +9 -0
  60. data/app/views/express_ui/molecules/_form_groups.html.erb +69 -0
  61. data/app/views/express_ui/molecules/_forms.html.erb +209 -0
  62. data/app/views/express_ui/molecules/_forms_checkbox.html.erb +20 -0
  63. data/app/views/express_ui/molecules/_forms_radio.html.erb +12 -0
  64. data/app/views/express_ui/molecules/_forms_select.html.erb +11 -0
  65. data/app/views/express_ui/molecules/_nav.html.erb +11 -0
  66. data/app/views/express_ui/molecules/_nav_mega_menu.html.erb +74 -0
  67. data/app/views/express_ui/molecules/_table.html.erb +93 -0
  68. data/app/views/express_ui/molecules/_table_with_filtering.html.erb +55 -0
  69. data/app/views/express_ui/organisms/_header.html.erb +24 -0
  70. data/app/views/express_ui/shared/_header.html.erb +10 -0
  71. data/app/views/express_ui/shared/_search_box.html.erb +6 -0
  72. data/app/views/express_ui/shared/_sidebar_left.html.erb +4 -0
  73. data/app/views/express_ui/shared/_sidebar_right.html.erb +5 -0
  74. data/app/views/express_ui/styleguide/about.html.erb +22 -0
  75. data/app/views/express_ui/styleguide/index.html.erb +79 -0
  76. data/app/views/express_ui/templates/_header.html.erb +15 -0
  77. data/app/views/express_ui/templates/_templates.html.erb +57 -0
  78. data/app/views/express_ui/templates/content_and_sidebar.html.erb +32 -0
  79. data/app/views/express_ui/templates/content_and_sidebar_fixed.html.erb +34 -0
  80. data/app/views/express_ui/templates/full_width.html.erb +25 -0
  81. data/app/views/express_ui/templates/half_width.html.erb +25 -0
  82. data/app/views/express_ui/templates/master_detail.html.erb +41 -0
  83. data/app/views/express_ui/templates/master_detail_fixed.html.erb +36 -0
  84. data/app/views/express_ui/uicomponents/_buttons.html.et +10 -0
  85. data/app/views/express_ui/uicomponents/_flash_message.html.et +19 -0
  86. data/app/views/express_ui/uicomponents/_forms.html.et +118 -0
  87. data/app/views/express_ui/uicomponents/_heading.html.et +24 -0
  88. data/app/views/express_ui/uicomponents/_icons.html.et +35 -0
  89. data/app/views/express_ui/uicomponents/_layout.html.et +47 -0
  90. data/app/views/express_ui/uicomponents/_lists.html.et +9 -0
  91. data/app/views/express_ui/uicomponents/_login.html.erb +15 -0
  92. data/app/views/express_ui/uicomponents/_nav.html.et +18 -0
  93. data/app/views/express_ui/uicomponents/_pages.html.et +22 -0
  94. data/app/views/express_ui/uicomponents/_panel.html.et +33 -0
  95. data/app/views/express_ui/uicomponents/_popup.html.et +19 -0
  96. data/app/views/express_ui/uicomponents/_register.html.erb +14 -0
  97. data/app/views/express_ui/uicomponents/_sidebar.html.et +8 -0
  98. data/app/views/express_ui/uicomponents/_table.html.et +29 -0
  99. data/app/views/express_ui/uicomponents/_widget_box.html.et +14 -0
  100. data/app/views/express_ui/uicomponents/index.html.erb +55 -0
  101. data/app/views/layouts/express_ui/styleguide.html.erb +20 -0
  102. data/config/routes.rb +12 -0
  103. data/lib/express_ui.rb +5 -0
  104. data/lib/express_ui/engine.rb +12 -0
  105. data/lib/express_ui/version.rb +3 -0
  106. data/lib/tasks/express_ui_tasks.rake +4 -0
  107. metadata +251 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3aba4d25bce3a9b4dad5029c100a38467f15c305
4
+ data.tar.gz: d99847094ecdb814e7a25718cbd09e23b265f7fc
5
+ SHA512:
6
+ metadata.gz: '0362895f696cd259db5f153335668a32af3cd688a0d2a76c5ab402f05696b60b7a92a65593842fa62ea00596d0745d799bf1f5c146e6e335362b6ad1f3db2ba0'
7
+ data.tar.gz: 485aeecd0951c2ee20a9d67e129480a4e95ba072263e27cc7c1270c6d05f53db3af040087772cc0d20d3c93d570518a5fa01f72d2af105988bfb3c181504cfb5
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2017 Steven Talcott Smith
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ Express UI
2
+ ==========
3
+
4
+ User interface library for AppExpress components.
5
+
6
+ ## Installation
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'express_ui'
11
+ ```
12
+
13
+ And then execute:
14
+ ```bash
15
+ $ bundle
16
+ ```
17
+
18
+ Or install it yourself as:
19
+ ```bash
20
+ $ gem install express_ui
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ Start the dummy Rails app:
26
+
27
+ ```
28
+ cd test/dummy
29
+ bin/rails s
30
+ ```
31
+
32
+ Visit `http://localhost:3000/express_ui`.
33
+
34
+ ## Contributing
35
+ Contribution directions go here.
36
+
37
+ ## License
38
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'ExpressUi'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+ load 'rails/tasks/statistics.rake'
22
+
23
+
24
+
25
+ require 'bundler/gem_tasks'
26
+
27
+ require 'rake/testtask'
28
+
29
+ Rake::TestTask.new(:test) do |t|
30
+ t.libs << 'lib'
31
+ t.libs << 'test'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+
37
+ task default: :test
@@ -0,0 +1,2 @@
1
+ //= link_directory ../javascripts/express_ui .js
2
+ //= link_directory ../stylesheets/express_ui .css
@@ -0,0 +1 @@
1
+ //= require_tree .
@@ -0,0 +1,63 @@
1
+ function testCopyComand() {
2
+ try {
3
+ document.execCommand("copy")
4
+ return true
5
+ }
6
+ catch (error) {
7
+ return false
8
+ }
9
+ }
10
+
11
+ function addClickToCopyButton(codeBlocks) {
12
+ codeBlocks.map(function(codeBlock, index){
13
+ var clickToCopyButton = createButton()
14
+ codeBlock.appendChild(clickToCopyButton)
15
+ clickToCopyButton.addEventListener('click', function(e) {
16
+ selectElementRange(this.parentNode)
17
+ })
18
+ })
19
+ }
20
+
21
+ function selectElementRange(copyElementSelect) {
22
+ var range = document.createRange()
23
+ range.selectNode(copyElementSelect)
24
+ window.getSelection().removeAllRanges()
25
+ window.getSelection().addRange(range)
26
+ document.execCommand("copy")
27
+ window.getSelection().removeAllRanges()
28
+ }
29
+
30
+ function createButton() {
31
+ var copyButton = document.createElement('button')
32
+ copyButton.className = 'ae-btn ae-btn-primary click-to-copy'
33
+ copyButton.data = 'Click to copy'
34
+ var clipboard = document.createElement('i')
35
+ clipboard.className = 'fa fa-clipboard'
36
+ copyButton.appendChild(clipboard)
37
+ return copyButton
38
+ }
39
+
40
+ function addClickToCopyText() {
41
+ var codeBlockButtons = Array.prototype.slice.call(document.querySelectorAll('.ae-code-block .ae-btn'))
42
+
43
+ codeBlockButtons.map(function(button, index) {
44
+ var pre = button.closest('pre')
45
+ button.setAttribute('data-tooltip', 'Click to copy')
46
+ button.addEventListener('click', function(e){
47
+ button.setAttribute('data-tooltip', 'Copied!')
48
+ setTimeout(function(){
49
+ button.setAttribute('data-tooltip', 'Click to copy')},
50
+ 500)
51
+ })
52
+ })
53
+ }
54
+
55
+ document.addEventListener("DOMContentLoaded", function() {
56
+ if (testCopyComand()) {
57
+ var codeBlocks = Array.prototype.slice.call(document.querySelectorAll(".ae-code-block"))
58
+
59
+ addClickToCopyButton(codeBlocks)
60
+ addClickToCopyText()
61
+ }
62
+ })
63
+
@@ -0,0 +1,103 @@
1
+ function hasClass(element, cls) {
2
+ return element.classList.contains(cls)
3
+ }
4
+
5
+ function addMatch(matchedElements, node) {
6
+ if (node.nodeType !== Node.TEXT_NODE) {
7
+ if (matchedElements.includes(node) == false){
8
+ matchedElements.push(node)
9
+ }
10
+ }
11
+ }
12
+
13
+ function addNextElements(elements, matchedElements) {
14
+ elements.map(function(index, item){
15
+ if (matchedElements.includes(item) == false){
16
+ matchSubElements(item, matchedElements, null)
17
+ }
18
+ })
19
+ }
20
+
21
+ function checkItemIsHeader($item) {
22
+ return $item.is(':header') //h1, h2, h3, etc
23
+ }
24
+
25
+ function matchSubElements(element, matchedElements, header, isHeader) {
26
+ var $subElements = $(element.children)
27
+
28
+ if (isHeader) {
29
+ matchedElements.push($subElements[0])
30
+ } else {
31
+ $subElements.map(function(index, item){
32
+ var itemIsHeader = checkItemIsHeader($(item)) ? true : false
33
+ matchSubElements(item, matchedElements, header, itemIsHeader)
34
+ })
35
+ }
36
+
37
+ matchedElements.push(element)
38
+ }
39
+
40
+ function matchHeader(header, matchedElements) {
41
+ matchSubElements(header, matchedElements, null, true)
42
+ }
43
+
44
+ function matchElement(header, matchedElements, regexp){
45
+ var directSibElement = $(header).nextUntil(header.tagName)[0]
46
+ var $elements = []
47
+
48
+ if (directSibElement){
49
+ $elements = $(directSibElement.children)
50
+ }
51
+
52
+ if (header.textContent.match(regexp)){
53
+ matchHeader(header, matchedElements)
54
+
55
+ if (directSibElement) {addMatch(matchedElements, directSibElement) }
56
+
57
+ addNextElements($elements, matchedElements)
58
+ } else {
59
+ if (!!$elements.length) {
60
+ for (var i = 0; i < $elements.length; i++){
61
+ if ($elements[i].textContent.match(regexp)){
62
+ matchSubElements($elements[i], matchedElements, header)
63
+ addMatch(matchedElements, directSibElement)
64
+ matchHeader(header, matchedElements)
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+
71
+ document.addEventListener("DOMContentLoaded", function() {
72
+
73
+ if (!document.querySelector('#ae-search-box')) { return; }
74
+ document.querySelector("#ae-search-box").addEventListener("input", function(event) {
75
+
76
+ var searchTerm = this.value
77
+ var headers = Array.prototype.slice.call(document.querySelector('.js-anchorific-content').querySelectorAll("h2"))
78
+ var regexp = new RegExp(searchTerm, "igm")
79
+ var allElements = document.querySelector('.js-anchorific-content').querySelectorAll('*')
80
+ var allElementsArray = Array.prototype.slice.call(allElements)
81
+ var matchedElements = []
82
+ var unmatchedElements = []
83
+
84
+ for (var i = 0; i < headers.length; i++) {
85
+ if (matchedElements.includes(headers[i]) == false){
86
+ matchElement(headers[i], matchedElements, regexp)
87
+ }
88
+ }
89
+
90
+ unmatchedElements = allElementsArray.filter(function(element, index) {
91
+ return matchedElements.indexOf(element) === -1
92
+ })
93
+
94
+ unmatchedElements.map(function(item, index) {
95
+ item.style.display = "none"
96
+ })
97
+
98
+ matchedElements.map(function(item, index) {
99
+ item.style.display = ""
100
+ })
101
+ })
102
+ })
103
+
@@ -0,0 +1,90 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
3
+ //= require anchorific
4
+ //= require resizable
5
+
6
+ $(function() {
7
+
8
+ $('.ae-sidebar-right').resizable({
9
+ handles: 'w',
10
+ minWidth: 100,
11
+ maxWidth: $('.ae-sidebar-right').parent().width() * 0.4,
12
+ containment: '.ae-template-master-detail-fixed',
13
+ resize: function(event, ui){
14
+ var siblingMain = ui.element.siblings('.ae-content')
15
+ var siblingSidebar = ui.element.siblings('.ae-sidebar')
16
+ var parent = ui.element.parent()
17
+ ui.size.height = ui.originalSize.height
18
+ siblingMain.width(parent.width() - (siblingSidebar.width() + ui.size.width) - 100)
19
+ },
20
+ stop: function(event, ui){
21
+ ui.element.css('left', '')
22
+ }
23
+ })
24
+
25
+ var rightCaretIcon = "<i class='fa fa-caret-right'></i>"
26
+
27
+ $(".js-anchorific-content").anchorific({
28
+ headers: ':header:not(.ae-demo-container :header)'
29
+ });
30
+
31
+ $(".anchorific ul > li").each(function(index, item) {
32
+ $(item).has("ul").children("a").prepend(rightCaretIcon)
33
+ });
34
+
35
+ $('.anchorific a').on('click', function(e){
36
+ $(e.target).closest('li[data-tag]').children('ul').toggle()
37
+ $(e.target).find('i').toggleClass('fa-caret-right fa-caret-down')
38
+
39
+ $('html, body').animate({
40
+ scrollTop: $('[id="' + $.attr($(e.target).closest('a')[0], 'href').substr(1) + '"]').offset().top
41
+ }, 500);
42
+ return false;
43
+ });
44
+
45
+ $('body').append("<a href='#' class='ae-btn ae-btn-secondary ae-btn-sm back-to-top'>Back to top &nbsp;<i class='fa fa-long-arrow-up'></i></a>");
46
+ $('.back-to-top').css('display', 'none')
47
+
48
+ // Freeze body when scrolling over sidebar
49
+ // $(".ae-sidebar-overlay").on("mouseover", function() {
50
+ // $("body").css("overflow-y", "hidden");
51
+ // $(this).css('z-index', '-1');
52
+ // });
53
+
54
+ // $(".js-ae-sidebar").on("mouseleave", function() {
55
+ // $("body").css("overflow-y", "auto");
56
+ // $(this).css('z-index', '1');
57
+ // });
58
+
59
+ $(window).scroll(function() {
60
+ if ($(this).scrollTop() >= 100) { // If page is scrolled more than 100px
61
+ $('.back-to-top').fadeIn(200); // Fade in the arrow
62
+ } else {
63
+ $('.back-to-top').fadeOut(100); // Else fade out the arrow
64
+ }
65
+ });
66
+
67
+ $('.back-to-top').click(function() {
68
+ $("html, body").animate({ scrollTop: 0 }, "slow");
69
+ return false;
70
+ });
71
+
72
+
73
+ //demo tabs
74
+ $('.ae-demo-container').on('click', '.ae-tab', function(e){
75
+ $clickedTab = $(this)
76
+ $parentContainer = $clickedTab.parents('.ae-demo-container')
77
+ tabContent = $clickedTab.data('tab')
78
+
79
+ $parentContainer.find('.ae-tab.active-tab').removeClass('active-tab')
80
+ $clickedTab.addClass('active-tab')
81
+ $parentContainer.find('.ae-tab-content.active-tab').removeClass('active-tab')
82
+ $parentContainer.find('#' + tabContent).addClass('active-tab')
83
+ });
84
+ });
85
+
86
+ $( document ).ready(function() {
87
+ $("ul li[data-tag='2']").children("ul").css("display", "none");
88
+ });
89
+
90
+
@@ -0,0 +1,35 @@
1
+ @mixin easeInOut
2
+ -moz-transition: all 0.3s ease-in-out
3
+ -o-transition: all 0.3s ease-in-out
4
+ -webkit-transition: all 0.3s ease-in-out
5
+ transition: all 0.3s ease-in-out
6
+
7
+ @mixin animate($n)
8
+ transition: all $n ease-out
9
+
10
+ @mixin scale
11
+ transform: scale(1.1)
12
+
13
+ .ae-fade-in
14
+ &:hover
15
+ animation: fadeIn 1s linear
16
+
17
+ .ae-fade-out
18
+ &:hover
19
+ animation: fadeOut 1s linear
20
+
21
+ .ae-ease-in-out
22
+ &:hover
23
+ @include easeInOut
24
+
25
+ @keyframes fadeIn
26
+ 0%
27
+ opacity: 0
28
+ 100%
29
+ opacity: 1
30
+
31
+ @keyframes fadeOut
32
+ 0%
33
+ opacity: 1
34
+ 100%
35
+ opacity: 0
@@ -0,0 +1,119 @@
1
+ @mixin button
2
+ @include border-radius(3px !important)
3
+ padding: 0.5em
4
+ margin: 0.25em 0.25em 0 0
5
+ border: 0
6
+ cursor: pointer
7
+
8
+ .ae-btn
9
+ @include easeInOut
10
+ @include button
11
+ display: inline-block
12
+ text-decoration: none
13
+ text-transform: uppercase
14
+ box-shadow: none
15
+ vertical-align: middle
16
+ @include body-font
17
+
18
+ &:hover, &-hover
19
+ @include box-shadow(0, 0px, 5px, 0, $border-dark)
20
+
21
+ &:active, &-active
22
+ @include box-shadow(inset, 2px, 2px, 2px, darken($secondary-color, 5%))
23
+
24
+ &:focus, &-focus
25
+ @include box-shadow(inset, 2px, 2px, 2px, darken($secondary-color, 5%))
26
+ outline-color: $primary-color
27
+
28
+
29
+ .ae-btn-default
30
+ background: $secondary-color
31
+ border: 1px solid $secondary-color
32
+ color: $icon-color !important
33
+
34
+ &:active, &:focus
35
+ @include box-shadow(inset, 2px, 2px, 2px, darken($secondary-color, 20%))
36
+
37
+ .ae-btn-primary
38
+ background: $primary-color
39
+ border: 1px solid $primary-color
40
+ color: #fff !important
41
+
42
+ *
43
+ color: #fff !important
44
+
45
+ &.ae-btn-border
46
+ color: $primary-color !important
47
+
48
+
49
+ &:active, &:focus
50
+ @include box-shadow(inset, 2px, 2px, 2px, darken($primary-color, 20%))
51
+
52
+ .ae-btn-secondary
53
+ background: $secondary-color
54
+ border: 1px solid $secondary-color
55
+ color: #fff !important
56
+
57
+ *
58
+ color: #fff !important
59
+
60
+ &.ae-btn-border
61
+ color: $secondary-color !important
62
+
63
+ &:active, &:focus
64
+ @include box-shadow(inset, 2px, 2px, 2px, darken($secondary-color, 5%))
65
+
66
+ .ae-btn-success
67
+ background: $success
68
+ border: 1px solid $success
69
+ color: #fff !important
70
+
71
+ *
72
+ color: #fff !important
73
+
74
+ &:active, &:focus
75
+ @include box-shadow(inset, 2px, 2px, 2px, darken($success, 20%))
76
+
77
+ .ae-btn-danger
78
+ background: $cancelled
79
+ border: 1px solid $cancelled
80
+ color: #fff !important
81
+
82
+ *
83
+ color: #fff !important
84
+
85
+ &:active, &:focus
86
+ @include box-shadow(inset, 2px, 2px, 2px, darken($cancelled, 20%))
87
+
88
+
89
+ .ae-btn-sm
90
+ padding-top: 0.25em
91
+ padding-bottom: 0.25em
92
+ @include h6
93
+
94
+ .ae-btn-md
95
+ padding-top: 0.45em
96
+ padding-bottom: 0.45em
97
+ @include h5
98
+
99
+ .ae-btn-lg
100
+ padding-top: 0.5em
101
+ padding-bottom: 0.5em
102
+ @include h4
103
+
104
+ .ae-btn-border
105
+ border-style: solid
106
+ border-width: 1px
107
+ background: none
108
+
109
+ &:active
110
+ @include box-shadow(inset, 2px, 2px, 2px, lighten($secondary-color, 15%))
111
+
112
+ .ae-btn-disabled, button:disabled
113
+ background: lighten($secondary-color, 30%)
114
+ color: #ccc
115
+ cursor: not-allowed
116
+ border-color: lighten($secondary-color, 30%)
117
+
118
+ &:hover
119
+ box-shadow: none