tungsten 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/tungsten/tungsten.js +5 -7
- data/app/assets/stylesheets/tungsten/core/_cards.scss +15 -7
- data/app/assets/stylesheets/tungsten/form/_base.scss +9 -3
- data/app/assets/stylesheets/tungsten/form/_check-switch.scss +1 -0
- data/app/assets/stylesheets/tungsten/form/_index.scss +1 -0
- data/app/assets/stylesheets/tungsten/form/_label-placeholder.scss +24 -21
- data/app/assets/stylesheets/tungsten/form/_validation.scss +72 -0
- data/app/helpers/tungsten/button_helper.rb +71 -0
- data/app/helpers/tungsten/card_helper.rb +21 -54
- data/app/helpers/tungsten/deployments_helper.rb +2 -2
- data/app/helpers/tungsten/form_helper.rb +5 -7
- data/lib/tungsten/version.rb +1 -1
- data/public/{code-0.1.1.js → code-0.1.2.js} +8 -8
- data/public/code-0.1.2.js.gz +0 -0
- data/public/code-0.1.2.map.json +1 -0
- data/public/{tungsten-0.1.1.css → tungsten-0.1.2.css} +113 -22
- data/public/tungsten-0.1.2.css.gz +0 -0
- data/public/{tungsten-0.1.1.js → tungsten-0.1.2.js} +3 -3
- data/public/tungsten-0.1.2.js.gz +0 -0
- data/public/tungsten-0.1.2.map.json +1 -0
- metadata +12 -10
- data/public/code-0.1.1.js.gz +0 -0
- data/public/code-0.1.1.map.json +0 -1
- data/public/tungsten-0.1.1.css.gz +0 -0
- data/public/tungsten-0.1.1.js.gz +0 -0
- data/public/tungsten-0.1.1.map.json +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 485aa16cdbb3ff7a8880fab83541fb5aee360533
|
4
|
+
data.tar.gz: c2dc7ff628762fe63152282f12931069381149a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12a0b669adc672af3c518ec67d32a796bf830444b62e49c45c5224526475f71b1410ddcda38eb45614754ded8212f796a9aac6f8db0ce8f9539a39fa21ef4370
|
7
|
+
data.tar.gz: 9155fc7a0fde8da462885bfe39e997dd0560645015744c628ea4f6e6a04dd938ad39729c4e1b77d90c4e6108c6f06fa742094eba23d03f84fc0d6ed0e3addb6e
|
@@ -1,20 +1,18 @@
|
|
1
|
-
var toggler = require('compose-toggler')
|
1
|
+
var toggler = require( 'compose-toggler' )
|
2
2
|
var formUp = require( 'compose-form-up' )
|
3
3
|
var toolbox = require( 'compose-toolbox' )
|
4
4
|
var ajax = require( 'superagent' )
|
5
5
|
var event = toolbox.event
|
6
6
|
|
7
|
-
event.scroll.disablePointer()
|
7
|
+
event.scroll.disablePointer() // disable pointer events on scroll for performance (to avoid extra repaints)
|
8
8
|
|
9
|
-
require('compose-slider') // Our slider (range input) component
|
10
|
-
require('./_icons') // Import svg icons (from Esvg)
|
9
|
+
require( 'compose-slider' ) // Our slider (range input) component
|
10
|
+
require( './_icons' ) // Import svg icons (from Esvg)
|
11
11
|
require( './_form_helpers' )
|
12
12
|
|
13
13
|
// Public API object
|
14
|
-
|
14
|
+
window.Tungsten = module.exports = toolbox.merge( {
|
15
15
|
ajax : ajax,
|
16
16
|
form : formUp,
|
17
17
|
toggler : toggler
|
18
18
|
}, toolbox )
|
19
|
-
|
20
|
-
window.tungsten = module.exports = tungsten
|
@@ -36,6 +36,10 @@
|
|
36
36
|
button {
|
37
37
|
margin-left: 10px;
|
38
38
|
}
|
39
|
+
|
40
|
+
a {
|
41
|
+
@include inline-link($gray-08, $gray-09);
|
42
|
+
}
|
39
43
|
}
|
40
44
|
|
41
45
|
#{$block-elements} {
|
@@ -65,7 +69,16 @@
|
|
65
69
|
font-size: 16px;
|
66
70
|
}
|
67
71
|
|
68
|
-
|
72
|
+
header, footer {
|
73
|
+
display: flex;
|
74
|
+
align-items: baseline;
|
75
|
+
.card-actions {
|
76
|
+
margin-top: 0;
|
77
|
+
margin-left: auto;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
footer {
|
69
82
|
display: flex;
|
70
83
|
align-items: baseline;
|
71
84
|
@include collapse-top;
|
@@ -77,14 +90,9 @@
|
|
77
90
|
background-clip: padding-box;
|
78
91
|
border-top: $card-padding solid transparent;
|
79
92
|
margin: auto $card-padding * -1 $card-padding * -1 $card-padding * -1;
|
80
|
-
|
81
|
-
.card-actions {
|
82
|
-
margin-top: 0;
|
83
|
-
margin-left: auto;
|
84
|
-
}
|
85
93
|
}
|
86
94
|
}
|
87
95
|
|
88
96
|
table.card {
|
89
97
|
display: table;
|
90
|
-
}
|
98
|
+
}
|
@@ -21,8 +21,8 @@ label { *, *:before, *:after {
|
|
21
21
|
@return 0 0 0 $size $color inset, $empty-shadow;
|
22
22
|
}
|
23
23
|
|
24
|
-
@function input-focus-shadow($color: $gray-08) {
|
25
|
-
@return 0 0 0
|
24
|
+
@function input-focus-shadow($color: $gray-08, $size: 1px) {
|
25
|
+
@return 0 0 0 $size $color inset, $input-weight-shadow
|
26
26
|
}
|
27
27
|
|
28
28
|
$focus-shadow: input-focus-shadow();
|
@@ -225,11 +225,17 @@ label {
|
|
225
225
|
flex: 1 0 auto;
|
226
226
|
margin: 18px 0;
|
227
227
|
|
228
|
-
|
228
|
+
.label-text {
|
229
229
|
transition-property: box-shadow, color;
|
230
|
+
padding-bottom: .2em;
|
230
231
|
}
|
232
|
+
|
231
233
|
select, input, textarea {
|
232
234
|
margin: 0px;
|
233
235
|
}
|
234
236
|
}
|
235
237
|
|
238
|
+
form.button_to {
|
239
|
+
width: auto;
|
240
|
+
display: inline-flex;
|
241
|
+
}
|
@@ -1,21 +1,18 @@
|
|
1
1
|
@mixin label-placeholder {
|
2
2
|
// Scoped variables
|
3
|
-
$
|
4
|
-
$padding-
|
5
|
-
$
|
6
|
-
$
|
3
|
+
$padding-x: .8em;
|
4
|
+
$padding-y: 2em;
|
5
|
+
$distance-y: .6em;
|
6
|
+
$font-size: 1em;
|
7
7
|
$distance-x: 0;
|
8
|
-
$scale: .
|
9
|
-
$height: 50px;
|
10
|
-
$duration: .2s;
|
8
|
+
$scale: .8;
|
11
9
|
|
12
10
|
// Input labels
|
13
11
|
label.placeholder-label {
|
14
12
|
|
15
|
-
padding
|
16
|
-
line-height: 2em;
|
17
|
-
background: $white;
|
13
|
+
padding: 0;
|
18
14
|
font-size: $font-size;
|
15
|
+
background: $white;
|
19
16
|
|
20
17
|
// Nested text-based inputs
|
21
18
|
> input,
|
@@ -45,14 +42,18 @@
|
|
45
42
|
margin: 0;
|
46
43
|
font-size: inherit;
|
47
44
|
background: transparent;
|
48
|
-
padding: $padding-y $padding-x;
|
45
|
+
padding: ($padding-y / 2) $padding-x;
|
49
46
|
|
50
47
|
// Move labels out of the way on focus and empty
|
51
|
-
&:focus
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
48
|
+
&:focus, &:not(.empty) {
|
49
|
+
padding-top: $padding-y - ($distance-y / 1.5);
|
50
|
+
padding-bottom: ($distance-y / 1.5);
|
51
|
+
|
52
|
+
+ .placeholder-label-text, {
|
53
|
+
z-index: 2;
|
54
|
+
transform: translate3d($distance-x, -($distance-y), 0) scale($scale);
|
55
|
+
color: $gray-08;
|
56
|
+
}
|
56
57
|
}
|
57
58
|
}
|
58
59
|
|
@@ -67,8 +68,9 @@
|
|
67
68
|
input {
|
68
69
|
line-height: inherit;
|
69
70
|
}
|
71
|
+
|
70
72
|
textarea {
|
71
|
-
padding-top: $padding-y + 4;
|
73
|
+
padding-top: ($padding-y / 2) + 4;
|
72
74
|
}
|
73
75
|
}
|
74
76
|
|
@@ -76,9 +78,8 @@
|
|
76
78
|
.placeholder-label-text {
|
77
79
|
pointer-events: none;
|
78
80
|
font-size: inherit;
|
79
|
-
line-height: 1.2em;
|
80
81
|
position: absolute;
|
81
|
-
top: $padding-y
|
82
|
+
top: ($padding-y / 2);
|
82
83
|
left: $padding-x;
|
83
84
|
padding: 1px 0 0 1px;
|
84
85
|
transform-origin: left top 0;
|
@@ -89,8 +90,10 @@
|
|
89
90
|
color: $gray-06;
|
90
91
|
transform: translate3d(0, 0, 0) scale(1);
|
91
92
|
transition-property: color, transform;
|
92
|
-
|
93
|
-
|
93
|
+
|
94
|
+
.label-text ~ & {
|
95
|
+
top: $font-size / 2 + $padding-y;
|
96
|
+
}
|
94
97
|
}
|
95
98
|
}
|
96
99
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
// Apply validation styles to inputs & textareas
|
2
|
+
label.valid {
|
3
|
+
color: $green-01;
|
4
|
+
|
5
|
+
input, select, textarea {
|
6
|
+
//color: currentColor;
|
7
|
+
-webkit-text-fill-color: currentColor;
|
8
|
+
box-shadow: input-shadow( $green-01 );
|
9
|
+
|
10
|
+
@include input-active {
|
11
|
+
box-shadow: input-focus-shadow( $green-01 )
|
12
|
+
}
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
label.invalid {
|
17
|
+
color: $red-01;
|
18
|
+
|
19
|
+
input, select, textarea {
|
20
|
+
//color: currentColor;
|
21
|
+
-webkit-text-fill-color: currentColor;
|
22
|
+
box-shadow: input-shadow( $red-01, 2px );
|
23
|
+
|
24
|
+
@include input-active {
|
25
|
+
box-shadow: input-focus-shadow( $red-01, 2px )
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
// Validation message animation declaration
|
31
|
+
@keyframes expand-validation {
|
32
|
+
0% { max-height: 0em; }
|
33
|
+
100% { max-height: 2.5em; }
|
34
|
+
}
|
35
|
+
|
36
|
+
@keyframes scale-fade-in {
|
37
|
+
0% {
|
38
|
+
opacity: 0;
|
39
|
+
transform: translate(-50%, -6px) scale(.5);
|
40
|
+
}
|
41
|
+
|
42
|
+
100% {
|
43
|
+
opacity: 1;
|
44
|
+
transform: translate(-50%, 6px) scale(1);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
// Inline validation messages
|
49
|
+
.validation-message {
|
50
|
+
overflow: hidden;
|
51
|
+
display: block;
|
52
|
+
z-index: 3;
|
53
|
+
animation: expand-validation $duration $timing;
|
54
|
+
position: relative;
|
55
|
+
top: -1px;
|
56
|
+
|
57
|
+
// Message bubble (also a hack to maintain proper word wrap)
|
58
|
+
.validation-message-text {
|
59
|
+
margin: 0;
|
60
|
+
display: block;
|
61
|
+
padding: .8em .8em;
|
62
|
+
border-radius: 0 0 $radius $radius;
|
63
|
+
color: $white;
|
64
|
+
font-size: 12px;
|
65
|
+
line-height: 1em;
|
66
|
+
background: $gray-08;
|
67
|
+
|
68
|
+
.invalid & {
|
69
|
+
background: $red-01;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Tungsten
|
2
|
+
module ButtonHelper
|
3
|
+
def button(text = nil, options = nil, &block)
|
4
|
+
options = text if block_given? && options.nil?
|
5
|
+
options ||= {}
|
6
|
+
tag_name = options[:href].present? ? :a : :button
|
7
|
+
|
8
|
+
options[:class] = button_classes(options)
|
9
|
+
options[:data] ||= {}
|
10
|
+
options[:data][:toggle] = options.delete(:toggle)
|
11
|
+
options[:data][:confirm] = options.delete(:confirm)
|
12
|
+
options[:data][:remote] = options[:remote]
|
13
|
+
options[:type] = 'submit' if options[:to]
|
14
|
+
|
15
|
+
button_options = {
|
16
|
+
role: 'button',
|
17
|
+
id: options.delete(:id),
|
18
|
+
data: options.delete(:data),
|
19
|
+
class: options.delete(:class),
|
20
|
+
disabled: options.delete(:disabled),
|
21
|
+
type: options.delete(:type) || 'button'
|
22
|
+
}
|
23
|
+
|
24
|
+
text = capture(&block).html_safe if block_given?
|
25
|
+
|
26
|
+
button = content_tag tag_name, button_options do
|
27
|
+
concat text
|
28
|
+
end
|
29
|
+
|
30
|
+
if options[:to]
|
31
|
+
form = button_to 'input', options.delete(:to), options
|
32
|
+
form.sub(/<input type="submit".+?>/, button).html_safe
|
33
|
+
else
|
34
|
+
button
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def primary_button(text = nil, options = nil, &block)
|
39
|
+
options = text if block_given? && options.nil?
|
40
|
+
options ||= {}
|
41
|
+
options[:class] = "#{options[:class]} primary".strip
|
42
|
+
options[:type] = 'submit'
|
43
|
+
button(text, options, &block)
|
44
|
+
end
|
45
|
+
|
46
|
+
def destructive_button(text = nil, options = nil, &block)
|
47
|
+
options = text if block_given? && options.nil?
|
48
|
+
options ||= {}
|
49
|
+
options[:class] = "#{options[:class]} destructive".strip
|
50
|
+
options[:method] = 'delete'
|
51
|
+
button(text, options, &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
def destructive_primary_button(text = nil, options = nil, &block)
|
55
|
+
options = text if block_given? && options.nil?
|
56
|
+
options ||= {}
|
57
|
+
options[:class] = "#{options[:class]} primary destructive".strip
|
58
|
+
options[:type] = 'submit'
|
59
|
+
options[:method] = 'delete'
|
60
|
+
button(text, options, &block)
|
61
|
+
end
|
62
|
+
|
63
|
+
def button_classes(options)
|
64
|
+
classes = ['button']
|
65
|
+
classes << options[:class]
|
66
|
+
classes << options.delete(:size)
|
67
|
+
classes.flatten.compact.uniq.join(' ').strip
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
@@ -1,76 +1,43 @@
|
|
1
1
|
module Tungsten
|
2
2
|
module CardHelper
|
3
|
-
class
|
3
|
+
class Card < Tungsten::Helper
|
4
4
|
|
5
|
-
def initialize( title=nil )
|
5
|
+
def initialize( title = nil, options = {} )
|
6
|
+
@options = options
|
6
7
|
@title = title
|
7
|
-
@children = { cards: [] }
|
8
|
-
|
9
|
-
heading( title ) if title
|
10
8
|
end
|
11
9
|
|
12
10
|
def display( body )
|
13
|
-
content_tag( :section, class: '
|
14
|
-
concat
|
15
|
-
concat
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def add_card(card)
|
20
|
-
@children[cards].push card
|
11
|
+
content_tag( :section, class: 'card' ) do
|
12
|
+
concat header( @title ) if @title
|
13
|
+
concat body
|
14
|
+
end
|
21
15
|
end
|
22
16
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
17
|
+
def header( text = nil, options = {}, &block )
|
18
|
+
options[:class] = "card-header #{options[:class]}".strip
|
19
|
+
|
20
|
+
content_tag( :header, options ) {
|
21
|
+
concat content_tag( :h2, text, class: 'card-heading' ) if text
|
22
|
+
concat capture(&block).html_safe if block_given?
|
23
|
+
}
|
26
24
|
end
|
27
25
|
|
28
|
-
def
|
29
|
-
|
30
|
-
nil
|
31
|
-
end
|
26
|
+
def footer( text = nil, options = {}, &block )
|
27
|
+
options[:class] = "card-footer #{options[:class]}".strip
|
32
28
|
|
33
|
-
|
34
|
-
|
35
|
-
concat title( text ) if text
|
29
|
+
content_tag( :footer, options ) {
|
30
|
+
concat content_tag( :p, text ) unless text.nil?
|
36
31
|
concat capture(&block).html_safe
|
37
32
|
}
|
38
33
|
end
|
39
34
|
|
40
|
-
def
|
41
|
-
|
42
|
-
content_tag(:h2) { text }
|
43
|
-
}
|
44
|
-
end
|
45
|
-
|
46
|
-
def content(options={}, &block )
|
47
|
-
content_tag(:section, class: "card-section #{options[:class]}", &block)
|
48
|
-
end
|
35
|
+
def actions( options={}, &block )
|
36
|
+
options[:class] = "card-actions #{options[:class]}".strip
|
49
37
|
|
50
|
-
|
51
|
-
content_tag(:footer, class: "card-footer #{options[:class]}", &block)
|
38
|
+
content_tag( :nav, options, &block )
|
52
39
|
end
|
53
40
|
|
54
|
-
private
|
55
|
-
|
56
|
-
def get_tag( tag, wrapper, text, options, &block )
|
57
|
-
text = if block_given?
|
58
|
-
capture(&block).html_safe
|
59
|
-
else
|
60
|
-
content_tag(wrapper){ text }
|
61
|
-
end
|
62
|
-
|
63
|
-
content_tag(tag, options ) { text }
|
64
|
-
end
|
65
|
-
|
66
|
-
def info
|
67
|
-
if @children[:heading]
|
68
|
-
content_tag(:div, class: 'section-info') {
|
69
|
-
concat @children[:heading]
|
70
|
-
concat @children[:description]
|
71
|
-
}
|
72
|
-
end
|
73
|
-
end
|
74
41
|
end
|
75
42
|
end
|
76
43
|
end
|