rolodex 2.0.0

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.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +25 -0
  6. data/Rakefile +1 -0
  7. data/karma.conf.js +87 -0
  8. data/lib/rolodex.rb +31 -0
  9. data/lib/rolodex/engine.rb +12 -0
  10. data/lib/rolodex/sass.rb +5 -0
  11. data/lib/rolodex/version.rb +3 -0
  12. data/package.json +33 -0
  13. data/rolodex.gemspec +29 -0
  14. data/spec/javascripts/rolodex_angular/modal.spec.coffee +13 -0
  15. data/spec/spec_helper.rb +0 -0
  16. data/spec/test_lib/angular-mocks.js +2173 -0
  17. data/spec/test_lib/angular.js +21883 -0
  18. data/spec/test_lib/jquery-2.1.1.js +9190 -0
  19. data/spec/test_lib/lodash.js +6785 -0
  20. data/vendor/assets/.keep +0 -0
  21. data/vendor/assets/images/alerts/icon-danger-dark.png +0 -0
  22. data/vendor/assets/images/alerts/icon-danger-dark.svg +9 -0
  23. data/vendor/assets/images/alerts/icon-danger-light.png +0 -0
  24. data/vendor/assets/images/alerts/icon-danger-light.svg +9 -0
  25. data/vendor/assets/images/alerts/icon-flop-dark.png +0 -0
  26. data/vendor/assets/images/alerts/icon-flop-dark.svg +11 -0
  27. data/vendor/assets/images/alerts/icon-flop-light.png +0 -0
  28. data/vendor/assets/images/alerts/icon-flop-light.svg +11 -0
  29. data/vendor/assets/images/alerts/icon-info-dark.png +0 -0
  30. data/vendor/assets/images/alerts/icon-info-dark.svg +9 -0
  31. data/vendor/assets/images/alerts/icon-info-light.png +0 -0
  32. data/vendor/assets/images/alerts/icon-info-light.svg +9 -0
  33. data/vendor/assets/images/alerts/icon-tick-dark.png +0 -0
  34. data/vendor/assets/images/alerts/icon-tick-dark.svg +9 -0
  35. data/vendor/assets/images/alerts/icon-tick-light.png +0 -0
  36. data/vendor/assets/images/alerts/icon-tick-light.svg +9 -0
  37. data/vendor/assets/images/forms/checkbox.png +0 -0
  38. data/vendor/assets/images/forms/checkbox.svg +13 -0
  39. data/vendor/assets/images/forms/icon-calendar.png +0 -0
  40. data/vendor/assets/images/forms/icon-calendar.svg +20 -0
  41. data/vendor/assets/images/forms/icon-search.png +0 -0
  42. data/vendor/assets/images/forms/icon-search.svg +13 -0
  43. data/vendor/assets/images/forms/icon-validating.gif +0 -0
  44. data/vendor/assets/images/forms/icon-validating.psd +0 -0
  45. data/vendor/assets/images/forms/radio-button.png +0 -0
  46. data/vendor/assets/images/forms/radio-button.svg +12 -0
  47. data/vendor/assets/images/icons/icon-caret.png +0 -0
  48. data/vendor/assets/images/icons/icon-caret.svg +24 -0
  49. data/vendor/assets/images/icons/icon-close-x.png +0 -0
  50. data/vendor/assets/images/icons/icon-close-x.svg +9 -0
  51. data/vendor/assets/images/icons/icon-expand-gray.png +0 -0
  52. data/vendor/assets/images/icons/icon-expand-gray.svg +11 -0
  53. data/vendor/assets/images/icons/icon-expand-white.png +0 -0
  54. data/vendor/assets/images/icons/icon-expand-white.svg +11 -0
  55. data/vendor/assets/images/icons/icon-image.png +0 -0
  56. data/vendor/assets/images/icons/icon-image.svg +12 -0
  57. data/vendor/assets/images/icons/icon-invalid.png +0 -0
  58. data/vendor/assets/images/icons/icon-invalid.svg +14 -0
  59. data/vendor/assets/images/icons/icon-plane.png +0 -0
  60. data/vendor/assets/images/icons/icon-plane.svg +15 -0
  61. data/vendor/assets/images/icons/icon-star-banner.png +0 -0
  62. data/vendor/assets/images/icons/icon-star-banner.svg +16 -0
  63. data/vendor/assets/images/icons/icon-suggest.png +0 -0
  64. data/vendor/assets/images/icons/icon-suggest.svg +15 -0
  65. data/vendor/assets/images/icons/icon-tick.png +0 -0
  66. data/vendor/assets/images/icons/icon-tick.svg +9 -0
  67. data/vendor/assets/images/icons/icon-valid.png +0 -0
  68. data/vendor/assets/images/icons/icon-valid.svg +9 -0
  69. data/vendor/assets/images/loading/loading.png +0 -0
  70. data/vendor/assets/images/loading/loading.svg +23 -0
  71. data/vendor/assets/images/logo/belly-logo.png +0 -0
  72. data/vendor/assets/images/logo/belly-logo.svg +19 -0
  73. data/vendor/assets/images/tooltips/tooltip-star.png +0 -0
  74. data/vendor/assets/images/tooltips/tooltip-star.svg +20 -0
  75. data/vendor/assets/javascripts/rolodex_angular.coffee +3 -0
  76. data/vendor/assets/javascripts/rolodex_angular/README.md +68 -0
  77. data/vendor/assets/javascripts/rolodex_angular/rolodex.coffee +11 -0
  78. data/vendor/assets/javascripts/rolodex_angular/src/accordion.coffee +100 -0
  79. data/vendor/assets/javascripts/rolodex_angular/src/alert.coffee +17 -0
  80. data/vendor/assets/javascripts/rolodex_angular/src/buttons.coffee +59 -0
  81. data/vendor/assets/javascripts/rolodex_angular/src/collapse.coffee +65 -0
  82. data/vendor/assets/javascripts/rolodex_angular/src/dateparser.coffee +125 -0
  83. data/vendor/assets/javascripts/rolodex_angular/src/datepicker.coffee +547 -0
  84. data/vendor/assets/javascripts/rolodex_angular/src/dropdown.coffee +143 -0
  85. data/vendor/assets/javascripts/rolodex_angular/src/modal.coffee +331 -0
  86. data/vendor/assets/javascripts/rolodex_angular/src/position.coffee +128 -0
  87. data/vendor/assets/javascripts/rolodex_angular/src/transition.coffee +73 -0
  88. data/vendor/assets/javascripts/rolodex_angular/template/accordion/accordion-group.ngt.haml +7 -0
  89. data/vendor/assets/javascripts/rolodex_angular/template/accordion/accordion.ngt.haml +1 -0
  90. data/vendor/assets/javascripts/rolodex_angular/template/alert/alert.ngt.haml +3 -0
  91. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/datepicker.ngt.haml +4 -0
  92. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/day.ngt.haml +20 -0
  93. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/month.ngt.haml +17 -0
  94. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/popup.ngt.haml +2 -0
  95. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/year.ngt.haml +17 -0
  96. data/vendor/assets/javascripts/rolodex_angular/template/modal/window.ngt.haml +2 -0
  97. data/vendor/assets/javascripts/vendor/jquery-1.10.2.min.js +6 -0
  98. data/vendor/assets/javascripts/vendor/modernizr-2.6.2.min.js +4 -0
  99. data/vendor/assets/stylesheets/rolodex.css.sass +26 -0
  100. data/vendor/assets/stylesheets/rolodex/base/_layout.sass +58 -0
  101. data/vendor/assets/stylesheets/rolodex/base/_typography.sass +123 -0
  102. data/vendor/assets/stylesheets/rolodex/components/_alerts.sass +112 -0
  103. data/vendor/assets/stylesheets/rolodex/components/_buttons.sass +103 -0
  104. data/vendor/assets/stylesheets/rolodex/components/_dropdowns.sass +121 -0
  105. data/vendor/assets/stylesheets/rolodex/components/_forms.sass +326 -0
  106. data/vendor/assets/stylesheets/rolodex/components/_icons.sass +76 -0
  107. data/vendor/assets/stylesheets/rolodex/components/_labels.sass +29 -0
  108. data/vendor/assets/stylesheets/rolodex/components/_lists.sass +15 -0
  109. data/vendor/assets/stylesheets/rolodex/components/_loading.sass +32 -0
  110. data/vendor/assets/stylesheets/rolodex/components/_media.sass +14 -0
  111. data/vendor/assets/stylesheets/rolodex/components/_modals.sass +83 -0
  112. data/vendor/assets/stylesheets/rolodex/components/_tables.sass +9 -0
  113. data/vendor/assets/stylesheets/rolodex/components/_tooltips.sass +123 -0
  114. data/vendor/assets/stylesheets/rolodex/settings/_settings.sass +33 -0
  115. data/vendor/assets/stylesheets/rolodex/settings/mixins/_bump.sass +51 -0
  116. data/vendor/assets/stylesheets/rolodex/settings/mixins/_icons.sass +17 -0
  117. data/vendor/assets/stylesheets/rolodex/settings/mixins/_layout.sass +52 -0
  118. data/vendor/assets/stylesheets/rolodex/settings/mixins/_rems.sass +41 -0
  119. data/vendor/assets/stylesheets/rolodex/settings/mixins/_svg.sass +10 -0
  120. data/vendor/assets/stylesheets/rolodex/settings/mixins/_typography.sass +65 -0
  121. data/vendor/assets/stylesheets/rolodex/settings/utilities/_layout.sass +51 -0
  122. data/vendor/assets/stylesheets/rolodex/settings/utilities/_misc.sass +13 -0
  123. data/vendor/assets/stylesheets/rolodex/settings/utilities/_typography.sass +60 -0
  124. data/vendor/assets/stylesheets/rolodex/settings/variables/_alerts.scss +27 -0
  125. data/vendor/assets/stylesheets/rolodex/settings/variables/_buttons.scss +10 -0
  126. data/vendor/assets/stylesheets/rolodex/settings/variables/_colors.scss +46 -0
  127. data/vendor/assets/stylesheets/rolodex/settings/variables/_labels.scss +10 -0
  128. data/vendor/assets/stylesheets/rolodex/settings/variables/_layout.scss +22 -0
  129. data/vendor/assets/stylesheets/rolodex/settings/variables/_misc.scss +12 -0
  130. data/vendor/assets/stylesheets/rolodex/settings/variables/_typography.scss +34 -0
  131. metadata +263 -0
@@ -0,0 +1,112 @@
1
+ // Alerts
2
+ // ========================================
3
+
4
+ .alert-title
5
+ display: block
6
+ font-weight: 600
7
+ +rem(margin-bottom, $baseline-step)
8
+
9
+ .alert-signal
10
+ font-weight: 600
11
+ line-height: 1
12
+ +rem(padding-right, 5px)
13
+ text-transform: uppercase
14
+
15
+ .alert-action
16
+ float: right
17
+
18
+ // Kinds
19
+
20
+ @each $alert in $alerts
21
+
22
+ $kind: nth($alert, 1)
23
+ $icon: nth($alert, 2)
24
+ $color: nth($alert, 3)
25
+ $color-light: nth($alert, 4)
26
+ $color-dark: nth($alert, 5)
27
+
28
+ .alert-banner-#{$kind},
29
+ .alert-inline-#{$kind}
30
+ background-repeat: no-repeat
31
+
32
+ a
33
+ text-decoration: underline
34
+
35
+ // Banner alerts
36
+
37
+ .alert-banner-#{$kind}
38
+ background-color: $color
39
+ +background-svg("alerts/icon-#{$icon}-light")
40
+ color: $white
41
+ +s-echo
42
+ +bump(padding, baselines-small gutters-half)
43
+ position: relative
44
+
45
+ .i-close
46
+ +rem(top, 23px)
47
+
48
+ a,
49
+ .alert-signal
50
+ color: $color-light
51
+
52
+ a:active,
53
+ a:hover
54
+ color: $white
55
+
56
+ .alert-signal
57
+ +s-delta
58
+
59
+ .alert-action
60
+ text-decoration: none
61
+
62
+ &.alert-dismissible
63
+ +rem(padding-right, $gutter-half * 3)
64
+
65
+ // Inline alerts
66
+
67
+ .alert-inline-#{$kind}
68
+ background-color: $color-light
69
+ +background-svg("alerts/icon-#{$icon}-dark")
70
+ +rem(border, 1px solid $color)
71
+ +rem(border-radius, $border-radius-base)
72
+ color: $black-offset
73
+ display: inline-block
74
+ +rem(padding, (($baseline-step * 1.5) - 1) ($gutter-half - 1))
75
+
76
+ a,
77
+ .alert-signal
78
+ color: $color
79
+
80
+ a:active,
81
+ a:hover
82
+ color: $color-dark
83
+
84
+ // Banner alerts
85
+ // ========================================
86
+
87
+ @each $alert in $alerts-banner
88
+
89
+ $kind: nth($alert, 1)
90
+ $width: nth($alert, 2)
91
+ $height: nth($alert, 3)
92
+ $offset: nth($alert, 4)
93
+
94
+ .alert-banner-#{$kind}
95
+ +rem(background-position, $gutter-half $offset)
96
+ +rem(background-size, $width $height)
97
+ +rem(padding-left, $gutter + $width)
98
+
99
+ // Inline alerts
100
+ // ========================================
101
+
102
+ @each $alert in $alerts-inline
103
+
104
+ $kind: nth($alert, 1)
105
+ $width: nth($alert, 2)
106
+ $height: nth($alert, 3)
107
+ $offset: nth($alert, 4)
108
+
109
+ .alert-inline-#{$kind}
110
+ +rem(background-position, 14px $offset)
111
+ +rem(background-size, $width $height)
112
+ +rem(padding-left, 24px + $width)
@@ -0,0 +1,103 @@
1
+ // Buttons
2
+ // ========================================
3
+
4
+ .btn
5
+ +rem(border, 1px solid transparent)
6
+ +rem(border-radius, $border-radius-base)
7
+ color: $white
8
+ cursor: pointer
9
+ display: inline-block
10
+ font-family: $font-family-open-sans
11
+ +s-foxtrot
12
+ +rem(line-height, $baseline-base)
13
+ margin: 0
14
+ outline: 0
15
+ +rem(padding, 8px 14px)
16
+ text-align: center
17
+ text-decoration: none
18
+ transition: $transition-all
19
+ vertical-align: middle
20
+ white-space: nowrap
21
+
22
+ &:hover,
23
+ &:active
24
+ color: $white
25
+
26
+ &[disabled],
27
+ &[disabled]:hover,
28
+ &[disabled]:focus,
29
+ &[disabled]:active
30
+ background-color: $gray-light
31
+ border-color: transparent
32
+ color: #eee
33
+ cursor: not-allowed
34
+
35
+ .btn-large
36
+ +s-delta
37
+ +rem(padding, 16px $gutter $baseline-small $gutter)
38
+
39
+ .btn-small
40
+ +rem(border-radius, $border-radius-mini)
41
+ +s-golf
42
+ +rem(padding, ($baseline-step - 1) 10px)
43
+
44
+ // Kinds
45
+ // ========================================
46
+
47
+ @each $btn in $btns
48
+
49
+ $kind: nth($btn, 1)
50
+ $bg-normal: nth($btn, 2)
51
+ $bg-hover: nth($btn, 3)
52
+ $bg-active: nth($btn, 4)
53
+
54
+ .btn-#{$kind}
55
+ background-color: $bg-normal
56
+
57
+ @if $kind == "boring"
58
+ border-color: $gray-light
59
+ color: $gray-dark
60
+
61
+ &:hover
62
+ background-color: $bg-hover
63
+
64
+ &:active
65
+ background-color: $bg-active
66
+
67
+ .btn-boring:hover,
68
+ .btn-boring:active
69
+ color: $gray-dark
70
+
71
+ // Alternate & Overlay
72
+ // ========================================
73
+
74
+ .btn-alt,
75
+ .btn-overlay
76
+ +rem(padding, 7px 13px)
77
+
78
+ &.btn-large
79
+ +rem(padding, 15px 28px 17px 28px)
80
+
81
+ &.btn-small
82
+ +rem(padding, ($baseline-step - 2) 10px)
83
+
84
+ // Alternate
85
+
86
+ .btn-alt
87
+ border-color: $white
88
+ +rem(border-width, 2px)
89
+
90
+ // Overlay
91
+
92
+ .btn-overlay
93
+ background-color: rgba($black, .3)
94
+ border-color: rgba($white, .5)
95
+ +rem(border-width, 2px)
96
+ color: $white
97
+
98
+ &:hover,
99
+ &:focus
100
+ background-color: rgba($black, .5)
101
+
102
+ &:active
103
+ background-color: rgba($black, .7)
@@ -0,0 +1,121 @@
1
+ // Dropdowns
2
+ // ========================================
3
+
4
+ // Functionality
5
+ // ========================================
6
+
7
+ [data-dropdown]
8
+ position: relative
9
+
10
+ [data-dropdown-content]
11
+ opacity: 0
12
+ pointer-events: none
13
+ position: absolute
14
+ transition: $transition-all
15
+ z-index: 4
16
+
17
+ [data-dropdown-open] &
18
+ opacity: 1
19
+ pointer-events: auto
20
+
21
+ // Dropdown arrow
22
+ // ========================================
23
+
24
+ .dropdown,
25
+ .dropdown-alt
26
+ display: inline-block
27
+ vertical-align: middle
28
+
29
+ .dropdown:after
30
+ +i-caret
31
+ content: ""
32
+ cursor: pointer
33
+ position: absolute
34
+ +rem(right, $gutter-half)
35
+ +center(y)
36
+ z-index: 3
37
+
38
+ .dropdown:hover:after,
39
+ .dropdown[data-dropdown-open]:after,
40
+ [data-dropdown-open] .dropdown:after
41
+ +rem(background-position, 0 -8px)
42
+
43
+ // Dropdown toggle
44
+ // ========================================
45
+
46
+ .dropdown-toggle
47
+ background-color: $white
48
+ +rem(border, 1px solid $gray-light)
49
+ +rem(border-radius, $border-radius-base)
50
+ color: $black-offset
51
+ cursor: pointer
52
+ +rem(padding, ($baseline-step + 2) 36px ($baseline-step + 2) ($gutter-half - 1))
53
+ text-align: left
54
+
55
+ &:focus
56
+ outline: 0
57
+
58
+ [data-dropdown-open] &
59
+ border-color: $blue
60
+
61
+ .form-row &
62
+ border-bottom-left-radius: 0
63
+ border-top-left-radius: 0
64
+
65
+ .dropdown-toggle-solo
66
+ +rem(padding, 20px 26px 20px 14px)
67
+
68
+ // Menu
69
+ // ========================================
70
+
71
+ .dropdown-menu
72
+ +box-overlay
73
+ +rem(margin-top, $baseline-x-small)
74
+ +rem(min-width, 140px)
75
+ right: 0
76
+ top: 100%
77
+
78
+ .dropdown-right &
79
+ left: 0
80
+ right: auto
81
+
82
+ .dropdown-menu-item
83
+
84
+ &:not(:last-child)
85
+ +rem(border-bottom, 1px solid $gray-light)
86
+
87
+ a
88
+ color: $black-offset
89
+ display: block
90
+ +rem(padding, 10px 22px)
91
+
92
+ &:hover,
93
+ &:focus
94
+ color: $blue
95
+
96
+ // Within a form row
97
+ // ========================================
98
+
99
+ .form-row
100
+
101
+ [data-dropdown]
102
+ width: 100%
103
+
104
+ .form-control:first-child,
105
+ .form-area:first-child
106
+ border-bottom-left-radius: 0
107
+ border-top-left-radius: 0
108
+
109
+ &:not(:first-child):not(:last-child)
110
+ .form-control,
111
+ .form-area
112
+ border-radius: 0
113
+
114
+ .dropdown-toggle
115
+ +rem(min-height, $baseline-step * 7)
116
+
117
+ // Error state
118
+ // ========================================
119
+
120
+ .form-error .dropdown-toggle
121
+ border-color: $red
@@ -0,0 +1,326 @@
1
+ // Forms
2
+ // ========================================
3
+
4
+ // Resets
5
+ // ========================================
6
+
7
+ fieldset
8
+ border: 0
9
+ margin: 0
10
+ min-width: 0
11
+ padding: 0
12
+ width: 100%
13
+
14
+ legend,
15
+ button::-moz-focus-inner,
16
+ input::-moz-focus-inner
17
+ border: 0
18
+ padding: 0
19
+
20
+ button[disabled],
21
+ html input[disabled]
22
+ cursor: not-allowed
23
+
24
+ input[type="checkbox"],
25
+ input[type="radio"]
26
+ box-sizing: border-box
27
+ padding: 0
28
+
29
+ input[type="search"]
30
+ -webkit-appearance: textfield
31
+ box-sizing: border-box
32
+
33
+ input[type="search"]::-webkit-search-cancel-button,
34
+ input[type="search"]::-webkit-search-decoration
35
+ -webkit-appearance: none
36
+
37
+ // Default styles
38
+ // ========================================
39
+
40
+ button,
41
+ input,
42
+ optgroup,
43
+ select,
44
+ textarea
45
+ color: inherit
46
+ font: inherit
47
+ margin: 0
48
+
49
+ .form-group
50
+ +rem(margin-bottom, $baseline-base)
51
+ position: relative
52
+
53
+ .form-label
54
+ display: inline-block
55
+ font-weight: 600
56
+ +rem(margin-bottom, $baseline-step)
57
+
58
+ .form-subtle,
59
+ .form-claim
60
+ +s-golf
61
+
62
+ .form-subtle
63
+ color: $gray
64
+ font-weight: 400
65
+
66
+ .form-claim
67
+ float: right
68
+ +rem(line-height, $baseline-base)
69
+ transition: $transition-all
70
+
71
+ // Text inputs and textareas
72
+
73
+ .form-control,
74
+ .form-area,
75
+ .form-placeholder
76
+ background-color: $white
77
+ background-image: none
78
+ +rem(border, 1px solid $gray-light)
79
+ +rem(border-radius, $border-radius-base)
80
+ color: $black-offset
81
+ display: block
82
+ +rem(padding, ($baseline-step + 2) ($gutter-half - 1))
83
+ position: relative
84
+ transition: border .15s ease, background-image .15s ease
85
+ width: 100%
86
+
87
+ &:focus
88
+ border-color: $blue
89
+ outline: 0
90
+ z-index: 2
91
+
92
+ &[disabled],
93
+ &[readonly],
94
+ [disabled] &
95
+ background-color: $white-offset
96
+ color: $gray-light
97
+ cursor: not-allowed
98
+
99
+ &:-ms-input-placeholder,
100
+ &:-moz-placeholder,
101
+ &::-webkit-input-placeholder
102
+ color: $gray
103
+
104
+ &::-moz-placeholder
105
+ opacity: 1
106
+
107
+ &[type='search']
108
+ +background-svg("forms/icon-search", 15px)
109
+ background-position: 14px 50%
110
+ background-repeat: no-repeat
111
+ +rem(padding-left, 38px)
112
+
113
+ .form-area
114
+ +rem(min-height, $baseline-large)
115
+
116
+ .form-date
117
+ +background-svg("forms/icon-calendar", 20px 21px)
118
+ background-position: right 14px top 50% // +rem doesn't work with 50%
119
+ background-repeat: no-repeat
120
+ +rem(padding-right, 48px)
121
+
122
+ .form-placeholder
123
+ background-color: $white-offset
124
+
125
+ .form-placeholder-link
126
+ float: right
127
+ +s-golf
128
+ +rem(line-height, $baseline-base)
129
+
130
+ // Checkboxes and radio buttons
131
+
132
+ .form-choice
133
+ +rem(padding-left, 20px)
134
+
135
+ input[type="radio"],
136
+ input[type="checkbox"]
137
+ float: left
138
+ +rem(margin-top, $baseline-step)
139
+ +rem(margin-left, -20px)
140
+
141
+ label[disabled]
142
+ color: $gray
143
+ cursor: not-allowed
144
+
145
+ // Custom radio buttons
146
+
147
+ .form-radio
148
+ &:not(:last-of-type)
149
+ +rem(margin-bottom, $baseline-step / 2)
150
+
151
+ label
152
+ cursor: pointer
153
+ +rem(padding-left, 6px)
154
+ position: relative
155
+
156
+ &:before
157
+ +background-svg("forms/radio-button", 20px 40px)
158
+ content: ""
159
+ +rem(height, 20px)
160
+ +rem(left, -20px)
161
+ position: absolute
162
+ top: 0
163
+ +rem(width, 20px)
164
+
165
+ .form-radio-active:before
166
+ +rem(background-position, 0 -20px)
167
+
168
+ // Horizontal styles
169
+ // ========================================
170
+
171
+ .form-row
172
+ border-collapse: separate
173
+ display: table
174
+ width: 100%
175
+
176
+ .form-label,
177
+ .form-btn
178
+ width: 1%
179
+
180
+ .form-label,
181
+ .form-control,
182
+ .form-area,
183
+ .form-btn
184
+ display: table-cell
185
+ vertical-align: top
186
+
187
+ .form-label,
188
+ .form-btn
189
+ position: relative
190
+
191
+ .form-label
192
+ background-color: $white-offset
193
+ +rem(border, 1px solid $gray-light)
194
+ border-right: 0
195
+ +rem(border-radius, $border-radius-base 0 0 $border-radius-base)
196
+ color: $gray-dark
197
+ +rem(padding, ($baseline-step + 2) ($gutter-half - 1))
198
+ white-space: nowrap
199
+
200
+ &[disabled]
201
+ color: $gray
202
+ cursor: not-allowed
203
+
204
+ > .form-control,
205
+ > .form-area,
206
+
207
+ &:first-child
208
+ border-bottom-right-radius: 0
209
+ border-top-right-radius: 0
210
+
211
+ &:last-child
212
+ border-bottom-left-radius: 0
213
+ border-top-left-radius: 0
214
+
215
+ &:not(:first-child):not(:last-child)
216
+ border-radius: 0
217
+
218
+ .form-btn:last-child
219
+ &:hover,
220
+ &:focus,
221
+ &:active
222
+ z-index: 2
223
+
224
+ .btn
225
+ border-bottom-left-radius: 0
226
+ border-top-left-radius: 0
227
+ +rem(margin-left, -1px)
228
+
229
+ // Help blocks
230
+ // ========================================
231
+
232
+ .form-help
233
+ color: $gray
234
+ +s-golf
235
+ font-weight: 400
236
+ +rem(margin, $baseline-step $gutter-half 0 $gutter-half)
237
+
238
+ .form-choice &
239
+ margin-left: 0
240
+
241
+ .form-help-title
242
+ color: $gray-dark
243
+ display: inline-block
244
+ +bump(margin, baselines-step)
245
+
246
+ .form-help-suggestions
247
+
248
+ li
249
+ +rem(line-height, $baseline-base)
250
+ +rem(padding-left, 18px)
251
+ position: relative
252
+
253
+ .i-suggest-tick,
254
+ .form-help-bullet
255
+ position: absolute
256
+ left: 0
257
+ transition: $transition-all
258
+
259
+ .i-suggest-tick
260
+ opacity: 0
261
+ +rem(top, 7px)
262
+
263
+ .form-help-bullet
264
+ display: inline-block
265
+ +s-delta
266
+ text-align: center
267
+ +rem(width, 12px)
268
+
269
+ .form-help-success
270
+
271
+ .i-suggest-tick
272
+ opacity: 1
273
+
274
+ .form-help-bullet
275
+ opacity: 0
276
+
277
+ // Validation
278
+ // ========================================
279
+
280
+ // Errors
281
+
282
+ .form-error
283
+
284
+ &.form-control,
285
+ &.form-area
286
+ border-color: $red
287
+ z-index: 1
288
+
289
+ &.form-choice
290
+ color: $red
291
+
292
+ // Icons
293
+
294
+ .form-validating,
295
+ .form-valid,
296
+ .form-invalid
297
+ +rem(background-position, right ($gutter-half - 1) top $baseline-x-small)
298
+ background-repeat: no-repeat
299
+ +rem(background-size, 16px)
300
+ +rem(padding-right, 44px)
301
+
302
+ .form-validating
303
+ background-image: image-url("forms/icon-validating.gif")
304
+
305
+ .form-valid
306
+ +background-svg("icons/icon-valid")
307
+
308
+ .form-invalid,
309
+ .form-invalid:focus
310
+ +background-svg("icons/icon-invalid")
311
+ border-color: $red
312
+
313
+ // Shake
314
+
315
+ .form-submit-invalid
316
+ animation: shake 1s ease both
317
+
318
+ @keyframes shake
319
+ 0%, 100%
320
+ transform: translateX(0)
321
+
322
+ 10%, 30%, 50%, 70%, 90%
323
+ +rem(transform, translateX(-5px))
324
+
325
+ 20%, 40%, 60%, 80%
326
+ +rem(transform, translateX(5px))