ode-bootstrap 3.13.0-dev.202103031343 → 4.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 (127) hide show
  1. package/.gradle/4.5.1/fileHashes/fileHashes.bin +0 -0
  2. package/.gradle/4.5.1/fileHashes/fileHashes.lock +0 -0
  3. package/.gradle/4.5.1/taskHistory/taskHistory.bin +0 -0
  4. package/.gradle/4.5.1/taskHistory/taskHistory.lock +0 -0
  5. package/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  6. package/.gradle/buildOutputCleanup/cache.properties +1 -1
  7. package/.stylelintrc.json +57 -0
  8. package/?/.gradle/caches/4.5.1/fileHashes/fileHashes.bin +0 -0
  9. package/?/.gradle/caches/4.5.1/fileHashes/fileHashes.lock +0 -0
  10. package/?/.gradle/caches/4.5.1/scripts/awiddsfwbjzij8a23811obf58/cp_proj/cp_proj4a3ff7b7cd19e4638e29712cae02e796/cache.properties +1 -1
  11. package/?/.gradle/caches/4.5.1/scripts/awiddsfwbjzij8a23811obf58/cp_proj/cp_proj4a3ff7b7cd19e4638e29712cae02e796/cp_proj4a3ff7b7cd19e4638e29712cae02e796.lock +0 -0
  12. package/?/.gradle/caches/4.5.1/scripts/awiddsfwbjzij8a23811obf58/proj/proj4a3ff7b7cd19e4638e29712cae02e796/cache.properties +1 -1
  13. package/?/.gradle/caches/4.5.1/scripts/awiddsfwbjzij8a23811obf58/proj/proj4a3ff7b7cd19e4638e29712cae02e796/proj4a3ff7b7cd19e4638e29712cae02e796.lock +0 -0
  14. package/?/.gradle/caches/4.5.1/scripts-remapped/build_7ism5ojjxvkfld9af7wo33yib/awiddsfwbjzij8a23811obf58/cp_proj4a3ff7b7cd19e4638e29712cae02e796/cache.properties +1 -1
  15. package/?/.gradle/caches/4.5.1/scripts-remapped/build_7ism5ojjxvkfld9af7wo33yib/awiddsfwbjzij8a23811obf58/cp_proj4a3ff7b7cd19e4638e29712cae02e796/cp_proj4a3ff7b7cd19e4638e29712cae02e796.lock +0 -0
  16. package/?/.gradle/caches/4.5.1/scripts-remapped/build_7ism5ojjxvkfld9af7wo33yib/awiddsfwbjzij8a23811obf58/proj4a3ff7b7cd19e4638e29712cae02e796/cache.properties +1 -1
  17. package/?/.gradle/caches/4.5.1/scripts-remapped/build_7ism5ojjxvkfld9af7wo33yib/awiddsfwbjzij8a23811obf58/proj4a3ff7b7cd19e4638e29712cae02e796/proj4a3ff7b7cd19e4638e29712cae02e796.lock +0 -0
  18. package/?/.gradle/caches/transforms-1/transforms-1.lock +0 -0
  19. package/?/.gradle/daemon/4.5.1/daemon-35.out.log +72 -72
  20. package/?/.gradle/daemon/4.5.1/registry.bin +0 -0
  21. package/?/.gradle/daemon/4.5.1/registry.bin.lock +0 -0
  22. package/README.md +30 -3
  23. package/assets/fonts/dyslexic/OpenDyslexic.woff +0 -0
  24. package/assets/fonts/fa/fa-brands-400.eot +0 -0
  25. package/assets/fonts/fa/fa-brands-400.svg +41 -41
  26. package/assets/fonts/fa/fa-brands-400.ttf +0 -0
  27. package/assets/fonts/fa/fa-brands-400.woff +0 -0
  28. package/assets/fonts/fa/fa-brands-400.woff2 +0 -0
  29. package/assets/fonts/fa/fa-regular-400.eot +0 -0
  30. package/assets/fonts/fa/fa-regular-400.svg +2 -2
  31. package/assets/fonts/fa/fa-regular-400.ttf +0 -0
  32. package/assets/fonts/fa/fa-regular-400.woff +0 -0
  33. package/assets/fonts/fa/fa-regular-400.woff2 +0 -0
  34. package/assets/fonts/fa/fa-solid-900.eot +0 -0
  35. package/assets/fonts/fa/fa-solid-900.svg +13 -7
  36. package/assets/fonts/fa/fa-solid-900.ttf +0 -0
  37. package/assets/fonts/fa/fa-solid-900.woff +0 -0
  38. package/assets/fonts/fa/fa-solid-900.woff2 +0 -0
  39. package/assets/fonts/generic-icons/generic-icons.svg +1 -0
  40. package/assets/fonts/generic-icons/generic-icons.ttf +0 -0
  41. package/assets/fonts/generic-icons/generic-icons.woff +0 -0
  42. package/assets/js/theme.js +4 -4
  43. package/dist/fonts/dyslexic/OpenDyslexic.woff +0 -0
  44. package/dist/fonts/fa/fa-brands-400.eot +0 -0
  45. package/dist/fonts/fa/fa-brands-400.svg +41 -41
  46. package/dist/fonts/fa/fa-brands-400.ttf +0 -0
  47. package/dist/fonts/fa/fa-brands-400.woff +0 -0
  48. package/dist/fonts/fa/fa-brands-400.woff2 +0 -0
  49. package/dist/fonts/fa/fa-regular-400.eot +0 -0
  50. package/dist/fonts/fa/fa-regular-400.svg +2 -2
  51. package/dist/fonts/fa/fa-regular-400.ttf +0 -0
  52. package/dist/fonts/fa/fa-regular-400.woff +0 -0
  53. package/dist/fonts/fa/fa-regular-400.woff2 +0 -0
  54. package/dist/fonts/fa/fa-solid-900.eot +0 -0
  55. package/dist/fonts/fa/fa-solid-900.svg +13 -7
  56. package/dist/fonts/fa/fa-solid-900.ttf +0 -0
  57. package/dist/fonts/fa/fa-solid-900.woff +0 -0
  58. package/dist/fonts/fa/fa-solid-900.woff2 +0 -0
  59. package/dist/fonts/generic-icons/generic-icons.svg +1 -0
  60. package/dist/fonts/generic-icons/generic-icons.ttf +0 -0
  61. package/dist/fonts/generic-icons/generic-icons.woff +0 -0
  62. package/dist/index.css +6 -11
  63. package/dist/js/theme.js +4 -4
  64. package/dist/version.txt +1 -1
  65. package/gradle.properties +1 -1
  66. package/package.json +9 -4
  67. package/package.json.template +8 -3
  68. package/scss/_bootstrap.scss +41 -0
  69. package/scss/_custom-utilities.scss +10 -0
  70. package/scss/atoms/_.scss +4 -0
  71. package/scss/atoms/_display.scss +17 -0
  72. package/scss/{_fonts.scss → atoms/_fonts.scss} +11 -5
  73. package/scss/atoms/_icons.scss +78 -0
  74. package/scss/atoms/_typography.scss +27 -0
  75. package/scss/components/_.scss +21 -0
  76. package/scss/components/_alerts.scss +30 -0
  77. package/scss/components/_avatar.scss +74 -0
  78. package/scss/components/_buttons.scss +78 -0
  79. package/scss/components/_container-advanced.scss +141 -0
  80. package/scss/components/_dominos.scss +182 -0
  81. package/scss/components/_dragndrop.scss +21 -0
  82. package/scss/components/_dropdowns.scss +6 -0
  83. package/scss/components/_emptyscreen.scss +48 -0
  84. package/scss/components/_explorer.scss +38 -0
  85. package/scss/components/_feed.scss +193 -0
  86. package/scss/components/_filters.scss +76 -0
  87. package/scss/components/_forms.scss +28 -0
  88. package/scss/components/_media-library.scss +23 -0
  89. package/scss/components/_modal.scss +25 -0
  90. package/scss/components/_popover.scss +100 -0
  91. package/scss/components/_sticky-toolbox.scss +162 -0
  92. package/scss/components/_table-lists.scss +140 -0
  93. package/scss/components/_tables.scss +19 -0
  94. package/scss/components/_toast.scss +45 -0
  95. package/scss/components/_tree-structure.scss +143 -0
  96. package/scss/components/widget/_.scss +14 -0
  97. package/scss/components/widget/_applications.scss +48 -0
  98. package/scss/components/widget/_base.scss +133 -0
  99. package/scss/components/widget/_bookmarks.scss +23 -0
  100. package/scss/components/widget/_calendar.scss +57 -0
  101. package/scss/components/widget/_dashboard.scss +95 -0
  102. package/scss/components/widget/_featured-news.scss +60 -0
  103. package/scss/components/widget/_flash.scss +101 -0
  104. package/scss/components/widget/_news.scss +35 -0
  105. package/scss/components/widget/_recently-viewed.scss +65 -0
  106. package/scss/components/widget/_record.scss +37 -0
  107. package/scss/components/widget/_rss.scss +33 -0
  108. package/scss/components/widget/_school.scss +93 -0
  109. package/scss/index.scss +15 -13
  110. package/scss/mixins/_.scss +7 -0
  111. package/scss/mixins/_align.scss +5 -0
  112. package/scss/mixins/_avatar.scss +8 -0
  113. package/scss/mixins/_icon.scss +73 -0
  114. package/scss/mixins/_layer.scss +41 -0
  115. package/scss/mixins/_shape.scss +16 -0
  116. package/scss/mixins/_text-truncate.scss +33 -0
  117. package/scss/mixins/_transition.scss +105 -0
  118. package/scss/variables/_.scss +4 -0
  119. package/scss/variables/_colors.scss +51 -0
  120. package/scss/variables/_icons.scss +184 -0
  121. package/scss/variables/_variables-bootstrap.scss +107 -0
  122. package/scss/variables/_variables-ode.scss +12 -0
  123. package/scss/_emptyscreen.scss +0 -45
  124. package/scss/_image-contextual-menu.scss +0 -97
  125. package/scss/_mixins.scss +0 -15
  126. package/scss/_notifications.scss +0 -108
  127. package/scss/_variables-ode.scss +0 -8
@@ -0,0 +1,60 @@
1
+ .widget-featured-news {
2
+ //Widget actualité à la une
3
+
4
+ .featured-news {
5
+ display: flex;
6
+
7
+ .zone-text {
8
+ flex: 1;
9
+ padding: $widget-padding-x;
10
+
11
+ .title {
12
+ font-size: 1.4em;
13
+ font-weight: 700;
14
+ color: #3b3b3b;
15
+ }
16
+ }
17
+
18
+ .zone-image {
19
+
20
+ @include add-overlay(0.5);
21
+ @include have-child-in-middle ();
22
+
23
+ position: relative;
24
+ width: 30%;
25
+ padding: $widget-padding-x;
26
+ overflow: hidden;
27
+ border-bottom-left-radius: 120px;
28
+
29
+ @include media-breakpoint-down(xl) {
30
+ min-width: 220px;
31
+ }
32
+
33
+ .image {
34
+ position: absolute;
35
+ width: 100%;
36
+ height: 100%;
37
+ object-fit: cover;
38
+ object-position: center center;
39
+ }
40
+ }
41
+
42
+ @media (max-width: 1300px) and (min-width: 992px) {
43
+ flex-direction: column;
44
+
45
+ .zone-image {
46
+ width: 100%;
47
+ border-bottom-left-radius: 0;
48
+ }
49
+ }
50
+
51
+ @media (max-width: 500px) {
52
+ flex-direction: column;
53
+
54
+ .zone-image {
55
+ width: 100%;
56
+ border-bottom-left-radius: 0;
57
+ }
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,101 @@
1
+ // Array Widget Flash Colors
2
+ $widget-flash-colors: (
3
+ "red": $red,
4
+ "orange": $orange,
5
+ "green": $green,
6
+ "blue": $blue,
7
+ "grey-dark": $gray-700
8
+ );
9
+
10
+ .widget-flash {
11
+ position: relative;
12
+ padding: $widget-padding-x;
13
+ overflow: hidden;
14
+ color: var(--bs-white);
15
+ background: $primary;
16
+
17
+ @each $key, $value in $widget-flash-colors {
18
+ &.#{$key} {
19
+ --custom-message-color: #{$value};
20
+ background-color: $value;
21
+ }
22
+ }
23
+
24
+ .btn {
25
+ &-close {
26
+ position: absolute;
27
+ top: 10px;
28
+ right: 10px;
29
+ color: var(--bs-dark);
30
+ text-shadow: none;
31
+ }
32
+
33
+ &-expand {
34
+ cursor: pointer;
35
+
36
+ &-inner {
37
+ position: absolute;
38
+ z-index: 2;
39
+ bottom: 0;
40
+ left: 0;
41
+ display: block;
42
+ width: 100%;
43
+ padding: 5px;
44
+ font-size: 0.8em;
45
+ color: var(--bs-white);
46
+ text-align: center;
47
+ background: rgba(#000, 0.1);
48
+
49
+ @include background-color-to(rgba(#000, 0.2));
50
+ }
51
+ }
52
+ }
53
+
54
+ .flash-content {
55
+ padding-right: 1rem;
56
+
57
+ p {
58
+ > br:first-child {
59
+ display: none;
60
+ }
61
+ }
62
+
63
+ &.can-be-truncated {
64
+ &:not(.flash-content-is-expandable) {
65
+
66
+ p {
67
+ @include has-text-truncated(4);
68
+ }
69
+
70
+ &::after {
71
+ content: "";
72
+ position: absolute;
73
+ z-index: 1;
74
+ bottom: 2em;
75
+ right: 0;
76
+ left: 0;
77
+ height: 4em;
78
+ background: linear-gradient(to bottom, rgba(255,255,255,0), var(--custom-message-color));
79
+ }
80
+
81
+ @media not all and (min-resolution:.001dpcm) {
82
+ &::after {
83
+ display: none;
84
+ }
85
+ }
86
+
87
+ .flash-content-signature {
88
+ display: none;
89
+ }
90
+ }
91
+
92
+ .flash-content-signature {
93
+ padding-bottom: 1rem;
94
+ }
95
+ }
96
+
97
+ > *:last-child {
98
+ margin-bottom: 0;
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,35 @@
1
+ .widget-news {
2
+ //Widget Actualités
3
+
4
+ .news-row {
5
+ @include background-color-to($gray-100, 0.4s, $easeOutQuad);
6
+
7
+ display: flex;
8
+ align-items: center;
9
+ padding: 1rem $widget-padding-x;
10
+ text-decoration: none;
11
+
12
+ &-image {
13
+ width: 60px;
14
+ padding-right: 2.5rem;
15
+ text-align: center;
16
+ transition: transform 0.4s $easeInOutQuad;
17
+ transform-origin: center;
18
+
19
+ img {
20
+ max-height: 4rem;
21
+ max-width: 4rem;
22
+ }
23
+ }
24
+
25
+ &-text {
26
+ line-height: 1.4em;
27
+ }
28
+
29
+ &:hover {
30
+ .news-row-image {
31
+ transform: translateX(5px);
32
+ }
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,65 @@
1
+ $recently-viewed-image-width: 35;
2
+
3
+ .widget-recently-viewed {
4
+ //Widget Consultations récentes
5
+
6
+ .recently-viewed {
7
+ &-item {
8
+ @include background-color-to($gray-100, 0.4s, $easeOutQuad);
9
+
10
+ &:hover {
11
+ .icon-app {
12
+ background-color: $gray-100;
13
+ transform: translateX(60%);
14
+ }
15
+ }
16
+ }
17
+ }
18
+
19
+ .link-card {
20
+ @include decoration-to(none);
21
+
22
+ position: relative;
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: flex-end;
26
+ padding-left: $widget-padding-x;
27
+ border-top: 1px solid $gray-100;
28
+
29
+ .text {
30
+ width: 100 - $recently-viewed-image-width * 1%;
31
+ padding-right: 0.5em;
32
+ }
33
+
34
+ .image {
35
+ @include add-overlay(0.2);
36
+
37
+ width: $recently-viewed-image-width * 1%;
38
+ height: 5em;
39
+ max-height: 120px;
40
+
41
+ img {
42
+ width: 100%;
43
+ height: 100%;
44
+ object-fit: cover;
45
+ object-position: center center;
46
+ }
47
+ }
48
+
49
+ .icon-app {
50
+ @include have-child-in-middle();
51
+ @include add-transitions(background-color, transform);
52
+
53
+ position: absolute;
54
+ right: $recently-viewed-image-width * 1%;
55
+ z-index: 2;
56
+ width: 2em;
57
+ height: 2em;
58
+ font-size: 1.75em;
59
+ background-color: #fff;
60
+ border-radius: 190px;
61
+ transition-timing-function: $easeOutQuad;
62
+ transform: translateX(50%);
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,37 @@
1
+ .widget-record {
2
+ .widget-body {
3
+ display: flex;
4
+ align-items: center;
5
+
6
+ > * {
7
+ flex: 1;
8
+ padding: 10px;
9
+ text-align: center;
10
+ //max-height: 120px;
11
+
12
+ .img-fluid {
13
+ width: 100px;
14
+ }
15
+ }
16
+ }
17
+ }
18
+
19
+ .record {
20
+ &-timer {
21
+ font-size: 2em;
22
+ }
23
+
24
+ &-controls {
25
+ display: flex;
26
+ justify-content: space-around;
27
+ margin-block: 1.5em;
28
+
29
+ .btn-circle {
30
+ font-size: 1.2em;
31
+
32
+ &:hover {
33
+ color: $white;
34
+ }
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,33 @@
1
+ //Widget RSS
2
+ .widget-rss {
3
+ .rss-feed {
4
+ .feed-title {
5
+ padding: 8px $widget-padding-x;
6
+ font-weight: 700;
7
+ color: #fff;
8
+ background: $third;
9
+
10
+ @include append-icon("\f0d7", 1em, 15px);
11
+ cursor: pointer;
12
+ }
13
+
14
+ .item {
15
+ &:nth-child(2n) {
16
+ background: rgba($third, 0.07);
17
+ }
18
+
19
+ a {
20
+ display: block;
21
+ padding: 10px $widget-padding-x;
22
+ text-decoration: none;
23
+
24
+ @include background-color-to($gray-100, 0.4s, $easeOutQuad);
25
+ }
26
+
27
+ img {
28
+ max-width: 100%;
29
+ height: auto;
30
+ }
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,93 @@
1
+ //Widget établissement
2
+ .widget-school {
3
+ &-header {
4
+ @include border-top-radius(6px);
5
+
6
+ position: relative;
7
+ padding: 30px $widget-padding-x;
8
+ font-size: 1.3em;
9
+ color: #fff;
10
+ background-position: center;
11
+ background-size: cover;
12
+
13
+ .name {
14
+ font-weight: 600;
15
+ }
16
+
17
+ .school {
18
+ &,
19
+ &-multiple {
20
+ position: relative;
21
+ font-size: 0.9em;
22
+ font-weight: 400;
23
+ }
24
+
25
+ &-multiple {
26
+ // @include prepend-icon("\f150", 1.1em);
27
+
28
+ cursor: pointer;
29
+ white-space: normal;
30
+ display: inline-flex;
31
+ align-items: baseline;
32
+ gap: 1rem;
33
+
34
+ &::before {
35
+ @include fontawesome();
36
+ content: "\f150";
37
+ top: 0.2rem;
38
+ position: relative;
39
+ }
40
+
41
+ &::after {
42
+ display: none
43
+ }
44
+ }
45
+
46
+ &-choice {
47
+ > div {
48
+ @include color-to($primary);
49
+
50
+ padding: 6px 20px;
51
+ cursor: pointer;
52
+
53
+ &.dropdown-item {
54
+ white-space: normal;
55
+ }
56
+ }
57
+ }
58
+ }
59
+
60
+ .avatar-list {
61
+ position: absolute;
62
+ bottom: 0;
63
+ left: 0;
64
+ display: flex;
65
+ flex-direction: row;
66
+ justify-content: space-between;
67
+ width: 100%;
68
+ padding: 0 $widget-padding-x;
69
+ transform: translateY(50%);
70
+
71
+ @include media-breakpoint-down(xl) {
72
+ .avatar-link:nth-child(n + 4) {
73
+ display: none;
74
+ }
75
+ }
76
+ }
77
+ }
78
+
79
+ .btn-group {
80
+ padding: 1.6rem;
81
+ padding-bottom: 0;
82
+ flex-wrap: wrap;
83
+
84
+ > * {
85
+ padding: 0.6rem 1.5rem;
86
+ margin-bottom: 1em;
87
+
88
+ &:not(:last-child) {
89
+ margin-right: 0.4em;
90
+ }
91
+ }
92
+ }
93
+ }
package/scss/index.scss CHANGED
@@ -1,13 +1,15 @@
1
- @import "variables-ode";
2
- @import "mixins";
3
- @import "fonts";
4
-
5
- #{$root-selector} {
6
- @import "node_modules/bootstrap/scss/functions";
7
- @import "node_modules/bootstrap/scss/variables";
8
- @import "node_modules/bootstrap/scss/mixins";
9
- @import "node_modules/bootstrap/scss/bootstrap";
10
- @import "emptyscreen";
11
- @import "notifications";
12
- @import "image-contextual-menu";
13
- }
1
+ @import "variables/";
2
+
3
+ // --- IMPORT BOOTSTRAP NATIVE ---
4
+ @import "bootstrap";
5
+
6
+ // --- IMPORT MIXINS ---
7
+ @import "mixins/";
8
+
9
+ // --- IMPORT ATOMS ---
10
+ // Contient tous nos éléments de style les plus petits et les plus insécables
11
+ @import "atoms/";
12
+
13
+ // --- IMPORT COMPONENTS ---
14
+ // Contient tous nos composants visuels, simple ou complexe
15
+ @import "components/";
@@ -0,0 +1,7 @@
1
+ @import "transition";
2
+ @import "icon";
3
+ @import "layer";
4
+ @import "shape";
5
+ @import "avatar";
6
+ @import "align";
7
+ @import "text-truncate";
@@ -0,0 +1,5 @@
1
+ @mixin have-child-in-middle() {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ }
@@ -0,0 +1,8 @@
1
+ @mixin avatar-image($size: 50px) {
2
+ @include circle($size);
3
+
4
+ object-fit: cover;
5
+ object-position: center center;
6
+ border: 2px solid #dcdce6;
7
+ box-shadow: -2px -2px 5px 0 rgba(0, 0, 0, 0.1);
8
+ }
@@ -0,0 +1,73 @@
1
+ @mixin fonticon {
2
+ font-family: generic-icons;
3
+ font-weight: 400 !important;
4
+ background-image: none;
5
+ -webkit-font-smoothing: antialiased;
6
+ -moz-osx-font-smoothing: grayscale;
7
+ }
8
+
9
+ @mixin fontawesome {
10
+ display: inline-block;
11
+ font-family: "Font Awesome 5 Free";
12
+ font-style: normal;
13
+ font-weight: 900;
14
+ font-variant: normal;
15
+ line-height: 1;
16
+ -webkit-font-smoothing: antialiased;
17
+ text-rendering: auto;
18
+ font-feature-settings: "liga";
19
+ }
20
+
21
+ @mixin insert-icon($icon: "star", $size: 28px, $top: 0, $color: inherit) {
22
+ position: relative;
23
+
24
+ &::before {
25
+ @include fontawesome();
26
+
27
+ position: absolute;
28
+ top: $top;
29
+ left: 0;
30
+ display: block;
31
+ font-size: $size;
32
+ line-height: 1em;
33
+ color: $color;
34
+ text-transform: initial;
35
+ content: $icon !important;
36
+ font-feature-settings: "liga";
37
+ }
38
+ }
39
+
40
+ @mixin prepend-icon($icon: "star", $size: 28px, $left: 0, $color: inherit) {
41
+ @include insert-icon($icon, $size, 50%, $color);
42
+
43
+ &::before {
44
+ position: absolute;
45
+ top: 50%;
46
+ left: $left;
47
+ z-index: 10;
48
+ transform: translateY(-50%);
49
+ @content;
50
+ }
51
+ }
52
+
53
+ @mixin append-icon($icon: "star", $size: 28px, $right: 0, $color: inherit) {
54
+ padding-right: $size * 1.5;
55
+
56
+ @include insert-icon($icon, $size, 50%, $color);
57
+
58
+ &::before {
59
+ position: absolute;
60
+ top: 50%;
61
+ right: $right;
62
+ left: unset;
63
+ z-index: 10;
64
+ transform: translateY(-50%);
65
+ @content;
66
+ }
67
+ }
68
+
69
+ @mixin set-icon-top($top:50%) {
70
+ &::before {
71
+ top: $top;
72
+ }
73
+ }
@@ -0,0 +1,41 @@
1
+ @mixin base-layer() {
2
+ position: absolute;
3
+ top: 0;
4
+ left: 0;
5
+ display: block;
6
+ width: 100%;
7
+ height: 100%;
8
+ content: "";
9
+ }
10
+
11
+ @mixin add-before-layer() {
12
+ position: relative;
13
+
14
+ &::before {
15
+
16
+ @include base-layer();
17
+ @content;
18
+ }
19
+ }
20
+
21
+ @mixin add-after-layer() {
22
+ position: relative;
23
+
24
+ &::after {
25
+
26
+ @include base-layer();
27
+ @content;
28
+ }
29
+ }
30
+
31
+ @mixin add-overlay($opacity: 0.5) {
32
+ position: relative;
33
+
34
+ &::before {
35
+
36
+ @include base-layer();
37
+
38
+ z-index: 1;
39
+ background: rgba(0, 0, 0, $opacity);
40
+ }
41
+ }
@@ -0,0 +1,16 @@
1
+ @mixin rect($width, $height) {
2
+ width: $width;
3
+ height: $height;
4
+ }
5
+
6
+ @mixin square($width) {
7
+
8
+ @include rect($width, $width);
9
+ }
10
+
11
+ @mixin circle($width) {
12
+
13
+ @include square($width);
14
+
15
+ border-radius: 50%;
16
+ }
@@ -0,0 +1,33 @@
1
+ // Text truncate
2
+ // Requires inline-block or block for proper styling
3
+
4
+ @mixin text-truncate() {
5
+ overflow: hidden;
6
+ text-overflow: ellipsis;
7
+ white-space: nowrap;
8
+ }
9
+
10
+ @mixin has-text-truncated($lines: 3) {
11
+ display: -webkit-box;
12
+ padding-bottom: .5rem;
13
+ overflow: hidden;
14
+ -webkit-line-clamp: $lines;
15
+ -webkit-box-orient: vertical;
16
+ }
17
+
18
+ // Hack for multiline ellipsis
19
+ .text-truncate {
20
+ &.text-truncate--2 {
21
+ display: -webkit-box;
22
+ -webkit-line-clamp: 2;
23
+ -webkit-box-orient: vertical;
24
+ white-space: normal;
25
+ }
26
+
27
+ &.text-truncate--3 {
28
+ display: -webkit-box;
29
+ -webkit-line-clamp: 3;
30
+ -webkit-box-orient: vertical;
31
+ white-space: normal;
32
+ }
33
+ }