fleetio_spark 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +43 -0
  4. data/app/assets/javascripts/spark/_cookie.js +23 -0
  5. data/app/assets/javascripts/spark/_esvg.js +73 -0
  6. data/app/assets/javascripts/spark/_icons.js +19 -0
  7. data/app/assets/javascripts/spark/_modal.js +421 -0
  8. data/app/assets/javascripts/spark/_search.js +79 -0
  9. data/app/assets/javascripts/spark/_sidebar.js +13 -0
  10. data/app/assets/javascripts/spark/_stack.js +248 -0
  11. data/app/assets/javascripts/spark/_tree.js +68 -0
  12. data/app/assets/javascripts/spark/shims/_dataset.js +241 -0
  13. data/app/assets/javascripts/spark/spark.js +31 -0
  14. data/app/assets/stylesheets/spark/_icons.scss +15 -0
  15. data/app/assets/stylesheets/spark/_index.scss +5 -0
  16. data/app/assets/stylesheets/spark/components/_index.scss +6 -0
  17. data/app/assets/stylesheets/spark/components/_modal.scss +73 -0
  18. data/app/assets/stylesheets/spark/components/_nav-menu.scss +102 -0
  19. data/app/assets/stylesheets/spark/components/_sidebar.scss +280 -0
  20. data/app/assets/stylesheets/spark/components/_tooltip.scss +42 -0
  21. data/app/assets/stylesheets/spark/components/_tree-nav.scss +13 -0
  22. data/app/assets/stylesheets/spark/components/header/_app-admin-header.scss +82 -0
  23. data/app/assets/stylesheets/spark/components/header/_app-nav-header.scss +154 -0
  24. data/app/assets/stylesheets/spark/components/header/_index.scss +5 -0
  25. data/app/assets/stylesheets/spark/components/header/_search-results.scss +29 -0
  26. data/app/assets/stylesheets/spark/components/header/_search.scss +195 -0
  27. data/app/assets/stylesheets/spark/components/header/_trial-status.scss +43 -0
  28. data/app/assets/stylesheets/spark/core/_animations.scss +154 -0
  29. data/app/assets/stylesheets/spark/core/_base.scss +11 -0
  30. data/app/assets/stylesheets/spark/core/_colors.scss +94 -0
  31. data/app/assets/stylesheets/spark/core/_index.scss +7 -0
  32. data/app/assets/stylesheets/spark/core/_layout.scss +39 -0
  33. data/app/assets/stylesheets/spark/core/_mixins.scss +86 -0
  34. data/app/assets/stylesheets/spark/core/_text.scss +5 -0
  35. data/app/assets/stylesheets/spark/core/_vars.scss +76 -0
  36. data/app/assets/stylesheets/spark/form/_base.scss +124 -0
  37. data/app/assets/stylesheets/spark/form/_check-switch.scss +99 -0
  38. data/app/assets/stylesheets/spark/form/_index.scss +2 -0
  39. data/app/assets/stylesheets/spark/spark.scss +1 -0
  40. data/app/assets/svgs/spark/add.svg +3 -0
  41. data/app/assets/svgs/spark/admin-user.svg +5 -0
  42. data/app/assets/svgs/spark/chevron-down.svg +3 -0
  43. data/app/assets/svgs/spark/chevron-up.svg +3 -0
  44. data/app/assets/svgs/spark/close.svg +3 -0
  45. data/app/assets/svgs/spark/contact.svg +6 -0
  46. data/app/assets/svgs/spark/dashboard.svg +3 -0
  47. data/app/assets/svgs/spark/fuel.svg +3 -0
  48. data/app/assets/svgs/spark/inspection.svg +3 -0
  49. data/app/assets/svgs/spark/issue.svg +3 -0
  50. data/app/assets/svgs/spark/leaderboard.svg +5 -0
  51. data/app/assets/svgs/spark/logo.svg +1 -0
  52. data/app/assets/svgs/spark/map.svg +4 -0
  53. data/app/assets/svgs/spark/nav-menu.svg +5 -0
  54. data/app/assets/svgs/spark/part.svg +6 -0
  55. data/app/assets/svgs/spark/place.svg +5 -0
  56. data/app/assets/svgs/spark/question.svg +10 -0
  57. data/app/assets/svgs/spark/reminder.svg +3 -0
  58. data/app/assets/svgs/spark/report.svg +5 -0
  59. data/app/assets/svgs/spark/search.svg +3 -0
  60. data/app/assets/svgs/spark/service.svg +3 -0
  61. data/app/assets/svgs/spark/settings.svg +3 -0
  62. data/app/assets/svgs/spark/trip.svg +4 -0
  63. data/app/assets/svgs/spark/vehicle.svg +3 -0
  64. data/app/assets/svgs/spark/vendor.svg +4 -0
  65. data/app/helpers/spark/application_helper.rb +42 -0
  66. data/app/helpers/spark/icon_helper.rb +40 -0
  67. data/app/helpers/spark/input_helper.rb +163 -0
  68. data/app/helpers/spark/menu_helper.rb +113 -0
  69. data/app/helpers/spark/modal_helper.rb +52 -0
  70. data/app/helpers/spark/nav_menu_helper.rb +167 -0
  71. data/app/helpers/spark/tag_helper.rb +27 -0
  72. data/app/helpers/spark/trial_helper.rb +23 -0
  73. data/app/views/layouts/spark/application.html.slim +28 -0
  74. data/app/views/layouts/spark/blank.html.slim +9 -0
  75. data/app/views/layouts/spark/default.html.slim +13 -0
  76. data/config/autoprefixer.yml +4 -0
  77. data/config/esvg.yml +20 -0
  78. data/lib/fleetio_spark.rb +14 -0
  79. data/lib/fleetio_spark/helper.rb +163 -0
  80. data/lib/fleetio_spark/version.rb +3 -0
  81. data/public/spark-0.1.0.css +1442 -0
  82. data/public/spark-0.1.0.css.gz +0 -0
  83. data/public/spark-0.1.0.js +11927 -0
  84. data/public/spark-0.1.0.js.gz +0 -0
  85. metadata +211 -0
@@ -0,0 +1,43 @@
1
+ .trial-status {
2
+ display: none;
3
+ flex-shrink: 0;
4
+ white-space: nowrap;
5
+ align-items: center;
6
+ font-size: 12px;
7
+ color: $fl-purple-600;
8
+
9
+ .trial-status-link {
10
+ font-weight: 500;
11
+ text-decoration: none;
12
+ color: inherit;
13
+ background-color: transparent;
14
+ padding: $pad-xs $pad-base;
15
+ border-radius: 3px;
16
+ border: 1px solid $fl-purple-100;
17
+ margin-left: $pad-base;
18
+ transition-property: background-color, border-color;
19
+ transition-duration: $duration;
20
+ transition-timing-function: $timing;
21
+
22
+ &:hover,
23
+ &:focus {
24
+ background-color: $fl-purple-25;
25
+ border-color: $fl-purple-200;
26
+ }
27
+ }
28
+
29
+ @include at-least($width-sm) {
30
+ display: flex;
31
+ margin-right: $pad-lg;
32
+ }
33
+
34
+ &.trial-ending-soon {
35
+ color: $fl-yellow-600;
36
+ background-color: $fl-yellow-50;
37
+ }
38
+
39
+ &.trial-ended {
40
+ color: $fl-red-600;
41
+ background-color: $fl-red-25;
42
+ }
43
+ }
@@ -0,0 +1,154 @@
1
+ @keyframes fade-in {
2
+ 0% { opacity: 0; }
3
+ 100% { opacity: 1; }
4
+ }
5
+
6
+ @keyframes fade-out {
7
+ 0% { opacity: 1; }
8
+ 100% { opacity: 0; }
9
+ }
10
+
11
+ @keyframes slide-down {
12
+ 0% {
13
+ transform: translateY(-100%)
14
+ } 100% {
15
+ transform: translateY(0)
16
+ }
17
+ }
18
+
19
+ @keyframes slide-bg-down {
20
+ 0% {
21
+ background-position: left bottom;
22
+ }
23
+ 100% {
24
+ background-position: left top;
25
+ }
26
+ }
27
+
28
+ @keyframes slide-bg-up {
29
+ 0% {
30
+ background-position: left top;
31
+ }
32
+ 100% {
33
+ background-position: left bottom;
34
+ }
35
+ }
36
+
37
+ @keyframes slide-up {
38
+
39
+ 0% {
40
+ transform: translateY(0)
41
+ } 100% {
42
+ transform: translateY(-100%)
43
+ }
44
+ }
45
+ @keyframes modal-open {
46
+ 0% {
47
+ opacity: 0;
48
+ transform: scale(.97) perspective(300px);
49
+ }
50
+ 20% { opacity: 1; }
51
+ 100% {
52
+ opacity: 1;
53
+ transform: scale(1) perspective(300px);
54
+ }
55
+ }
56
+ @keyframes modal-close {
57
+ 0% {
58
+ opacity: 1;
59
+ transform: scale(1) perspective(300px);
60
+ }
61
+ 80% {
62
+ opacity: 0;
63
+ }
64
+ 100% {
65
+ opacity: 0;
66
+ transform: scale(.97) perspective(300px);
67
+ }
68
+ }
69
+
70
+ @keyframes dialog-open {
71
+ 0% {
72
+ opacity: 0;
73
+ transform: translateY(-50px) scale(.95) perspective(300px) rotateX(-3deg);
74
+ }
75
+ 20% { opacity: 1; }
76
+ 100% {
77
+ opacity: 1;
78
+ transform: translateY(0) scale(1) perspective(300px) rotateX(0);
79
+ }
80
+ }
81
+
82
+ @keyframes dialog-close {
83
+ 0% {
84
+ opacity: 1;
85
+ transform: translateY(0px) scale(1) perspective(300px) rotateX(0deg);
86
+ }
87
+ 80% {
88
+ opacity: 0;
89
+ }
90
+ 100% {
91
+ opacity: 0;
92
+ transform: translateY(-50px) scale(.95) perspective(300px) rotateX(-3deg);
93
+ }
94
+ }
95
+ // Transition to form step
96
+ @keyframes fade-in-right {
97
+ 0% {
98
+ opacity: 0;
99
+ transform: perspective(1px) translate3d(200px, 0, 0);
100
+ }
101
+
102
+ 100% {
103
+ opacity: 1;
104
+ transform: perspective(1px) translate3d(0, 0, 0);
105
+ }
106
+ }
107
+
108
+ // Transition away from form step
109
+ @keyframes fade-out-left {
110
+ 0% {
111
+ opacity: 1;
112
+ transform: perspective(1px) translate3d(0, 0, 0);
113
+ }
114
+
115
+ 99% {
116
+ opacity: 0;
117
+ transform: perspective(1px) translate3d(-200px, 0, 0);
118
+ }
119
+
120
+ 100% {
121
+ opacity: 0;
122
+ transform: perspective(1px) translate3d(-9999px, 0, 0);
123
+ }
124
+ }
125
+
126
+ // Transition away from form step
127
+ @keyframes fade-out-right {
128
+ 0% {
129
+ opacity: 1;
130
+ transform: perspective(1px) translate3d(0, 0, 0);
131
+ }
132
+
133
+ 99% {
134
+ opacity: 0;
135
+ transform: perspective(1px) translate3d(200px, 0, 0);
136
+ }
137
+
138
+ 100% {
139
+ opacity: 0;
140
+ transform: perspective(1px) translate3d(9999px, 0, 0);
141
+ }
142
+ }
143
+ // Return to previous form step
144
+ @keyframes fade-in-left {
145
+ 0% {
146
+ opacity: 0;
147
+ transform: perspective(1px) translate3d(-200px, 0, 0);
148
+ }
149
+
150
+ 100% {
151
+ opacity: 1;
152
+ transform: perspective(1px) translate3d(0, 0, 0);
153
+ }
154
+ }
@@ -0,0 +1,11 @@
1
+ *,
2
+ *:after,
3
+ *:before {
4
+ margin: 0;
5
+ padding: 0;
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ .hidden {
10
+ display: none;
11
+ }
@@ -0,0 +1,94 @@
1
+ // Fleetio Custom Colors
2
+ // ----------------------------------------------
3
+ // Shade darkens from 25 - 1000
4
+
5
+ // Grays
6
+ // ----------------------------------------------
7
+ $fl-white: #FFFFFF;
8
+ $fl-gray-25: #F6F7F7;
9
+ $fl-gray-50: #EDF1F2;
10
+ $fl-gray-100: #D3D9DB;
11
+ $fl-gray-200: #B7BEC1;
12
+ $fl-gray-300: #A2ABAE;
13
+ $fl-gray-400: #8D989C;
14
+ $fl-gray-500: #78858A;
15
+ $fl-gray-600: #636F73;
16
+ $fl-gray-700: #4E595C;
17
+ $fl-gray-800: #3A4245;
18
+ $fl-gray-900: #262C2D;
19
+ $fl-gray-1000: #121515;
20
+
21
+ // Greens
22
+ // ----------------------------------------------
23
+ $fl-green-25: #ECFBF3;
24
+ $fl-green-50: #C8F4DD;
25
+ $fl-green-100: #A5ECC6;
26
+ $fl-green-200: #81E5B0;
27
+ $fl-green-300: #5EDD99;
28
+ $fl-green-400: #3BD583;
29
+ $fl-green-500: #18cc6c;
30
+ $fl-green-600: #0FB860;
31
+ $fl-green-700: #07A254;
32
+ $fl-green-800: #028A48;
33
+ $fl-green-900: #00703B;
34
+ $fl-green-1000: #00542C;
35
+
36
+ // Blues
37
+ // ----------------------------------------------
38
+ $fl-blue-25: #EBF6FE;
39
+ $fl-blue-50: #C4E6FA;
40
+ $fl-blue-100: #9CD5F7;
41
+ $fl-blue-200: #75C4F3;
42
+ $fl-blue-300: #4EB3EF;
43
+ $fl-blue-400: #27A2EB;
44
+ $fl-blue-500: #0091E6;
45
+ $fl-blue-600: #007FD0;
46
+ $fl-blue-700: #006CB8;
47
+ $fl-blue-800: #00599C;
48
+ $fl-blue-900: #00467A;
49
+ $fl-blue-1000: #00325C;
50
+
51
+ // Yellows
52
+ // ----------------------------------------------
53
+ $fl-yellow-25: #FFFAEE;
54
+ $fl-yellow-50: #FFF1CF;
55
+ $fl-yellow-100: #FFE8AF;
56
+ $fl-yellow-200: #FFDF90;
57
+ $fl-yellow-300: #FFD571;
58
+ $fl-yellow-400: #FFCC52;
59
+ $fl-yellow-500: #FFC234;
60
+ $fl-yellow-600: #F2AA2A;
61
+ $fl-yellow-700: #E69120;
62
+ $fl-yellow-800: #D97818;
63
+ $fl-yellow-900: #CC5E10;
64
+ $fl-yellow-1000: #BF4509;
65
+
66
+ // Reds
67
+ // ----------------------------------------------
68
+ $fl-red-25: #FFF0EF;
69
+ $fl-red-50: #FDD2CF;
70
+ $fl-red-100: #FCB5B0;
71
+ $fl-red-200: #FF9992;
72
+ $fl-red-300: #F97C73;
73
+ $fl-red-400: #F65F54;
74
+ $fl-red-500: #F44336;
75
+ $fl-red-600: #EA352B;
76
+ $fl-red-700: #DB2821;
77
+ $fl-red-800: #CA1C19;
78
+ $fl-red-900: #B81111;
79
+ $fl-red-1000: #A60A0D;
80
+
81
+ // Purples
82
+ // ----------------------------------------------
83
+ $fl-purple-25: #F5F4FD;
84
+ $fl-purple-50: #E1DFF9;
85
+ $fl-purple-100: #CECBF5;
86
+ $fl-purple-200: #BBB6F1;
87
+ $fl-purple-300: #A8A2EC;
88
+ $fl-purple-400: #958DE8;
89
+ $fl-purple-500: #8279E3;
90
+ $fl-purple-600: #6C66C9;
91
+ $fl-purple-700: #5853AE;
92
+ $fl-purple-800: #454292;
93
+ $fl-purple-900: #333275;
94
+ $fl-purple-1000: #232357;
@@ -0,0 +1,7 @@
1
+ @import 'colors';
2
+ @import 'vars';
3
+ @import 'mixins';
4
+ @import 'base';
5
+ @import 'layout';
6
+ @import 'animations';
7
+ @import 'text';
@@ -0,0 +1,39 @@
1
+ .app-layout {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ position: relative;
6
+
7
+ main {
8
+ min-height: 100vh;
9
+ }
10
+ }
11
+
12
+ .app-layout {
13
+ @include at-least( $width-md ) {
14
+ margin-left: $primary-sidebar-width;
15
+
16
+ .app-nav-header {
17
+ left: $primary-sidebar-width;
18
+ }
19
+ .sidebar-nav { z-index: 1050; }
20
+
21
+ .hide-sidebar {
22
+ .app-layout { margin-left: 0; }
23
+ .app-nav-header { left: 0; }
24
+ .sidebar-nav { z-index: -1; }
25
+ }
26
+ }
27
+ }
28
+
29
+ .app-container {
30
+ flex-grow: 1;
31
+ position: relative;
32
+ padding-top: $app-nav-header-height;
33
+ background-color: $fl-gray-25;
34
+ }
35
+
36
+ body {
37
+ display: flex;
38
+ min-height: 100%;
39
+ }
@@ -0,0 +1,86 @@
1
+ // Until width media query mixin
2
+ @mixin until($width) {
3
+ $width: $width - 1;
4
+ @media all and (max-width: $width) {
5
+ @content;
6
+ }
7
+ }
8
+
9
+ // At least width media query mixin
10
+ @mixin at-least($width) {
11
+ @media all and (min-width: $width) {
12
+ @content;
13
+ }
14
+ }
15
+
16
+ // Between widths media query mixin
17
+ @mixin between($small-width, $large-width) {
18
+ $large-width: $large-width - 1;
19
+ @media (max-width: $large-width) and (min-width: $small-width) {
20
+ @content;
21
+ }
22
+ }
23
+
24
+ // HDPI media query mixin
25
+ @mixin hdpi() {
26
+ @media
27
+ only screen and (-webkit-min-device-pixel-ratio: 1.25),
28
+ only screen and ( min--moz-device-pixel-ratio: 1.25),
29
+ only screen and ( -o-min-device-pixel-ratio: 1.25/1),
30
+ only screen and ( min-device-pixel-ratio: 1.25),
31
+ only screen and ( min-resolution: 200dpi),
32
+ only screen and ( min-resolution: 1.25dppx) {
33
+ @content;
34
+ }
35
+ }
36
+
37
+ @mixin circular-button($size: 28px) {
38
+ display: flex;
39
+ justify-content: center;
40
+ align-items: center;
41
+ width: $size;
42
+ height: $size;
43
+ border-radius: 50%;
44
+ text-align: center;
45
+ }
46
+
47
+ // Font Smoothing (Useful for light text on dark background)
48
+ @mixin font-smoothing($value: on) {
49
+ @if $value == on {
50
+ -webkit-font-smoothing: antialiased;
51
+ -moz-osx-font-smoothing: grayscale;
52
+ }
53
+ @else {
54
+ -webkit-font-smoothing: subpixel-antialiased;
55
+ -moz-osx-font-smoothing: auto;
56
+ }
57
+ }
58
+
59
+ // Mixin for elevation depth box-shadows
60
+ @mixin elevation($z-value, $color: $elevation-base-color, $opacity-boost: 0) {
61
+ // $z-value must be unitless
62
+ @if type-of($z-value) != number or not unitless($z-value) {
63
+ @error "$z-value must be a unitless number, but received '#{$z-value}'";
64
+ }
65
+
66
+ // $z-value must be between 0 and 6
67
+ @if $z-value < 0 or $z-value > 6 {
68
+ @error "$z-value must be between 0 and 6, but received '#{$z-value}'";
69
+ }
70
+
71
+ // Get $z-values from umbra/penumbra/ambient maps
72
+ $umbra-z-value: map-get($elevation-umbra-map, $z-value);
73
+ $penumbra-z-value: map-get($elevation-penumbra-map, $z-value);
74
+ $ambient-z-value: map-get($elevation-ambient-map, $z-value);
75
+
76
+ // Get $color and $opacity-boost (if given)
77
+ $umbra-color: rgba($color, $elevation-umbra-opacity + $opacity-boost);
78
+ $penumbra-color: rgba($color, $elevation-penumbra-opacity + $opacity-boost);
79
+ $ambient-color: rgba($color, $elevation-ambient-opacity + $opacity-boost);
80
+
81
+ // Set box-shadow with values
82
+ box-shadow:
83
+ #{$umbra-z-value $umbra-color},
84
+ #{$penumbra-z-value $penumbra-color},
85
+ #{$ambient-z-value $ambient-color};
86
+ }
@@ -0,0 +1,5 @@
1
+ body {
2
+ font-family: $base-font;
3
+ font-size: $base-size;
4
+ line-height: $base-line-height;
5
+ }