@woosmap/ui 2.58.0 → 3.1.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.
@@ -36,12 +36,12 @@ let isConsoleStyle = false;
36
36
 
37
37
 
38
38
  if (mode === 'prod') {
39
- import('../src/styles/style-website.styl');
39
+ import('../src/styles/style-next-website.styl');
40
40
  import('../src/styles/style-stories.styl');
41
41
  } else {
42
42
  import('../src/styles/style-stories.styl').then((storiesStyl) => {
43
43
  import('../src/styles/style-console.styl').then((consoleStylLoaded) => {
44
- import('../src/styles/style-website.styl').then((websiteStylLoaded) => {
44
+ import('../src/styles/style-next-website.styl').then((websiteStylLoaded) => {
45
45
  const storeGlobals = sessionStorage.getItem('@storybook/preview/store');
46
46
  const globalTheme = storeGlobals ? JSON.parse(storeGlobals).globals.theme : null;
47
47
  const defaultStyle = urlParams.get('theme')|| globalTheme || "Website theme";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@woosmap/ui",
3
- "version": "2.58.0",
3
+ "version": "3.1.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/WebGeoServices/ui.git"
@@ -28,7 +28,7 @@
28
28
  "scripts": {
29
29
  "start": "yarn storybook:dev",
30
30
  "build": "rimraf dist && NODE_ENV=production babel src --out-dir dist --copy-files --no-copy-ignored --ignore '**/*.stories.js,**/*.test.js,**/*.styl' && yarn build-css",
31
- "build-css": "stylus ./src/styles/style-website.styl -o dist && stylus ./src/styles/style-console.styl -o dist && stylus ./src/styles/style-stories.styl -o dist",
31
+ "build-css": "stylus ./src/styles/style-next-website.styl -o dist && stylus ./src/styles/style-console.styl -o dist && stylus ./src/styles/style-stories.styl -o dist",
32
32
  "test": "react-scripts test",
33
33
  "test:generate-output": "react-scripts test --json --outputFile=./.storybook/jest-test-results.json --silent",
34
34
  "prestorybook:dev": "clear && echo \"DOING FIRST TEST RUN\" && CI=true npm run test:generate-output",
@@ -160,78 +160,26 @@ export default class SkeletonDemo extends Component {
160
160
  };
161
161
 
162
162
  render() {
163
- const {
164
- noheader,
165
- header,
166
- id,
167
- result,
168
- withMap,
169
- request,
170
- response,
171
- className,
172
- leftContent,
173
- docLink,
174
- docLabel,
175
- renderCode,
176
- subHeader,
177
- } = this.props;
163
+ const { result, request, response, renderCode } = this.props;
178
164
  const { copied } = this.state;
179
165
  return (
180
- <div className={cl('demo', className)} id={id}>
181
- <div className="demo__header">
182
- {!noheader && (
183
- <div className="demo__presentation">
184
- <div className="demo__title">
185
- <h1>{header.title}</h1>
186
- </div>
187
- <p className="demo__desc">
188
- {header.desc} &nbsp;
189
- <a
190
- rel="noreferrer"
191
- href={docLink || tr('http://developers.woosmap.com')}
192
- target="_blank"
193
- onClick={() => {
194
- const { trackEvent } = this.context;
195
- if (trackEvent) {
196
- trackEvent(
197
- 'Showcase',
198
- "Developer's Documentation",
199
- `User went to the ${header.title} documentation`
200
- );
201
- }
202
- }}
203
- >
204
- {docLabel || tr('Go to documentation')}
205
- </a>
206
- </p>
207
- <div className="demo__desc">{subHeader}</div>
166
+ <article className="demo">
167
+ <div className="demo__content">
168
+ <div className="demo__showcase">
169
+ <div className="demo__filters">
170
+ {this.renderHeaderFilters()}
171
+ {this.renderFooterFilters()}
172
+ </div>
173
+ <div className="demo__map">
174
+ <div className="map" ref={this.mapDivRef} />
208
175
  </div>
209
- )}
210
- </div>
211
- <div className="demo__content-wrapper">
212
- <div className="demo__content-header">
213
- {this.renderHeaderTagline()}
214
- {this.renderHeaderFilters()}
215
176
  </div>
216
- {this.renderFooterFilters()}
217
- <div className="demo__content">
218
- <div className="demo__results__leftcontent">{leftContent}</div>
219
- {result ? (
220
- <div className="demo__results">
221
- <div className="demo__results__header">{tr('Results')}</div>
222
- <div className="demo__results__content">{result}</div>
223
- </div>
224
- ) : null}
225
- {withMap ? (
226
- <div
227
- className={cl('demo__map', {
228
- 'demo__map--small': result,
229
- })}
230
- >
231
- <div className="map" ref={this.mapDivRef} />
232
- </div>
233
- ) : null}
234
- <div className="demo__api">
177
+ <div className="demo__data">
178
+ <div className="demo__results">
179
+ <div className="demo__results__header">{tr('Results')}</div>
180
+ <div className="demo__results__content">{result}</div>
181
+ </div>
182
+ <div className="demo__code">
235
183
  <Tab
236
184
  actions={[
237
185
  {
@@ -271,7 +219,7 @@ export default class SkeletonDemo extends Component {
271
219
  </div>
272
220
  </div>
273
221
  </div>
274
- </div>
222
+ </article>
275
223
  );
276
224
  }
277
225
  }
@@ -279,46 +227,28 @@ export default class SkeletonDemo extends Component {
279
227
  SkeletonDemo.contextType = TrackEventContext;
280
228
 
281
229
  SkeletonDemo.defaultProps = {
282
- id: '',
283
- docLink: null,
284
- docLabel: null,
285
230
  renderCode: null,
286
231
  headerFilters: null,
287
232
  headerTagline: null,
288
233
  footerFilters: null,
289
- leftContent: null,
290
- className: '',
291
234
  result: null,
292
- withMap: false,
293
235
  request: null,
294
236
  response: {},
295
237
  params: {},
296
- noheader: false,
297
238
  referer: '',
298
239
  body: '',
299
240
  method: '',
300
- header: null,
301
- subHeader: null,
302
241
  };
303
242
  SkeletonDemo.propTypes = {
304
- id: PropTypes.string,
305
- docLink: PropTypes.string,
306
243
  renderCode: PropTypes.func,
307
- docLabel: PropTypes.string,
308
244
  params: PropTypes.object,
309
- noheader: PropTypes.bool,
310
- header: PropTypes.object,
311
245
  headerTagline: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
312
- className: PropTypes.string,
313
246
  headerFilters: PropTypes.array,
314
247
  footerFilters: PropTypes.array,
315
248
  result: PropTypes.node,
316
- withMap: PropTypes.bool,
317
- leftContent: PropTypes.node,
318
249
  request: PropTypes.string,
319
250
  referer: PropTypes.string,
320
251
  body: PropTypes.string,
321
252
  method: PropTypes.string,
322
- subHeader: PropTypes.object,
323
253
  response: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
324
254
  };
@@ -1,23 +1,6 @@
1
1
  import React, { Component } from 'react';
2
2
  import cl from 'classnames';
3
3
  import PropTypes from 'prop-types';
4
- import { ReactComponent as Autocomplete } from '../../icons/autocomplete.svg';
5
- import { ReactComponent as Buildings } from '../../icons/buildings.svg';
6
- import { ReactComponent as Battery } from '../../icons/battery.svg';
7
- import { ReactComponent as Cars } from '../../icons/cars.svg';
8
- import { ReactComponent as Github } from '../../icons/github.svg';
9
- import { ReactComponent as Green } from '../../icons/green.svg';
10
- import { ReactComponent as MapHd } from '../../icons/map-hd.svg';
11
- import { ReactComponent as Markers } from '../../icons/markers.svg';
12
- import { ReactComponent as Notification } from '../../icons/notification.svg';
13
- import { ReactComponent as Quote } from '../../icons/quote.svg';
14
- import { ReactComponent as Position } from '../../icons/position.svg';
15
- import { ReactComponent as SaveMoney } from '../../icons/save-money.svg';
16
- import { ReactComponent as Schedule } from '../../icons/schedule.svg';
17
- import { ReactComponent as Security } from '../../icons/security.svg';
18
- import { ReactComponent as World } from '../../icons/world.svg';
19
- import { ReactComponent as Zoom } from '../../icons/zoom.svg';
20
-
21
4
  import { ReactComponent as Access } from '../../icons/access.svg';
22
5
  import { ReactComponent as Add } from '../../icons/add.svg';
23
6
  import { ReactComponent as AddCircle } from '../../icons/add-circle.svg';
@@ -37,10 +20,12 @@ import { ReactComponent as ArrowLink } from '../../icons/arrow-link.svg';
37
20
  import { ReactComponent as Asset } from '../../icons/asset.svg';
38
21
  import { ReactComponent as AssetAddFile } from '../../icons/asset-add-file.svg';
39
22
  import { ReactComponent as AssetAdd } from '../../icons/asset-add.svg';
23
+ import { ReactComponent as Autocomplete } from '../../icons/autocomplete.svg';
40
24
  import { ReactComponent as Bank } from '../../icons/bank.svg';
41
25
  import { ReactComponent as Beaker } from '../../icons/beaker.svg';
42
26
  import { ReactComponent as Bell } from '../../icons/bell.svg';
43
27
  import { ReactComponent as Bookmark } from '../../icons/bookmark.svg';
28
+ import { ReactComponent as Buildings } from '../../icons/buildings.svg';
44
29
  import { ReactComponent as Bulb } from '../../icons/bulb.svg';
45
30
  import { ReactComponent as CaretBotton } from '../../icons/caret-bottom.svg';
46
31
  import { ReactComponent as CaretLeft } from '../../icons/caret-left.svg';
@@ -72,6 +57,7 @@ import { ReactComponent as Exchange } from '../../icons/exchange.svg';
72
57
  import { ReactComponent as Expand } from '../../icons/expand.svg';
73
58
  import { ReactComponent as Export } from '../../icons/export.svg';
74
59
  import { ReactComponent as Flag } from '../../icons/flag.svg';
60
+ import { ReactComponent as Github } from '../../icons/github.svg';
75
61
  import { ReactComponent as Globe } from '../../icons/globe.svg';
76
62
  import { ReactComponent as Home } from '../../icons/home.svg';
77
63
  import { ReactComponent as HomeUser } from '../../icons/home-user.svg';
@@ -93,19 +79,23 @@ import { ReactComponent as Organization } from '../../icons/organization.svg';
93
79
  import { ReactComponent as Organizations } from '../../icons/organizations.svg';
94
80
  import { ReactComponent as Phone } from '../../icons/phone.svg';
95
81
  import { ReactComponent as Platform } from '../../icons/platform.svg';
82
+ import { ReactComponent as Position } from '../../icons/position.svg';
96
83
  import { ReactComponent as ProductActivated } from '../../icons/product-activated.svg';
97
84
  import { ReactComponent as ProductAdd } from '../../icons/product-add.svg';
98
85
  import { ReactComponent as Products } from '../../icons/products.svg';
99
86
  import { ReactComponent as Projects } from '../../icons/projects.svg';
100
87
  import { ReactComponent as Puzzle } from '../../icons/puzzle.svg';
101
88
  import { ReactComponent as Question } from '../../icons/question.svg';
89
+ import { ReactComponent as Quote } from '../../icons/quote.svg';
102
90
  import { ReactComponent as Receipt } from '../../icons/receipt.svg';
91
+ import { ReactComponent as SaveMoney } from '../../icons/save-money.svg';
103
92
  import { ReactComponent as Search } from '../../icons/search.svg';
104
93
  import { ReactComponent as SeePage } from '../../icons/see-page.svg';
105
94
  import { ReactComponent as Settings } from '../../icons/settings.svg';
106
95
  import { ReactComponent as Shield } from '../../icons/shield.svg';
107
96
  import { ReactComponent as Star } from '../../icons/star.svg';
108
97
  import { ReactComponent as StarFilled } from '../../icons/star-filled.svg';
98
+ import { ReactComponent as Stores } from '../../icons/stores.svg';
109
99
  import { ReactComponent as Support } from '../../icons/support.svg';
110
100
  import { ReactComponent as Switch } from '../../icons/switch.svg';
111
101
  import { ReactComponent as Team } from '../../icons/team.svg';
@@ -117,36 +107,19 @@ import { ReactComponent as ViewList } from '../../icons/view-list.svg';
117
107
  import { ReactComponent as ViewMiniCard } from '../../icons/view-mini-card.svg';
118
108
  import { ReactComponent as Warning } from '../../icons/warning.svg';
119
109
  import { ReactComponent as Woosmap } from '../../icons/woosmap.svg';
110
+ import { ReactComponent as World } from '../../icons/world.svg';
120
111
  import { ReactComponent as Address } from '../../icons/address.svg';
121
112
  import { ReactComponent as Distance } from '../../icons/distance.svg';
122
113
  import { ReactComponent as Geolocation } from '../../icons/geolocation.svg';
123
114
  import { ReactComponent as Localities } from '../../icons/localities.svg';
124
115
  import { ReactComponent as Map } from '../../icons/map.svg';
125
116
  import { ReactComponent as Merchant } from '../../icons/merchant.svg';
126
- import { ReactComponent as Stores } from '../../icons/stores.svg';
127
117
  import { ReactComponent as Traffic } from '../../icons/traffic.svg';
128
118
  import { ReactComponent as SocialFacebook } from '../../icons/social-facebook.svg';
129
119
  import { ReactComponent as SocialLinkedin } from '../../icons/social-linkedin.svg';
130
120
  import { ReactComponent as SocialTwitter } from '../../icons/social-twitter.svg';
131
121
 
132
122
  const Icons = {
133
- autocomplete: Autocomplete,
134
- battery: Battery,
135
- buildings: Buildings,
136
- cars: Cars,
137
- github: Github,
138
- green: Green,
139
- 'map-hd': MapHd,
140
- markers: Markers,
141
- notification: Notification,
142
- position: Position,
143
- quote: Quote,
144
- 'save-money': SaveMoney,
145
- schedule: Schedule,
146
- security: Security,
147
- world: World,
148
- zoom: Zoom,
149
-
150
123
  access: Access,
151
124
  add: Add,
152
125
  'add-circle': AddCircle,
@@ -166,10 +139,12 @@ const Icons = {
166
139
  asset: Asset,
167
140
  'asset-add-file': AssetAddFile,
168
141
  'asset-add': AssetAdd,
142
+ autocomplete: Autocomplete,
169
143
  bank: Bank,
170
144
  beaker: Beaker,
171
145
  bell: Bell,
172
146
  bookmark: Bookmark,
147
+ buildings: Buildings,
173
148
  bulb: Bulb,
174
149
  'caret-bottom': CaretBotton,
175
150
  'caret-left': CaretLeft,
@@ -202,6 +177,7 @@ const Icons = {
202
177
  export: Export,
203
178
  flag: Flag,
204
179
  globe: Globe,
180
+ github: Github,
205
181
  home: Home,
206
182
  'home-user': HomeUser,
207
183
  import: Import,
@@ -222,13 +198,16 @@ const Icons = {
222
198
  organizations: Organizations,
223
199
  phone: Phone,
224
200
  platform: Platform,
201
+ position: Position,
225
202
  'product-activated': ProductActivated,
226
203
  'product-add': ProductAdd,
227
204
  products: Products,
228
205
  projects: Projects,
229
206
  puzzle: Puzzle,
230
207
  question: Question,
208
+ quote: Quote,
231
209
  receipt: Receipt,
210
+ 'save-money': SaveMoney,
232
211
  search: Search,
233
212
  'see-page': SeePage,
234
213
  settings: Settings,
@@ -247,6 +226,7 @@ const Icons = {
247
226
  'view-mini-card': ViewMiniCard,
248
227
  warning: Warning,
249
228
  woosmap: Woosmap,
229
+ world: World,
250
230
  address: Address,
251
231
  distance: Distance,
252
232
  geolocation: Geolocation,
@@ -0,0 +1,343 @@
1
+ .btn
2
+ cursor pointer
3
+ text-decoration none
4
+ .icon
5
+ flex-shrink 0
6
+ &.active
7
+ cursor default
8
+ &:disabled
9
+ &:not(.btn--group)
10
+ cursor default
11
+ opacity .3
12
+ box-shadow none
13
+ &:hover
14
+ opacity .3
15
+ &--icon
16
+ &:not(.btn--link):not(.btn--link-primary):not(.btn--link-info):not(.btn--link-flex):not(.btn--link-flex-info):not(.btn--group):not(.btn--sidebar-link)
17
+ sq()
18
+ btn()
19
+ justify-content center
20
+ padding 0
21
+ &.btn--loading
22
+ padding 0
23
+ .icon
24
+ sq(2.4)
25
+ &.btn--small
26
+ buttonSmall()
27
+ width $buttonHeightSmall
28
+ &.btn--mini
29
+ buttonMini()
30
+ width $buttonHeightMini
31
+ &.btn--large
32
+ buttonLarge()
33
+ width $buttonHeightLarge
34
+ &.btn--primary
35
+ &:disabled
36
+ &:hover
37
+ background-color $primary
38
+ .icon
39
+ fill $light
40
+ &.btn--loading
41
+ &:hover
42
+ background-color $primary
43
+ &.btn--secondary
44
+ &:disabled
45
+ &:hover
46
+ background-color transparent
47
+ border-color $inputBorderColor
48
+ .icon
49
+ fill $secondary
50
+ &.btn--important
51
+ &:disabled
52
+ &:hover
53
+ background-color $error
54
+ .icon
55
+ fill $light
56
+ &.btn--has-icon
57
+ &:not(.btn--small):not(.btn--large)
58
+ mbi(.4)
59
+ &.btn--icon
60
+ flex-shrink 0
61
+ .icon
62
+ flex-shrink 0
63
+ &--primary
64
+ &--important
65
+ btn()
66
+ textShadow()
67
+ color $light
68
+ .icon
69
+ fill $light
70
+ trans()
71
+ &.btn--loading:not(.btn--small):not(.btn--large)
72
+ disableHoverEffect()
73
+ .icon
74
+ margin-right .3rem
75
+ sq(2.2)
76
+ &.btn--has-icon
77
+ &:not(.btn--small):not(.btn--large)
78
+ mbi(.4)
79
+ &.btn--icon
80
+ flex-shrink 0
81
+ .icon
82
+ flex-shrink 0
83
+ &--primary
84
+ background-color $primary
85
+ &:disabled
86
+ &:hover
87
+ background-color $primary
88
+ &--important
89
+ background-color $error
90
+ &:disabled
91
+ &:hover
92
+ background-color $error
93
+ &--secondary
94
+ btn()
95
+ color $secondary
96
+ background-color $light
97
+ border .1rem solid $inputBorderColor
98
+ .icon
99
+ fill $secondary
100
+ trans()
101
+ &.btn--has-icon
102
+ mbi(.4)
103
+ &.btn--icon
104
+ flex-shrink 0
105
+ .icon
106
+ flex-shrink 0
107
+ &:hover
108
+ border-color $success
109
+ &.btn--loading
110
+ &:hover
111
+ background-color transparent
112
+ color $secondary
113
+ cursor default
114
+ border-color $inputBorderColor
115
+ .icon
116
+ fill $secondary
117
+ &:disabled
118
+ opacity .4
119
+ cursor default
120
+ &:disabled
121
+ &:hover
122
+ opacity .4
123
+ background-color transparent
124
+ color $secondary
125
+ border-color $inputBorderColor
126
+ .icon
127
+ fill $secondary
128
+ &--inverse
129
+ btn()
130
+ background-color transparent
131
+ border .1rem solid $light
132
+ color $light
133
+ .icon
134
+ fill $light
135
+ &.btn--has-icon
136
+ mbi(.4)
137
+ &.btn--icon
138
+ flex-shrink 0
139
+ .icon
140
+ flex-shrink 0
141
+ &:hover
142
+ border-color $success
143
+ color $light
144
+ .icon
145
+ fill $light
146
+ &:disabled
147
+ opacity .3
148
+ &:hover
149
+ cursor default
150
+ border-color $success
151
+ color $light
152
+ .icon
153
+ fill $light
154
+ &--link-flex
155
+ &--link-flex-info
156
+ &--link
157
+ &--link-primary
158
+ &--link-info
159
+ focus()
160
+ trans()
161
+ height auto
162
+ padding 0
163
+ line-height $fontSize
164
+ color $secondary
165
+ vertical-align baseline
166
+ position relative
167
+ .btn__label
168
+ line-height $fontSize
169
+ vertical-align baseline
170
+ &:hover
171
+ text-decoration underline
172
+ color $primary
173
+ .icon
174
+ fill $primary
175
+ &:disabled
176
+ cursor default
177
+ opacity .3
178
+ &:hover
179
+ color inherit
180
+ opacity .3
181
+ text-decoration underline
182
+ .icon
183
+ fill inherit
184
+ .label &
185
+ &:hover
186
+ .icon
187
+ fill $light
188
+ &.btn--icon
189
+ padding 0
190
+ text-decoration none
191
+ &.btn--has-icon
192
+ &:not(.btn--icon-right)
193
+ .icon
194
+ margin-right .3rem
195
+ &.btn--icon-right
196
+ .icon
197
+ margin-left .3rem
198
+ &--link
199
+ &--link-primary
200
+ &--link-info
201
+ .icon
202
+ trans()
203
+ position relative
204
+ top .7rem
205
+ &:not(.btn--icon-right)
206
+ .icon
207
+ left -.3rem
208
+ &.btn--small
209
+ .icon
210
+ top .5rem
211
+ left -.3rem
212
+ &.btn--large
213
+ .icon
214
+ top 1.2rem
215
+ left -.3rem
216
+ &.btn--icon-right
217
+ .icon
218
+ right -.3rem
219
+ &.btn--small
220
+ .icon
221
+ top .5rem
222
+ rigth -.3rem
223
+ &.btn--large
224
+ .icon
225
+ top 1.2rem
226
+ rigth -.3rem
227
+ &--link-flex
228
+ &--link-flex-info
229
+ display flex
230
+ align-items center
231
+ &.btn--no-label
232
+ display flex
233
+ align-items center
234
+ justify-content center
235
+ &.btn--large
236
+ &.btn--small
237
+ height auto
238
+ padding 0 !important
239
+ &--link-flex-info
240
+ &:hover
241
+ color $primary
242
+ text-decoration none
243
+ .icon
244
+ fill $primary
245
+ &:disabled
246
+ &:hover
247
+ color $primary
248
+ text-decoration none
249
+ .icon
250
+ fill $primary
251
+ &--link
252
+ &--link-flex
253
+ &.btn--light-color
254
+ color $secondary-medium40
255
+ .icon
256
+ trans()
257
+ fill $secondary-medium40
258
+ &:hover
259
+ color $primary
260
+ .icon
261
+ fill $primary
262
+ &--link-primary
263
+ color $primary
264
+ .icon
265
+ fill $primary
266
+ &:disabled
267
+ &:hover
268
+ color $primary
269
+ text-decoration none
270
+ .icon
271
+ fill $primary
272
+ &--link-info
273
+ &--link-flex-info
274
+ color $info
275
+ .icon
276
+ fill $info
277
+ &:hover
278
+ color $primary
279
+ text-decoration underline
280
+ .icon
281
+ fill $primary
282
+ &--link-info
283
+ &--link-flex-info
284
+ &--link-flex
285
+ transition none
286
+ .icon
287
+ trans()
288
+ .btn__label
289
+ trans()
290
+
291
+ &--has-icon
292
+ &:not(.btn--icon):not(.btn--link):not(.btn--link-primary):not(.btn--link-info):not(.btn--link-flex):not(.btn--link-flex-info):not(.btn--loading):not(.btn--mini):not(.btn--small):not(.btn--large):not(.btn--dropdown-item):not(.btn--tab):not(.btn--sidebar-link):not(.btn--icon-right)
293
+ padding 0 $padding 0 $padding - .6
294
+ &:not(.btn--icon):not(.btn--link):not(.btn--link-primary):not(.btn--link-info):not(.btn--link-flex):not(.btn--link-flex-info):not(.btn--loading):not(.btn--mini):not(.btn--small):not(.btn--large):not(.btn--dropdown-item):not(.btn--tab):not(.btn--sidebar-link)
295
+ &.btn--icon-right
296
+ padding 0 $padding - .6 0 $padding
297
+ &--loading
298
+ &:not(.btn--icon):not(.btn--small):not(.btn--large):not(.btn--sidebar-link)
299
+ padding-left $padding - .4
300
+ &:hover
301
+ &.btn--important
302
+ background-color $error
303
+ .icon
304
+ sq(2.2)
305
+
306
+
307
+ &--small
308
+ buttonSmall()
309
+ &.btn--group
310
+ &.btn--switch
311
+ buttonSmall()
312
+ &.btn--icon
313
+ width auto
314
+ img
315
+ max-width 2.2rem
316
+ &:not(.btn--custom-icon-size)
317
+ .icon
318
+ sq(1.8)
319
+ &:not(.btn--icon)
320
+ .icon
321
+ margin-right .4rem
322
+ &.btn--has-icon
323
+ padding-left $padding - .5
324
+ &.btn--loading
325
+ padding-left $padding - .4
326
+ disableHoverEffect()
327
+ .icon
328
+ sq(1.8)
329
+ &--large
330
+ buttonLarge()
331
+ &:not(.btn--custom-icon-size)
332
+ .icon
333
+ sq(3.2)
334
+ &:not(.btn--icon)
335
+ .icon
336
+ margin-right .6rem
337
+ &.btn--has-icon
338
+ padding-left $padding - .4
339
+ &.btn--loading
340
+ padding-left $padding
341
+ disableHoverEffect()
342
+ .icon
343
+ sq(3.2)