@finqu/cool 1.2.29 → 2.0.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.
Files changed (221) hide show
  1. package/README.md +694 -1
  2. package/dist/css/cool.css +26902 -14322
  3. package/dist/css/cool.css.map +1 -154
  4. package/dist/css/cool.min.css +2 -7
  5. package/dist/css/cool.min.css.map +1 -1
  6. package/dist/js/cool.bundle.js +16191 -5588
  7. package/dist/js/cool.bundle.js.map +1 -1
  8. package/dist/js/cool.bundle.min.js +13 -8
  9. package/dist/js/cool.bundle.min.js.map +1 -1
  10. package/dist/js/cool.esm.js +4722 -4812
  11. package/dist/js/cool.esm.js.map +1 -1
  12. package/dist/js/cool.esm.min.js +4 -9
  13. package/dist/js/cool.esm.min.js.map +1 -1
  14. package/dist/js/cool.js +5143 -5240
  15. package/dist/js/cool.js.map +1 -1
  16. package/dist/js/cool.min.js +4 -9
  17. package/dist/js/cool.min.js.map +1 -1
  18. package/package.json +125 -60
  19. package/scss/LISENCE +1 -1
  20. package/scss/_badge.scss +134 -102
  21. package/scss/_button-group.scss +80 -129
  22. package/scss/_buttons.scss +257 -201
  23. package/scss/_dark.scss +637 -0
  24. package/scss/_dialog.scss +314 -123
  25. package/scss/_dropdown.scss +165 -233
  26. package/scss/_forms.scss +555 -200
  27. package/scss/_frame.scss +945 -624
  28. package/scss/_grid.scss +215 -35
  29. package/scss/_input-group.scss +326 -285
  30. package/scss/_list-group.scss +127 -82
  31. package/scss/_media.scss +439 -0
  32. package/scss/_navbar.scss +116 -284
  33. package/scss/_notification.scss +111 -9
  34. package/scss/_pagination.scss +82 -88
  35. package/scss/_popover.scss +61 -167
  36. package/scss/_reboot.scss +306 -284
  37. package/scss/_root.scss +848 -15
  38. package/scss/_section.scss +735 -977
  39. package/scss/_select.scss +559 -187
  40. package/scss/_tables.scss +471 -595
  41. package/scss/_tabs.scss +50 -178
  42. package/scss/_toast.scss +242 -147
  43. package/scss/_tooltip.scss +130 -101
  44. package/scss/_typography.scss +166 -0
  45. package/scss/_variables.scss +1154 -748
  46. package/scss/cool.scss +64 -32
  47. package/scss/utilities/_align.scss +51 -41
  48. package/scss/utilities/_animation.scss +165 -0
  49. package/scss/utilities/_background.scss +72 -14
  50. package/scss/utilities/_borders.scss +205 -146
  51. package/scss/utilities/_collapse.scss +20 -25
  52. package/scss/utilities/_cursor.scss +160 -22
  53. package/scss/utilities/_display.scss +116 -16
  54. package/scss/utilities/_embed.scss +89 -78
  55. package/scss/utilities/_fill.scss +79 -0
  56. package/scss/utilities/_filters.scss +233 -0
  57. package/scss/utilities/_flex.scss +216 -52
  58. package/scss/utilities/_grid.scss +136 -0
  59. package/scss/utilities/_opacity.scss +131 -0
  60. package/scss/utilities/_overflow.scss +242 -6
  61. package/scss/utilities/_perfect-scrollbar.scss +147 -141
  62. package/scss/utilities/_pointer-events.scss +125 -0
  63. package/scss/utilities/_position.scss +130 -30
  64. package/scss/utilities/_screen-readers.scss +95 -0
  65. package/scss/utilities/_shadows.scss +195 -0
  66. package/scss/utilities/_sizing.scss +288 -32
  67. package/scss/utilities/_spacing.scss +168 -92
  68. package/scss/utilities/_stroke.scss +124 -0
  69. package/scss/utilities/_text.scss +420 -99
  70. package/scss/utilities/_transform.scss +232 -0
  71. package/scss/utilities/_transitions.scss +147 -0
  72. package/scss/utilities/_user-select.scss +89 -10
  73. package/scss/utilities/_visibility.scss +62 -6
  74. package/scss/utilities/_z-index.scss +169 -0
  75. package/.babelrc.js +0 -20
  76. package/.browserslistrc +0 -13
  77. package/build/.eslintrc.json +0 -10
  78. package/build/banner.js +0 -14
  79. package/build/build-plugins.js +0 -92
  80. package/build/rollup.config.js +0 -46
  81. package/dist/css/cool-grid.css +0 -4390
  82. package/dist/css/cool-grid.css.map +0 -30
  83. package/dist/css/cool-grid.min.css +0 -7
  84. package/dist/css/cool-grid.min.css.map +0 -1
  85. package/dist/css/cool-reboot.css +0 -286
  86. package/dist/css/cool-reboot.css.map +0 -62
  87. package/dist/css/cool-reboot.min.css +0 -7
  88. package/dist/css/cool-reboot.min.css.map +0 -1
  89. package/html/index.html +0 -2703
  90. package/js/dist/collapse.js +0 -5535
  91. package/js/dist/collapse.js.map +0 -1
  92. package/js/dist/common.js +0 -21996
  93. package/js/dist/common.js.map +0 -1
  94. package/js/dist/cooldropdown.js +0 -467
  95. package/js/dist/cooldropdown.js.map +0 -1
  96. package/js/dist/coolpopover.js +0 -391
  97. package/js/dist/coolpopover.js.map +0 -1
  98. package/js/dist/coolsectiontabs.js +0 -256
  99. package/js/dist/coolsectiontabs.js.map +0 -1
  100. package/js/dist/coolselect.js +0 -796
  101. package/js/dist/coolselect.js.map +0 -1
  102. package/js/dist/cooltooltip.js +0 -360
  103. package/js/dist/cooltooltip.js.map +0 -1
  104. package/js/dist/coolui.js +0 -73
  105. package/js/dist/coolui.js.map +0 -1
  106. package/js/dist/dropdown.js +0 -27421
  107. package/js/dist/dropdown.js.map +0 -1
  108. package/js/dist/popover.js +0 -9472
  109. package/js/dist/popover.js.map +0 -1
  110. package/js/dist/sectiontabs.js +0 -4483
  111. package/js/dist/sectiontabs.js.map +0 -1
  112. package/js/dist/select.js +0 -37080
  113. package/js/dist/select.js.map +0 -1
  114. package/js/dist/tooltip.js +0 -8786
  115. package/js/dist/tooltip.js.map +0 -1
  116. package/js/index.esm.js +0 -21
  117. package/js/index.umd.js +0 -21
  118. package/js/src/abstract-ui-component.js +0 -81
  119. package/js/src/collapse.js +0 -286
  120. package/js/src/common.js +0 -296
  121. package/js/src/dialog.js +0 -579
  122. package/js/src/dropdown.js +0 -525
  123. package/js/src/popover.js +0 -632
  124. package/js/src/section-tabs.js +0 -215
  125. package/js/src/select.js +0 -1342
  126. package/js/src/toast.js +0 -581
  127. package/js/src/tooltip.js +0 -591
  128. package/js/src/util/animate-css.js +0 -22
  129. package/js/src/util/index.js +0 -122
  130. package/js/src/util/perfect-scrollbar.js +0 -1316
  131. package/less/alert.less +0 -345
  132. package/less/badge.less +0 -38
  133. package/less/bootstrap-noconflict.less +0 -23
  134. package/less/bootstrap.less +0 -23
  135. package/less/button-group.less +0 -153
  136. package/less/buttons.less +0 -287
  137. package/less/dialog-noconflict.less +0 -174
  138. package/less/dialog.less +0 -203
  139. package/less/dropdown.less +0 -209
  140. package/less/forms.less +0 -770
  141. package/less/images.less +0 -242
  142. package/less/input-group.less +0 -163
  143. package/less/list-group.less +0 -73
  144. package/less/mixins/aspect-ratio.less +0 -23
  145. package/less/mixins/border-radius.less +0 -24
  146. package/less/mixins/box-shadow.less +0 -4
  147. package/less/mixins/buttons.less +0 -17
  148. package/less/mixins/caret.less +0 -51
  149. package/less/mixins/clearfix.less +0 -10
  150. package/less/mixins/gradients.less +0 -34
  151. package/less/mixins/nav-divider.less +0 -7
  152. package/less/mixins/object-fit.less +0 -13
  153. package/less/mixins/reset-text.less +0 -16
  154. package/less/mixins.less +0 -11
  155. package/less/package.json +0 -11
  156. package/less/pagination.less +0 -69
  157. package/less/popover.less +0 -143
  158. package/less/project.sublime-workspace +0 -774
  159. package/less/reboot.less +0 -235
  160. package/less/section.less +0 -793
  161. package/less/select.less +0 -150
  162. package/less/tables.less +0 -737
  163. package/less/tabs.less +0 -162
  164. package/less/tooltip.less +0 -87
  165. package/less/type.less +0 -71
  166. package/less/utilities/align.less +0 -27
  167. package/less/utilities/animate.less +0 -3512
  168. package/less/utilities/background.less +0 -70
  169. package/less/utilities/borders.less +0 -16
  170. package/less/utilities/color.less +0 -70
  171. package/less/utilities/cursor.less +0 -8
  172. package/less/utilities/display.less +0 -38
  173. package/less/utilities/embed.less +0 -61
  174. package/less/utilities/flex.less +0 -76
  175. package/less/utilities/jquery-ui.less +0 -116
  176. package/less/utilities/lazyload.less +0 -29
  177. package/less/utilities/overflow.less +0 -11
  178. package/less/utilities/pace.less +0 -25
  179. package/less/utilities/placeholder.less +0 -60
  180. package/less/utilities/position.less +0 -42
  181. package/less/utilities/scrollbar.less +0 -152
  182. package/less/utilities/spacing.less +0 -197
  183. package/less/utilities/text.less +0 -68
  184. package/less/utilities/transform.less +0 -7
  185. package/less/utilities.less +0 -21
  186. package/less/variables.less +0 -343
  187. package/scss/_alert.scss +0 -102
  188. package/scss/_custom-forms.scss +0 -444
  189. package/scss/_functions.scss +0 -124
  190. package/scss/_images.scss +0 -361
  191. package/scss/_mixins.scss +0 -34
  192. package/scss/_type.scss +0 -129
  193. package/scss/_utilities.scss +0 -23
  194. package/scss/cool-grid.scss +0 -29
  195. package/scss/cool-reboot.scss +0 -11
  196. package/scss/mixins/_alert-variant.scss +0 -20
  197. package/scss/mixins/_aspect-ratio.scss +0 -29
  198. package/scss/mixins/_background-variant.scss +0 -25
  199. package/scss/mixins/_badge-variant.scss +0 -36
  200. package/scss/mixins/_breakpoints.scss +0 -102
  201. package/scss/mixins/_buttons.scss +0 -104
  202. package/scss/mixins/_caret.scss +0 -80
  203. package/scss/mixins/_clearfix.scss +0 -10
  204. package/scss/mixins/_float.scss +0 -14
  205. package/scss/mixins/_forms.scss +0 -67
  206. package/scss/mixins/_gradients.scss +0 -40
  207. package/scss/mixins/_grid-framework.scss +0 -72
  208. package/scss/mixins/_grid.scss +0 -60
  209. package/scss/mixins/_nav-divider.scss +0 -9
  210. package/scss/mixins/_notification-variant.scss +0 -7
  211. package/scss/mixins/_object-fit.scss +0 -16
  212. package/scss/mixins/_reset-text.scss +0 -19
  213. package/scss/mixins/_text-emphasis.scss +0 -21
  214. package/scss/mixins/_text-hide.scss +0 -10
  215. package/scss/mixins/_text-truncate.scss +0 -81
  216. package/scss/mixins/_visibility.scss +0 -7
  217. package/scss/project.sublime-workspace +0 -491
  218. package/scss/utilities/_animate.scss +0 -3512
  219. package/scss/utilities/_clearfix.scss +0 -6
  220. package/scss/utilities/_lazyload.scss +0 -31
  221. package/scss/utilities/_placeholder.scss +0 -77
package/scss/_forms.scss CHANGED
@@ -1,258 +1,613 @@
1
- // Forms
2
- // ---------------------------------------------------------------------------------------------------------------
1
+ @use "variables" as *;
2
+ /* Forms ========================================================================== */
3
3
 
4
- html.dom-ready .form-control {
5
- transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
6
- }
4
+ @mixin cool-forms {
5
+ .form-control {
6
+ display: block;
7
+ width: 100%;
8
+ height: var(--cool-input-height);
9
+ padding: var(--cool-input-padding-y) var(--cool-input-padding-x);
10
+ font-family: var(--cool-input-font-family);
11
+ font-size: var(--cool-input-font-size);
12
+ font-weight: var(--cool-input-font-weight);
13
+ line-height: var(--cool-input-line-height);
14
+ color: var(--cool-input-color);
15
+ background-color: var(--cool-input-bg);
16
+ background-clip: padding-box;
17
+ border: var(--cool-input-border-width) solid var(--cool-input-border-color);
18
+ border-radius: var(--cool-input-border-radius);
19
+ transition:
20
+ color 0.15s ease-in-out,
21
+ box-shadow 0.15s ease-in-out;
22
+
23
+ &:focus {
24
+ border-color: var(--cool-input-focus-border-color);
25
+ outline: 0;
26
+
27
+ @supports selector(:focus-visible) {
28
+ outline: 0;
29
+ }
30
+ }
7
31
 
8
- .form-control {
9
- display: block;
10
- width: 100%;
11
- height: $input-height;
12
- padding: $input-padding-y $input-padding-x;
13
- font-family: $input-font-family;
14
- font-size: $input-font-size;
15
- font-weight: $input-font-weight;
16
- line-height: $input-line-height;
17
- color: $input-color;
18
- background-color: $input-bg;
19
- background-clip: padding-box;
20
- border: $input-border-width solid $input-border-color;
21
- border-radius: $input-border-radius;
22
- @include form-control-focus;
23
-
24
- // Unstyle the caret on `<select>`s in IE10+.
25
- &::-ms-expand {
26
- background-color: transparent;
27
- border: 0;
28
- }
32
+ &::placeholder {
33
+ color: var(--cool-input-placeholder-color);
34
+ opacity: 1;
35
+ }
29
36
 
30
- // Placeholder
31
- &::placeholder {
32
- color: $input-placeholder-color;
33
- opacity: 1;
37
+ &:disabled,
38
+ &[readonly] {
39
+ background-color: var(--cool-input-disabled-bg);
40
+ opacity: 1;
41
+ color: var(--cool-input-disabled-color);
42
+ }
34
43
  }
35
44
 
36
- // Disabled and read-only inputs
37
- &:disabled,
38
- &[readonly] {
39
- background-color: $input-disabled-bg;
40
- opacity: 1;
41
- color: $input-disabled-color;
45
+ .form-control-sm {
46
+ --cool-input-padding-y: var(--cool-input-padding-y-sm);
47
+ --cool-input-padding-x: var(--cool-input-padding-x-sm);
48
+ --cool-input-font-size: var(--cool-input-font-size-sm);
49
+ --cool-input-line-height: var(--cool-input-line-height-sm);
50
+ --cool-input-border-radius: var(--cool-input-border-radius-sm);
51
+ --cool-input-height: var(--cool-input-height-sm);
42
52
  }
43
- }
44
53
 
45
- select.form-control {
46
- // Suppress the nested default white text on blue background highlight on ie and edge
47
- &:focus::-ms-value {
48
- color: $input-color;
49
- background-color: $input-bg;
54
+ .form-control-lg {
55
+ --cool-input-padding-y: var(--cool-input-padding-y-lg);
56
+ --cool-input-padding-x: var(--cool-input-padding-x-lg);
57
+ --cool-input-font-size: var(--cool-input-font-size-lg);
58
+ --cool-input-line-height: var(--cool-input-line-height-lg);
59
+ --cool-input-border-radius: var(--cool-input-border-radius-lg);
60
+ --cool-input-height: var(--cool-input-height-lg);
50
61
  }
51
- }
52
62
 
63
+ textarea.form-control {
64
+ height: auto;
53
65
 
54
- // Labels
55
- .col-form-label {
56
- padding-top: calc(#{$input-padding-y} + #{$input-border-width});
57
- padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});
58
- margin-bottom: 0;
59
- font-size: inherit;
60
- line-height: $input-line-height;
61
- }
66
+ @supports (resize: vertical) {
67
+ resize: vertical;
68
+ }
69
+ }
62
70
 
63
- .col-form-label-lg {
64
- padding-top: calc(#{$input-padding-y-lg} + #{$input-border-width});
65
- padding-bottom: calc(#{$input-padding-y-lg} + #{$input-border-width});
66
- font-size: $input-font-size-lg;
67
- line-height: $input-line-height-lg;
68
- }
71
+ select.form-control {
72
+ &[size],
73
+ &[multiple] {
74
+ height: auto;
75
+ }
69
76
 
70
- .col-form-label-sm {
71
- padding-top: calc(#{$input-padding-y-sm} + #{$input-border-width});
72
- padding-bottom: calc(#{$input-padding-y-sm} + #{$input-border-width});
73
- font-size: $input-font-size-sm;
74
- line-height: $input-line-height-sm;
75
- }
77
+ &:focus::-ms-value {
78
+ color: var(--cool-input-color);
79
+ background-color: var(--cool-input-bg);
80
+ }
81
+ }
76
82
 
83
+ .form-control-underline {
84
+ display: inline-block;
85
+ width: auto;
86
+ height: auto;
87
+ min-height: 1.5em;
88
+ border: none;
89
+ border-bottom: var(--cool-input-border-width) solid var(--cool-input-border-color);
90
+ border-radius: 0;
91
+ padding: 2px;
92
+ margin: 0 2px;
93
+ font-size: 1em;
94
+ line-height: 1.5;
95
+ vertical-align: baseline;
96
+ color: currentColor;
97
+ appearance: none;
98
+ background-color: var(--cool-input-bg);
99
+
100
+ &:focus {
101
+ outline: none;
102
+ box-shadow: none;
103
+ border-bottom-color: var(--cool-input-focus-border-color);
104
+ }
105
+ }
77
106
 
78
- // Readonly controls as plain text
79
- .form-control-plaintext {
80
- display: block;
81
- width: 100%;
82
- padding-top: $input-padding-y;
83
- padding-bottom: $input-padding-y;
84
- margin-bottom: 0;
85
- line-height: $input-line-height;
86
- color: $input-plaintext-color;
87
- background-color: transparent;
88
- border: solid transparent;
89
- border-width: $input-border-width 0;
90
-
91
- &.form-control-sm,
92
- &.form-control-lg {
93
- padding-right: 0;
94
- padding-left: 0;
107
+ select.form-control-underline {
108
+ padding-right: 1.5em;
109
+ background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>');
110
+ background-repeat: no-repeat;
111
+ background-position: bottom -0.35em right -0.5em;
95
112
  }
96
- }
97
113
 
114
+ .col-form-label {
115
+ padding-top: calc(var(--cool-input-padding-y) + var(--cool-input-border-width));
116
+ padding-bottom: calc(var(--cool-input-padding-y) + var(--cool-input-border-width));
117
+ margin-bottom: 0;
118
+ font-size: inherit;
119
+ line-height: var(--cool-input-line-height);
120
+ }
98
121
 
99
- // Form control sizing
100
- .form-control-sm {
101
- height: $input-height-sm;
102
- padding: $input-padding-y-sm $input-padding-x-sm;
103
- font-size: $input-font-size-sm;
104
- line-height: $input-line-height-sm;
105
- border-radius: $input-border-radius-sm;
106
- }
122
+ .col-form-label-lg {
123
+ padding-top: calc(var(--cool-input-padding-y-lg) + var(--cool-input-border-width));
124
+ padding-bottom: calc(var(--cool-input-padding-y-lg) + var(--cool-input-border-width));
125
+ font-size: var(--cool-input-font-size-lg);
126
+ line-height: var(--cool-input-line-height-lg);
127
+ }
107
128
 
108
- .form-control-lg {
109
- height: $input-height-lg;
110
- padding: $input-padding-y-lg $input-padding-x-lg;
111
- font-size: $input-font-size-lg;
112
- line-height: $input-line-height-lg;
113
- border-radius: $input-border-radius-lg;
114
- }
129
+ .col-form-label-sm {
130
+ padding-top: calc(var(--cool-input-padding-y-sm) + var(--cool-input-border-width));
131
+ padding-bottom: calc(var(--cool-input-padding-y-sm) + var(--cool-input-border-width));
132
+ font-size: var(--cool-input-font-size-sm);
133
+ line-height: var(--cool-input-line-height-sm);
134
+ }
115
135
 
116
- select.form-control {
117
- &[size],
118
- &[multiple] {
119
- height: auto;
136
+ .form-group {
137
+ margin-bottom: var(--cool-form-group-margin-bottom);
120
138
  }
121
- }
122
139
 
123
- textarea.form-control {
124
- height: auto;
125
- }
140
+ .form-label-group {
141
+ position: relative;
126
142
 
143
+ select {
144
+ -webkit-appearance: none;
145
+ appearance: none;
127
146
 
128
- // Form groups
129
- .form-group {
130
- margin-bottom: $form-group-margin-bottom;
131
- }
147
+ @-moz-document url-prefix() {
148
+ text-indent: -2px;
149
+ }
150
+ }
132
151
 
133
- .form-text {
134
- display: block;
135
- margin-top: $form-text-margin-top;
136
- }
152
+ & > input,
153
+ select,
154
+ textarea,
155
+ label,
156
+ & > .input-group > label {
157
+ padding: var(--cool-input-padding-y) var(--cool-input-padding-x);
158
+ }
137
159
 
160
+ & > label,
161
+ & > .input-group > label {
162
+ position: absolute;
163
+ top: 0;
164
+ left: 0;
165
+ display: block;
166
+ width: 100%;
167
+ margin-bottom: 0;
168
+ line-height: var(--cool-input-line-height);
169
+ color: var(--cool-input-placeholder-color);
170
+ border: 1px solid transparent;
171
+ border-radius: var(--cool-border-radius);
172
+ transition: var(--cool-form-transition-fast);
173
+ pointer-events: none;
174
+ font-size: var(--cool-input-font-size);
175
+ white-space: nowrap;
176
+ text-overflow: ellipsis;
177
+ overflow: hidden;
178
+ }
138
179
 
139
- // Form grid
140
- .form-row {
141
- display: flex;
142
- flex-wrap: wrap;
143
- margin-right: -$form-grid-gutter-width / 2;
144
- margin-left: -$form-grid-gutter-width / 2;
180
+ input::-webkit-input-placeholder,
181
+ input:-ms-input-placeholder,
182
+ input::-ms-input-placeholder,
183
+ input::-moz-placeholder,
184
+ input::placeholder {
185
+ color: transparent;
186
+ }
145
187
 
146
- > .col,
147
- > [class*="col-"] {
148
- padding-right: $form-grid-gutter-width / 2;
149
- padding-left: $form-grid-gutter-width / 2;
150
- }
151
- }
188
+ &:not(.label-on-top) .show-when-label-on-top {
189
+ display: none;
190
+ }
152
191
 
192
+ &.label-on-top {
193
+ & > label,
194
+ & > .input-group > label {
195
+ line-height: 1;
196
+ font-size: 10px;
197
+ }
198
+
199
+ input,
200
+ select,
201
+ textarea {
202
+ padding-top: calc(var(--cool-input-padding-y) + var(--cool-input-padding-y) * (2 / 3));
203
+ padding-bottom: calc(var(--cool-input-padding-y) / 3);
204
+
205
+ & ~ label {
206
+ padding-top: calc(var(--cool-input-padding-y) / 3);
207
+ padding-bottom: calc(var(--cool-input-padding-y) / 3);
208
+ font-size: var(--cool-small-font-size);
209
+ color: var(--cool-input-placeholder-color);
210
+ }
211
+ }
212
+ }
153
213
 
154
- // Checkboxes and radios
155
- .form-check {
156
- position: relative;
157
- display: block;
158
- padding-left: $form-check-input-gutter;
159
- }
214
+ input:-webkit-autofill {
215
+ padding-top: calc(var(--cool-input-padding-y) + var(--cool-input-padding-y) * (2 / 3));
216
+ padding-bottom: calc(var(--cool-input-padding-y) / 3);
160
217
 
161
- .form-check-input {
162
- position: absolute;
163
- margin-top: $form-check-input-margin-y;
164
- margin-left: -$form-check-input-gutter;
218
+ & ~ label {
219
+ padding-top: calc(var(--cool-input-padding-y) / 3);
220
+ padding-bottom: calc(var(--cool-input-padding-y) / 3);
221
+ font-size: var(--cool-small-font-size);
222
+ color: var(--cool-input-placeholder-color);
223
+ }
224
+ }
165
225
 
166
- &:disabled ~ .form-check-label {
167
- color: theme-color('medium')
226
+ &.form-label-group-lg {
227
+ &.label-on-top {
228
+ input,
229
+ select,
230
+ textarea {
231
+ padding-top: calc(var(--cool-input-padding-y-lg) + var(--cool-input-padding-y-lg) * (2 / 3));
232
+ padding-bottom: calc(var(--cool-input-padding-y-lg) / 3);
233
+
234
+ & ~ label {
235
+ padding-top: calc(var(--cool-input-padding-y-lg) / 3);
236
+ padding-bottom: calc(var(--cool-input-padding-y-lg) / 3);
237
+ font-size: var(--cool-small-font-size);
238
+ color: var(--cool-input-placeholder-color);
239
+ }
240
+ }
241
+ }
242
+
243
+ & > input,
244
+ select,
245
+ textarea,
246
+ label,
247
+ & > .input-group > label {
248
+ padding: var(--cool-input-padding-y-lg) var(--cool-input-padding-x-lg);
249
+ }
250
+
251
+ input:-webkit-autofill {
252
+ padding-top: calc(var(--cool-input-padding-y-lg) + var(--cool-input-padding-y-lg) * (2 / 3));
253
+ padding-bottom: calc(var(--cool-input-padding-y-lg) / 3);
254
+
255
+ & ~ label {
256
+ padding-top: calc(var(--cool-input-padding-y-lg) / 3);
257
+ padding-bottom: calc(var(--cool-input-padding-y-lg) / 3);
258
+ font-size: var(--cool-small-font-size);
259
+ color: var(--cool-input-placeholder-color);
260
+ }
261
+ }
262
+ }
168
263
  }
169
- }
170
264
 
171
- .form-check-label {
172
- margin-bottom: 0;
173
- }
174
-
175
- .form-check-inline {
176
- display: inline-flex;
177
- align-items: center;
178
- padding-left: 0; // Override base .form-check
179
- margin-right: $form-check-inline-margin-x;
180
-
181
- // Undo .form-check-input defaults and add some `margin-right`.
182
- .form-check-input {
183
- position: static;
184
- margin-top: 0;
185
- margin-right: $form-check-inline-input-margin-x;
186
- margin-left: 0;
187
- }
188
- }
265
+ .form-control-placeholder {
266
+ display: block;
267
+ width: 100%;
268
+ height: var(--cool-input-height);
269
+ padding: var(--cool-input-padding-y) var(--cool-input-padding-x);
270
+ font-family: var(--cool-input-font-family);
271
+ font-size: var(--cool-input-font-size);
272
+ line-height: var(--cool-input-line-height);
273
+ color: var(--cool-body-color);
274
+ box-sizing: border-box;
275
+
276
+ &.input-lg {
277
+ --cool-input-padding-y: var(--cool-input-padding-y-lg);
278
+ --cool-input-padding-x: var(--cool-input-padding-x-lg);
279
+ --cool-input-font-size: var(--cool-input-font-size-lg);
280
+ --cool-input-line-height: var(--cool-input-line-height-lg);
281
+ --cool-input-height: var(--cool-input-height-lg);
282
+ }
189
283
 
284
+ &.input-sm {
285
+ --cool-input-padding-y: var(--cool-input-padding-y-sm);
286
+ --cool-input-padding-x: var(--cool-input-padding-x-sm);
287
+ --cool-input-font-size: var(--cool-input-font-size-sm);
288
+ --cool-input-line-height: var(--cool-input-line-height-sm);
289
+ --cool-input-height: var(--cool-input-height-sm);
290
+ }
190
291
 
191
- // Form validation
192
- @each $state, $data in $form-validation-states {
193
- @include form-validation-state($state, map-get($data, color));
194
- }
292
+ & + .input-validation {
293
+ width: 100%;
294
+ flex: 1;
295
+ }
296
+ }
195
297
 
298
+ .form-inline {
299
+ display: flex;
300
+ flex-flow: row wrap;
301
+ align-items: center;
302
+ gap: 0.5rem;
303
+
304
+ @include media-breakpoint-up(sm) {
305
+ label {
306
+ display: flex;
307
+ align-items: center;
308
+ justify-content: center;
309
+ margin-bottom: 0;
310
+ }
311
+
312
+ .form-group {
313
+ display: flex;
314
+ flex: 0 0 auto;
315
+ flex-flow: row wrap;
316
+ align-items: center;
317
+ margin-bottom: 0;
318
+ }
319
+
320
+ .form-control {
321
+ display: inline-block;
322
+ width: auto;
323
+ vertical-align: middle;
324
+ }
325
+
326
+ .input-group {
327
+ width: auto;
328
+ }
329
+ }
330
+ }
196
331
 
197
- // Inline forms
198
- .form-inline {
199
- display: flex;
200
- flex-flow: row wrap;
201
- align-items: center;
202
332
  .form-check {
203
- width: 100%;
204
- }
333
+ display: inline-flex;
205
334
 
206
- // Kick in the inline
207
- @include media-breakpoint-up(sm) {
335
+ &:has(input[type="radio"]) {
336
+ --cool-form-check-input-radius: 50%;
337
+ }
208
338
 
209
339
  label {
210
- display: flex;
340
+ display: inline-flex;
211
341
  align-items: center;
212
- justify-content: center;
213
- margin-bottom: 0;
342
+ margin: 0;
343
+ user-select: none;
344
+ cursor: pointer;
345
+ font-size: inherit;
346
+
347
+ &:hover .form-check-icon {
348
+ border-color: var(--cool-form-check-input-color);
349
+ }
214
350
  }
215
351
 
216
- // Inline-block all the things for "inline"
217
- .form-group {
218
- display: flex;
219
- flex: 0 0 auto;
220
- flex-flow: row wrap;
221
- align-items: center;
222
- margin-bottom: 0;
352
+ .form-check-icon {
353
+ position: relative;
354
+ width: var(--cool-form-check-input-size);
355
+ height: var(--cool-form-check-input-size);
356
+ min-width: var(--cool-form-check-input-size);
357
+ min-height: var(--cool-form-check-input-size);
358
+ border-radius: var(--cool-form-check-input-radius);
359
+ border: var(--cool-form-check-input-border-width) solid var(--cool-form-check-input-border-color);
360
+ border-radius: var(--cool-form-check-input-radius);
361
+ transition: var(--cool-form-transition-fast);
362
+ transform: scale(1);
363
+ vertical-align: middle;
364
+
365
+ svg {
366
+ position: absolute;
367
+ top: 4px;
368
+ left: 3.5px;
369
+ fill: none;
370
+ stroke: #ffffff;
371
+ stroke-width: 2.5px;
372
+ stroke-linecap: round;
373
+ stroke-linejoin: round;
374
+ stroke-linecap: round;
375
+ stroke-linejoin: round;
376
+ stroke-dasharray: var(--cool-form-check-input-size);
377
+ stroke-dashoffset: var(--cool-form-check-input-size);
378
+ transition: var(--cool-form-transition-normal);
379
+ transition-delay: 0.1s;
380
+
381
+ @include media-breakpoint-down(md) {
382
+ left: 3px;
383
+ }
384
+ }
223
385
  }
224
386
 
225
- // Allow folks to *not* use `.form-group`
226
- .form-control {
387
+ .form-check-label {
227
388
  display: inline-block;
228
- width: auto;
229
389
  vertical-align: middle;
390
+ width: 100%;
391
+ padding-left: var(--cool-spacing-2);
392
+ overflow: hidden;
393
+ text-overflow: ellipsis;
394
+ font-family: var(--cool-font-family-base);
395
+ font-style: normal;
396
+ font-weight: var(--cool-font-weight-base);
397
+ line-height: var(--cool-line-height-base);
398
+ text-align: start;
399
+ text-decoration: none;
400
+ text-shadow: none;
401
+ text-transform: none;
402
+ letter-spacing: normal;
403
+ word-break: normal;
404
+ word-spacing: normal;
405
+ white-space: normal;
406
+ line-break: auto;
230
407
  }
231
408
 
232
- // Make static controls behave like regular ones
233
- .form-control-plaintext {
234
- display: inline-block;
409
+ input[type="checkbox"],
410
+ input[type="radio"] {
411
+ display: none;
412
+
413
+ &:checked + label .form-check-icon {
414
+ background: var(--cool-form-check-input-color);
415
+ border-color: var(--cool-form-check-input-color);
416
+ animation: check-animation 0.4s ease;
417
+
418
+ svg {
419
+ stroke-dashoffset: 0;
420
+ }
421
+ }
422
+
423
+ &:disabled + label .form-check-icon,
424
+ &.disabled + label .form-check-icon {
425
+ cursor: not-allowed;
426
+ background-color: var(--cool-theme-color-light);
427
+ border: var(--cool-form-check-input-border-width) solid var(--cool-form-check-input-border-color);
428
+ opacity: 0.35;
429
+ }
430
+
431
+ &:disabled + label:hover .form-check-icon,
432
+ &.disabled + label:hover .form-check-icon {
433
+ border: var(--cool-form-check-input-border-width) solid var(--cool-form-check-input-border-color);
434
+ }
435
+
436
+ &:disabled:checked + label .form-check-icon,
437
+ &.disabled:checked + label .form-check-icon {
438
+ background: color-mix(in srgb, var(--cool-theme-color-info) 85%, white);
439
+ }
235
440
  }
441
+ }
442
+
443
+ .form-switch {
444
+ display: inline-flex;
445
+ vertical-align: middle;
446
+ position: relative;
447
+ user-select: none;
448
+ width: var(--cool-form-switch-width);
449
+ padding: 0;
236
450
 
237
- .input-group {
238
- width: auto;
451
+ & + label {
452
+ margin-left: var(--cool-spacing-2);
453
+ margin-bottom: 0;
454
+ flex-basis: 0;
455
+ flex-grow: 1;
239
456
  }
240
457
 
241
- // Remove default margin on radios/checkboxes that were used for stacking, and then undo the floating of radios and checkboxes to match.
242
- .form-check {
243
- display: flex;
244
- align-items: center;
245
- justify-content: center;
246
- width: auto;
247
- padding-left: 0;
458
+ .form-switch-input {
459
+ display: none;
460
+
461
+ &:disabled {
462
+ cursor: not-allowed;
463
+ pointer-events: none;
464
+
465
+ & + .form-switch-label {
466
+ opacity: 0.4;
467
+
468
+ &:hover {
469
+ cursor: not-allowed;
470
+ }
471
+ }
472
+ }
248
473
  }
249
474
 
250
- .form-check-input {
251
- position: relative;
252
- flex-shrink: 0;
253
- margin-top: 0;
254
- margin-right: $form-check-input-margin-x;
255
- margin-left: 0;
475
+ .form-switch-label {
476
+ display: block;
477
+ width: 100%;
478
+ overflow: hidden;
479
+ cursor: pointer;
480
+ height: var(--cool-form-check-input-size);
481
+ padding: 0;
482
+ line-height: var(--cool-form-check-input-size);
483
+ border: 2px solid var(--cool-color-grey-600);
484
+ border-radius: var(--cool-form-check-input-size);
485
+ background-color: var(--cool-color-grey-600);
486
+ margin-bottom: 0;
487
+ box-sizing: content-box;
488
+ transition:
489
+ background-color var(--cool-switch-transition),
490
+ border-color var(--cool-switch-transition);
491
+
492
+ &:before {
493
+ content: "";
494
+ display: block;
495
+ width: var(--cool-form-check-input-size);
496
+ height: var(--cool-form-check-input-size);
497
+ margin: 0px;
498
+ background: #ffffff;
499
+ position: absolute;
500
+ top: 0;
501
+ right: var(--cool-form-check-input-size);
502
+ bottom: 0;
503
+ border: 2px solid var(--cool-color-grey-600);
504
+ border-radius: var(--cool-form-check-input-size);
505
+ transition:
506
+ background-color var(--cool-switch-transition),
507
+ border-color var(--cool-switch-transition),
508
+ right var(--cool-switch-transition);
509
+ box-sizing: content-box;
510
+ }
511
+ }
512
+
513
+ .form-switch-input:checked + .form-switch-label {
514
+ background-color: var(--cool-theme-color-info);
515
+ }
516
+
517
+ .form-switch-input:checked + .form-switch-label,
518
+ .form-switch-input:checked + .form-switch-label:before {
519
+ border-color: var(--cool-theme-color-info);
520
+ }
521
+
522
+ .form-switch-input:checked + .form-switch-label:before {
523
+ right: 0px;
256
524
  }
257
525
  }
258
- }
526
+
527
+ // Validation
528
+ .valid-feedback {
529
+ display: none;
530
+ width: 100%;
531
+ margin-top: var(--cool-form-feedback-margin-top);
532
+ font-size: var(--cool-form-feedback-font-size);
533
+ color: var(--cool-form-feedback-valid-color);
534
+ }
535
+
536
+ .invalid-feedback {
537
+ display: none;
538
+ width: 100%;
539
+ margin-top: var(--cool-form-feedback-margin-top);
540
+ font-size: var(--cool-form-feedback-font-size);
541
+ color: var(--cool-form-feedback-invalid-color);
542
+ }
543
+
544
+ .input-group {
545
+ .was-validated &:valid,
546
+ &.is-valid {
547
+ .form-control,
548
+ .input-group-text,
549
+ .input-dropdown {
550
+ border-color: var(--cool-form-feedback-valid-color);
551
+ }
552
+
553
+ ~ .valid-feedback {
554
+ display: block;
555
+ }
556
+ }
557
+
558
+ .was-validated &:invalid,
559
+ &.is-invalid {
560
+ .form-control,
561
+ .input-group-text,
562
+ .input-dropdown {
563
+ border-color: var(--cool-form-feedback-invalid-color);
564
+ }
565
+
566
+ ~ .invalid-feedback {
567
+ display: block;
568
+ }
569
+ }
570
+ }
571
+
572
+ .form-control {
573
+ .was-validated &:valid,
574
+ &.is-valid {
575
+ border-color: var(--cool-form-feedback-valid-color);
576
+
577
+ &:focus {
578
+ border-color: var(--cool-form-feedback-valid-color);
579
+ }
580
+
581
+ ~ .valid-feedback {
582
+ display: block;
583
+ }
584
+ }
585
+
586
+ .was-validated &:invalid,
587
+ &.is-invalid {
588
+ border-color: var(--cool-form-feedback-invalid-color);
589
+
590
+ &:focus {
591
+ border-color: var(--cool-form-feedback-invalid-color);
592
+ }
593
+
594
+ ~ .invalid-feedback {
595
+ display: block;
596
+ }
597
+ }
598
+ }
599
+
600
+ @keyframes check-animation {
601
+ 50% {
602
+ transform: scale(0.9);
603
+ }
604
+ }
605
+ }
606
+
607
+ @if $cool-use-component-layer {
608
+ @layer components {
609
+ @include cool-forms;
610
+ }
611
+ } @else {
612
+ @include cool-forms;
613
+ }