@citizenplane/pimp 6.1.1 → 6.4.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 (38) hide show
  1. package/dist/pimp.common.js +1148 -684
  2. package/dist/pimp.common.js.map +1 -1
  3. package/dist/pimp.css +1 -1
  4. package/dist/pimp.umd.js +1148 -684
  5. package/dist/pimp.umd.js.map +1 -1
  6. package/dist/pimp.umd.min.js +1 -1
  7. package/dist/pimp.umd.min.js.map +1 -1
  8. package/package-lock.json +129 -106
  9. package/package.json +10 -10
  10. package/src/assets/styles/base/_base.scss +1 -1
  11. package/src/assets/styles/helpers/{_function.scss → _functions.scss} +3 -2
  12. package/src/assets/styles/main.scss +1 -1
  13. package/src/assets/styles/variables/_sizing.scss +1 -1
  14. package/src/assets/styles/variables/_spacing.scss +9 -2
  15. package/src/components/atomic-elements/CpBadge.vue +1 -1
  16. package/src/components/core/playground-sections/SectionButtons.vue +2 -2
  17. package/src/components/core/playground-sections/SectionContainer.vue +2 -2
  18. package/src/components/core/playground-sections/SectionDatePickers.vue +16 -3
  19. package/src/components/core/playground-sections/SectionFeedbackIndicators.vue +2 -2
  20. package/src/components/core/playground-sections/SectionInputs.vue +2 -2
  21. package/src/components/core/playground-sections/SectionListsAndTables.vue +60 -2
  22. package/src/components/core/playground-sections/SectionSelects.vue +2 -2
  23. package/src/components/core/playground-sections/SectionSimpleInputs.vue +2 -2
  24. package/src/components/core/playground-sections/SectionToasters.vue +0 -1
  25. package/src/components/core/playground-sections/SectionToggles.vue +1 -1
  26. package/src/components/date-pickers/CpDate.vue +403 -0
  27. package/src/components/feedback-indicators/CpAlert.vue +6 -7
  28. package/src/components/feedback-indicators/CpToaster.vue +2 -2
  29. package/src/components/index.js +2 -0
  30. package/src/components/lists-and-table/CpTable/{CpTableEmptyState.vue → CpTableEmptyState/index.vue} +4 -4
  31. package/src/components/lists-and-table/CpTable/index.scss +308 -0
  32. package/src/components/lists-and-table/CpTable/index.vue +41 -269
  33. package/src/components/toggles/CpCheckbox/index.scss +120 -0
  34. package/src/components/toggles/CpCheckbox/index.vue +1 -114
  35. package/src/components/toggles/CpRadio/index.scss +156 -0
  36. package/src/components/toggles/CpRadio/index.vue +1 -151
  37. package/src/libs/CoreDatepicker.vue +4 -4
  38. package/src/libs/CoreToaster.vue +40 -27
@@ -28,17 +28,17 @@ export default {
28
28
 
29
29
  <style lang="scss">
30
30
  .cpTableEmptyState {
31
- padding: 10vh $spacing-unit * 2;
31
+ padding: 10vh $space-lg;
32
32
  display: flex;
33
33
  align-items: center;
34
34
  justify-content: center;
35
35
 
36
36
  &__icon {
37
- margin-bottom: $spacing-unit * 3;
37
+ margin-bottom: $space-xl;
38
38
  border-radius: pxToRem(4);
39
39
  display: inline-block;
40
40
  background-color: $neutral-light-1;
41
- padding: $spacing-unit * 2;
41
+ padding: $space-lg;
42
42
  color: $neutral-dark-1;
43
43
 
44
44
  svg {
@@ -47,7 +47,7 @@ export default {
47
47
  }
48
48
 
49
49
  &__headline {
50
- margin-bottom: $spacing-unit;
50
+ margin-bottom: $space;
51
51
  font-size: pxToEm(20);
52
52
  }
53
53
 
@@ -0,0 +1,308 @@
1
+ @import "src/assets/styles/main";
2
+
3
+ .cpTable {
4
+ position: relative;
5
+ display: flex;
6
+ flex-direction: column;
7
+
8
+ &__container {
9
+ position: relative;
10
+ display: flex;
11
+ flex-direction: column;
12
+ flex: 1;
13
+
14
+ &--hasPagination {
15
+ border-bottom: pxToRem(1) solid $border-color;
16
+ }
17
+ }
18
+
19
+ /* Standard Tables */
20
+ &__container[role='region'][aria-labelledby][tabindex] {
21
+ overflow: auto;
22
+ }
23
+
24
+ &__container[role='region'][aria-labelledby][tabindex]:focus {
25
+ border-radius: pxToRem(10);
26
+ box-shadow: 0 0 0 pxToEm(3) scale-color($blue, $lightness: 70%);
27
+ }
28
+
29
+ &__container[role='region'][aria-labelledby][tabindex] &__table {
30
+ margin: 0;
31
+ border: none;
32
+ }
33
+
34
+ /* Scrolling Visual Cue */
35
+ &__container[role='region'][aria-labelledby][tabindex] {
36
+ background: linear-gradient(to right, $neutral-light 30%, rgba(255, 255, 255, 0)),
37
+ linear-gradient(to right, rgba($neutral-light, 0), $neutral-light 70%) 0 100%,
38
+ radial-gradient(farthest-side at 0% 50%, rgba($neutral-dark, 0.2), rgba($neutral-dark, 0)),
39
+ radial-gradient(farthest-side at 100% 50%, rgba($neutral-dark, 0.2), rgba($neutral-dark, 0)) 0 100%;
40
+ background-repeat: no-repeat;
41
+ background-color: $neutral-light;
42
+ background-size: 40px 100%, 40px 100%, 14px 100%, 14px 100%;
43
+ background-position: 0 0, 100%, 0 0, 100%;
44
+ background-attachment: local, local, scroll, scroll;
45
+ }
46
+
47
+ &__caption {
48
+ position: sticky;
49
+ left: 0;
50
+ margin-bottom: $space-lg;
51
+ text-align: left;
52
+ font-size: pxToEm(18);
53
+
54
+ &:first-letter {
55
+ text-transform: capitalize;
56
+ }
57
+ }
58
+
59
+ &__table {
60
+ border-collapse: collapse;
61
+ width: 100%;
62
+ }
63
+
64
+ &__row {
65
+ &--body:not(:last-of-type) {
66
+ border-bottom: pxToRem(1) solid $border-color;
67
+ }
68
+
69
+ &--body:not(#{&}--isFullWidth):not(#{&}--isSelected):hover,
70
+ &--body:not(#{&}--isFullWidth):not(#{&}--isSelected):focus,
71
+ &--body:not(#{&}--isFullWidth):not(#{&}--isSelected):focus-within {
72
+ background-color: rgba($neutral-dark, 0.05);
73
+ transition: background-color 0.1s ease-in-out;
74
+ }
75
+
76
+ &--body:not(#{&}--isFullWidth):not(#{&}--isSelected):focus,
77
+ &--body:not(#{&}--isFullWidth):not(#{&}--isSelected):focus-within {
78
+ color: $primary-color;
79
+ }
80
+
81
+ &--isFullWidth td {
82
+ padding: $space;
83
+ background-color: rgba($neutral-dark, 0.03);
84
+ }
85
+
86
+ &--isClickable {
87
+ cursor: pointer;
88
+ }
89
+
90
+ &--isSelected {
91
+ background-color: rgba($primary-color, 0.1);
92
+ color: $primary-color;
93
+ }
94
+
95
+ &--body td {
96
+ font-size: pxToEm(14);
97
+ }
98
+ }
99
+
100
+ &__column {
101
+ position: sticky;
102
+ top: 0;
103
+ z-index: 3;
104
+ background-color: $neutral-light;
105
+ padding: $space $space-md;
106
+ text-align: left;
107
+ white-space: nowrap;
108
+ font-size: pxToEm(12);
109
+ font-weight: normal;
110
+ color: $neutral-dark-1;
111
+
112
+ &:first-letter {
113
+ text-transform: capitalize;
114
+ }
115
+
116
+ /* Workaround for sticky header border-bottom */
117
+ &:after {
118
+ content: '';
119
+ position: absolute;
120
+ bottom: 0;
121
+ left: 0;
122
+ width: 100%;
123
+ height: pxToRem(1);
124
+ background-color: $border-color;
125
+ }
126
+ }
127
+
128
+ &__body {
129
+ vertical-align: middle;
130
+ }
131
+
132
+ &__row--body,
133
+ &__cell {
134
+ vertical-align: inherit;
135
+ }
136
+
137
+ &__cell {
138
+ &:not(#{&}--isFullWidth):not(#{&}--isOptions) {
139
+ padding: $space-lg $space-md;
140
+ white-space: nowrap;
141
+ }
142
+
143
+ &--isFullWidth span,
144
+ &--isOptions {
145
+ position: sticky;
146
+ }
147
+
148
+ &--isFullWidth span {
149
+ left: 50%;
150
+ transform: translateX(-50%);
151
+ display: inline-block;
152
+ }
153
+
154
+ &--isOptions {
155
+ right: 0;
156
+ padding: 0 $space-md;
157
+ }
158
+
159
+ &--isOptions button {
160
+ border: pxToRem(1) solid $border-color;
161
+ border-radius: pxToRem(8);
162
+ background-color: $neutral-light;
163
+ padding: $space-sm;
164
+ color: $neutral-dark-1;
165
+
166
+ &:hover {
167
+ background-color: scale-color($neutral-dark, $lightness: 98%);
168
+ color: $neutral-dark;
169
+ }
170
+ }
171
+
172
+ &--isOptions svg {
173
+ width: pxToRem(16);
174
+ height: pxToRem(16);
175
+ }
176
+ }
177
+
178
+ // On desktop devices, display options only on row focus or hover
179
+ @media (hover: hover) and (pointer: fine) {
180
+ &__cell--isOptions {
181
+ opacity: 0;
182
+ transition: opacity 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.175);
183
+ }
184
+
185
+ &__row:focus &__cell--isOptions,
186
+ &__row:focus-within &__cell--isOptions,
187
+ &__row:hover &__cell--isOptions {
188
+ opacity: 1;
189
+ }
190
+ }
191
+
192
+ &__emptyState {
193
+ flex: 1;
194
+ }
195
+
196
+ &--isLoading &__overlay {
197
+ opacity: 0.5;
198
+ pointer-events: all;
199
+ }
200
+
201
+ &__overlay {
202
+ position: absolute;
203
+ overflow: hidden;
204
+ left: 0;
205
+ right: 0;
206
+ top: 0;
207
+ bottom: 0;
208
+ border-radius: pxToRem(10);
209
+ background-color: $neutral-light;
210
+ z-index: 4;
211
+ opacity: 0;
212
+ transition: 0.15s opacity ease-in-out;
213
+ cursor: wait;
214
+ pointer-events: none;
215
+
216
+ &::after {
217
+ content: '';
218
+ position: absolute;
219
+ top: 0;
220
+ right: 0;
221
+ bottom: 0;
222
+ left: 0;
223
+ transform: translateX(-100%);
224
+ background-image: linear-gradient(
225
+ 90deg,
226
+ rgba($neutral-dark-3, 0) 0,
227
+ rgba($neutral-dark-3, 0.2) 20%,
228
+ rgba($neutral-dark-3, 0.5) 60%,
229
+ rgba($neutral-dark-3, 0)
230
+ );
231
+ animation: shimmer 2s infinite;
232
+ }
233
+
234
+ @keyframes shimmer {
235
+ 100% {
236
+ transform: translateX(100%);
237
+ }
238
+ }
239
+ }
240
+
241
+ &__loader {
242
+ width: pxToRem(32);
243
+ height: pxToRem(32);
244
+
245
+ &--isSmall {
246
+ display: inline-block;
247
+ vertical-align: middle;
248
+ width: pxToRem(24);
249
+ height: pxToRem(24);
250
+ }
251
+ }
252
+
253
+ &__footer {
254
+ padding: $space-lg $space-md 0;
255
+ display: flex;
256
+ align-items: center;
257
+ font-size: pxToEm(14);
258
+ }
259
+
260
+ .footer {
261
+ &__details,
262
+ &__pagination {
263
+ flex: 1;
264
+ }
265
+
266
+ &__results {
267
+ font-variant-numeric: tabular-nums;
268
+ color: $neutral-dark-1;
269
+ }
270
+
271
+ &__results strong {
272
+ color: $neutral-dark;
273
+ }
274
+
275
+ &__pagination {
276
+ text-align: right;
277
+ }
278
+
279
+ &__pagination button {
280
+ box-shadow: 0 pxToRem(1) pxToRem(2) rgba($neutral-dark, 0.08);
281
+ border-radius: pxToRem(10);
282
+ border: pxToRem(1) solid $border-color;
283
+ padding: pxToRem(6) pxToRem(10);
284
+ transition: background-color 0.15s;
285
+
286
+ &:hover {
287
+ background-color: rgba($neutral-dark, 0.05);
288
+ }
289
+
290
+ &:focus {
291
+ box-shadow: 0 0 0 pxToEm(3) scale-color($blue, $lightness: 70%);
292
+ }
293
+
294
+ &:disabled {
295
+ box-shadow: none;
296
+ border-color: $neutral-light-1;
297
+ background-color: $neutral-light-1;
298
+ color: $neutral-dark-2;
299
+ cursor: not-allowed;
300
+ user-select: none;
301
+ }
302
+
303
+ &:last-of-type {
304
+ margin-left: $space;
305
+ }
306
+ }
307
+ }
308
+ }
@@ -26,21 +26,23 @@
26
26
  {{ column.name }}
27
27
  </slot>
28
28
  </th>
29
+ <th v-show="enableRowOptions" class="cpTable__column cpTable__column--isOptions"><span /></th>
29
30
  </tr>
30
31
  </thead>
31
32
  <tbody class="cpTable__body">
32
33
  <tr
33
- v-for="(row, rowIndex) in visibleRows"
34
+ v-for="(rowData, rowIndex) in visibleRows"
34
35
  :key="rowIndex"
35
36
  class="cpTable__row cpTable__row--body"
36
- :class="getRowClasses(row, rowIndex)"
37
- tabindex="0"
38
- @click="handleRowClick(row, rowIndex)"
39
- @keydown.enter="handleRowClick(row, rowIndex)"
37
+ :class="getRowClasses(rowData, rowIndex)"
38
+ :tabindex="getTabindex(rowData)"
39
+ @click="handleRowClick(rowData, rowIndex)"
40
+ @click.right="handleRowRightClick({ rowData, rowIndex }, $event)"
41
+ @keydown.enter="handleRowClick(rowData, rowIndex)"
40
42
  >
41
- <slot name="row" :row="row">
43
+ <slot name="row" :row="rowData">
42
44
  <td
43
- v-for="(cellValue, cellKey, cellIndex) in row"
45
+ v-for="(cellValue, cellKey, cellIndex) in rowData"
44
46
  :key="`${cellKey}_${rowIndex}`"
45
47
  class="cpTable__cell"
46
48
  :class="getCellClasses(cellKey)"
@@ -48,10 +50,13 @@
48
50
  :colspan="getColspan(cellKey)"
49
51
  >
50
52
  <slot :name="cellKey" :cell="cellValue">
51
- <span v-if="isFullWidthRow(row)">{{ cellValue }}</span>
53
+ <span v-if="isFullWidthRow(rowData)">{{ cellValue }}</span>
52
54
  <template v-else>{{ cellValue }}</template>
53
55
  </slot>
54
56
  </td>
57
+ <td v-show="areRowOptionsEnabled(rowData)" class="cpTable__cell cpTable__cell--isOptions">
58
+ <button @click.stop="handleRowRightClick({ rowData, rowIndex }, $event)"><more-vertical-icon /></button>
59
+ </td>
55
60
  </slot>
56
61
  </tr>
57
62
  </tbody>
@@ -83,6 +88,7 @@
83
88
  </template>
84
89
 
85
90
  <script>
91
+ import { MoreVerticalIcon } from 'vue-feather-icons'
86
92
  import { camelize, decamelize } from '@/helpers/string'
87
93
  import { randomString } from '@/helpers'
88
94
 
@@ -102,6 +108,7 @@ const LoaderColor = '#5341F9'
102
108
 
103
109
  export default {
104
110
  components: {
111
+ MoreVerticalIcon,
105
112
  CpTableEmptyState,
106
113
  },
107
114
  props: {
@@ -152,6 +159,11 @@ export default {
152
159
  default: false,
153
160
  required: false,
154
161
  },
162
+ enableRowOptions: {
163
+ type: Boolean,
164
+ default: false,
165
+ required: false,
166
+ },
155
167
  },
156
168
  data() {
157
169
  return {
@@ -307,11 +319,21 @@ export default {
307
319
  },
308
320
  },
309
321
  methods: {
322
+ getRowPayload(rowIndex) {
323
+ return this.rawVisibleRows[rowIndex]
324
+ },
310
325
  handleRowClick(rowData, rowIndex) {
311
326
  if (this.isFullWidthRow(rowData)) return
312
- const data = this.rawVisibleRows[rowIndex]
327
+
328
+ const data = this.getRowPayload(rowIndex)
313
329
  this.$emit('on-row-click', data)
314
330
  },
331
+ handleRowRightClick({ rowData, rowIndex }, event) {
332
+ if (this.isFullWidthRow(rowData)) return
333
+
334
+ const data = this.getRowPayload(rowIndex)
335
+ this.$emit('on-row-right-click', { data, event })
336
+ },
315
337
  handleNavigationClick(isNext = true) {
316
338
  this.resetScrollPosition()
317
339
 
@@ -385,7 +407,12 @@ export default {
385
407
  }
386
408
  },
387
409
  getColspan(cellKey) {
388
- return cellKey === RESERVED_KEYS.FULL_WIDTH && this.numberOfColumns
410
+ const numberOfColumns = this.enableRowOptions ? this.numberOfColumns + 1 : this.numberOfColumns
411
+
412
+ return cellKey === RESERVED_KEYS.FULL_WIDTH && numberOfColumns
413
+ },
414
+ getTabindex(rowData) {
415
+ return this.isFullWidthRow(rowData) ? -1 : 0
389
416
  },
390
417
  isFullWidthRow(rowData) {
391
418
  return RESERVED_KEYS.FULL_WIDTH in rowData
@@ -393,268 +420,13 @@ export default {
393
420
  isRowSelected(rowIndex) {
394
421
  return this.rawVisibleRows[rowIndex][RESERVED_KEYS.IS_SELECTED]
395
422
  },
423
+ areRowOptionsEnabled(rowData) {
424
+ return this.enableRowOptions && !this.isFullWidthRow(rowData)
425
+ },
396
426
  },
397
427
  }
398
428
  </script>
399
429
 
400
430
  <style lang="scss">
401
- .cpTable {
402
- position: relative;
403
- display: flex;
404
- flex-direction: column;
405
-
406
- &__container {
407
- position: relative;
408
- display: flex;
409
- flex-direction: column;
410
- flex: 1;
411
-
412
- &--hasPagination {
413
- border-bottom: pxToRem(1) solid $border-color;
414
- }
415
- }
416
-
417
- /* Standard Tables */
418
- &__container[role='region'][aria-labelledby][tabindex] {
419
- overflow: auto;
420
- }
421
-
422
- &__container[role='region'][aria-labelledby][tabindex]:focus {
423
- border-radius: pxToRem(10);
424
- box-shadow: 0 0 0 pxToEm(3) scale-color($blue, $lightness: 70%);
425
- }
426
-
427
- &__container[role='region'][aria-labelledby][tabindex] &__table {
428
- margin: 0;
429
- border: none;
430
- }
431
-
432
- /* Scrolling Visual Cue */
433
- &__container[role='region'][aria-labelledby][tabindex] {
434
- background: linear-gradient(to right, $neutral-light 30%, rgba(255, 255, 255, 0)),
435
- linear-gradient(to right, rgba($neutral-light, 0), $neutral-light 70%) 0 100%,
436
- radial-gradient(farthest-side at 0% 50%, rgba($neutral-dark, 0.2), rgba($neutral-dark, 0)),
437
- radial-gradient(farthest-side at 100% 50%, rgba($neutral-dark, 0.2), rgba($neutral-dark, 0)) 0 100%;
438
- background-repeat: no-repeat;
439
- background-color: $neutral-light;
440
- background-size: 40px 100%, 40px 100%, 14px 100%, 14px 100%;
441
- background-position: 0 0, 100%, 0 0, 100%;
442
- background-attachment: local, local, scroll, scroll;
443
- }
444
-
445
- &__caption {
446
- position: sticky;
447
- left: 0;
448
- margin-bottom: $spacing-unit * 2;
449
- text-align: left;
450
- font-size: pxToEm(18);
451
-
452
- &:first-letter {
453
- text-transform: capitalize;
454
- }
455
- }
456
-
457
- &__table {
458
- border-collapse: collapse;
459
- width: 100%;
460
- }
461
-
462
- &__row {
463
- &--body:not(:last-of-type) {
464
- border-bottom: pxToRem(1) solid $border-color;
465
- }
466
-
467
- &--body:not(#{&}--isFullWidth):not(#{&}--isSelected):hover,
468
- &--body:not(#{&}--isFullWidth):not(#{&}--isSelected):focus {
469
- background-color: rgba($neutral-dark, 0.03);
470
- transition: background-color 0.1s ease-in-out;
471
- }
472
-
473
- &--isFullWidth td {
474
- padding: $spacing-unit;
475
- background-color: rgba($neutral-dark, 0.03);
476
- }
477
-
478
- &--isClickable {
479
- cursor: pointer;
480
- }
481
-
482
- &--isSelected {
483
- background-color: rgba($primary-color, 0.1);
484
- color: $primary-color;
485
- }
486
-
487
- &--body td {
488
- font-size: pxToEm(14);
489
- }
490
- }
491
-
492
- &__column {
493
- position: sticky;
494
- top: 0;
495
- z-index: 3;
496
- background-color: $neutral-light;
497
- padding: $spacing-unit $spacing-unit * 1.5;
498
- text-align: left;
499
- white-space: nowrap;
500
- font-size: pxToEm(12);
501
- font-weight: normal;
502
- color: $neutral-dark-1;
503
-
504
- &:first-letter {
505
- text-transform: capitalize;
506
- }
507
-
508
- /* Workaround for sticky header border-bottom */
509
- &:after {
510
- content: '';
511
- position: absolute;
512
- bottom: 0;
513
- left: 0;
514
- width: 100%;
515
- height: pxToRem(1);
516
- background-color: $border-color;
517
- }
518
- }
519
-
520
- &__body {
521
- vertical-align: middle;
522
- }
523
-
524
- &__row--body,
525
- &__cell {
526
- vertical-align: inherit;
527
- }
528
-
529
- &__cell {
530
- &:not(#{&}--isFullWidth) {
531
- padding: $spacing-unit * 2 $spacing-unit * 1.5;
532
- white-space: nowrap;
533
- }
534
-
535
- &--isFullWidth span {
536
- position: sticky;
537
- left: 50%;
538
- transform: translateX(-50%);
539
- display: inline-block;
540
- }
541
- }
542
-
543
- &__emptyState {
544
- flex: 1;
545
- }
546
-
547
- &--isLoading &__overlay {
548
- opacity: 0.5;
549
- pointer-events: all;
550
- }
551
-
552
- &__overlay {
553
- position: absolute;
554
- overflow: hidden;
555
- left: 0;
556
- right: 0;
557
- top: 0;
558
- bottom: 0;
559
- border-radius: pxToRem(10);
560
- background-color: $neutral-light;
561
- z-index: 4;
562
- opacity: 0;
563
- transition: 0.15s opacity ease-in-out;
564
- cursor: wait;
565
- pointer-events: none;
566
-
567
- &::after {
568
- content: '';
569
- position: absolute;
570
- top: 0;
571
- right: 0;
572
- bottom: 0;
573
- left: 0;
574
- transform: translateX(-100%);
575
- background-image: linear-gradient(
576
- 90deg,
577
- rgba($neutral-dark-3, 0) 0,
578
- rgba($neutral-dark-3, 0.2) 20%,
579
- rgba($neutral-dark-3, 0.5) 60%,
580
- rgba($neutral-dark-3, 0)
581
- );
582
- animation: shimmer 2s infinite;
583
- }
584
-
585
- @keyframes shimmer {
586
- 100% {
587
- transform: translateX(100%);
588
- }
589
- }
590
- }
591
-
592
- &__loader {
593
- width: pxToRem(32);
594
- height: pxToRem(32);
595
-
596
- &--isSmall {
597
- display: inline-block;
598
- vertical-align: middle;
599
- width: pxToRem(24);
600
- height: pxToRem(24);
601
- }
602
- }
603
-
604
- &__footer {
605
- padding: $spacing-unit * 2 $spacing-unit * 1.5 0;
606
- display: flex;
607
- align-items: center;
608
- font-size: pxToEm(14);
609
- }
610
-
611
- .footer {
612
- &__details,
613
- &__pagination {
614
- flex: 1;
615
- }
616
-
617
- &__results {
618
- font-variant-numeric: tabular-nums;
619
- color: $neutral-dark-1;
620
- }
621
-
622
- &__results strong {
623
- color: $neutral-dark;
624
- }
625
-
626
- &__pagination {
627
- text-align: right;
628
- }
629
-
630
- &__pagination button {
631
- box-shadow: 0 pxToRem(1) pxToRem(2) rgba($neutral-dark, 0.08);
632
- border-radius: pxToRem(10);
633
- border: pxToRem(1) solid $border-color;
634
- padding: pxToRem(6) pxToRem(10);
635
- transition: background-color 0.15s;
636
-
637
- &:hover {
638
- background-color: rgba($neutral-dark, 0.05);
639
- }
640
-
641
- &:focus {
642
- box-shadow: 0 0 0 pxToEm(3) scale-color($blue, $lightness: 70%);
643
- }
644
-
645
- &:disabled {
646
- box-shadow: none;
647
- border-color: $neutral-light-1;
648
- background-color: $neutral-light-1;
649
- color: $neutral-dark-2;
650
- cursor: not-allowed;
651
- user-select: none;
652
- }
653
-
654
- &:last-of-type {
655
- margin-left: $spacing-unit;
656
- }
657
- }
658
- }
659
- }
431
+ @import 'index';
660
432
  </style>