@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/_tabs.scss CHANGED
@@ -1,178 +1,50 @@
1
- // Tabs
2
- // ---------------------------------------------------------------------------------------------------------------
3
-
4
- .tabs {
5
- margin: 0 0 20px 0;
6
- padding: $section-padding 0;
7
- width: 100%;
8
- box-sizing: border-box;
9
- font-size: 0;
10
- display: flex;
11
- align-items: flex-end;
12
- border-radius: $border-radius;
13
-
14
- > li,
15
- > div {
16
- background: $tabs-bg;
17
- display: inline-block;
18
- list-style: none;
19
- user-select: none;
20
- font-size: $font-size-lg;
21
- margin: 0 spacer(2) 0 0;
22
- text-align: center;
23
- overflow: hidden;
24
- flex-grow: 0;
25
-
26
- &:hover {
27
- > span,
28
- > a {
29
- color: theme-color('dark');
30
- border-color: theme-color('dark');
31
- }
32
- }
33
-
34
- &.active {
35
- > span,
36
- > a {
37
- color: theme-color('primary');
38
- border-color: theme-color('primary');
39
- }
40
- }
41
-
42
- > a,
43
- > span {
44
- color: $tabs-text-color;
45
- cursor: pointer;
46
- display: block;
47
- width: 100%;
48
- height: 100%;
49
- box-sizing: border-box;
50
- overflow: hidden;
51
- text-overflow: ellipsis;
52
- color: theme-color('medium');
53
- padding: 0 0 spacer(2) 0;
54
- font-family: $font-family-title;
55
- font-weight: 600;
56
-
57
- @include media-breakpoint-up(md) {
58
- border-bottom: 3px solid transparent;
59
- }
60
- }
61
- }
62
- }
63
-
64
- .tab-toggler {
65
- display: none;
66
-
67
- @include media-breakpoint-down(sm) {
68
- display: block;
69
- }
70
- }
71
-
72
- .tab-content {
73
- border-radius: $border-radius;
74
-
75
- & + .tab-content {
76
- margin-top: 20px;
77
- }
78
-
79
- &.with-background {
80
- background: white;
81
- padding: 10px;
82
- }
83
-
84
- &.has-table {
85
- padding: 0;
86
- border: none;
87
- }
88
- }
89
-
90
- @include media-breakpoint-down(sm) {
91
-
92
- .tabs-container {
93
- margin-left: -5px;
94
- margin-right: -5px;
95
- }
96
-
97
- .tabs {
98
- display: flex;
99
- flex-direction: row;
100
- flex-wrap: wrap;
101
- position: relative;
102
- z-index: 19;
103
- flex: 1 1 auto;
104
- padding: 0;
105
- white-space: nowrap;
106
- overflow: hidden;
107
- border-radius: $border-radius;
108
- border: 0;
109
- box-sizing: border-box;
110
- margin-bottom: 10px;
111
-
112
- > li,
113
- > div {
114
- display: none;
115
- flex: 1 0 100%;
116
- border-radius: $border-radius;
117
- border: 0;
118
- text-align: center;
119
- max-width: 100%;
120
- text-align: left;
121
-
122
- > a,
123
- > span {
124
- padding: 10px;
125
- }
126
-
127
- &.active {
128
- display: block;
129
- overflow: hidden;
130
- text-overflow: ellipsis;
131
- order: -1;
132
- }
133
-
134
- &:hover:not(.active) {
135
- background-color: theme-color('light');
136
- > a {
137
- border-color: transparent;
138
- }
139
- }
140
- }
141
- }
142
-
143
- .tab-toggler {
144
- position: absolute;
145
- left: 0;
146
- top: 0;
147
- right: 0;
148
- bottom: 0;
149
- height: 40px;
150
- display: block;
151
- line-height: 40px;
152
- text-align: right;
153
- border: none;
154
- border-radius: $border-radius;
155
- background: transparent;
156
- background-color: transparent;
157
- z-index: 100;
158
-
159
- .icon {
160
- margin-right: 15px;
161
- color: theme-color('dark');
162
- }
163
- }
164
-
165
- .tabs-container {
166
- position: relative;
167
-
168
- &.open {
169
- .tabs {
170
- > li,
171
- > div {
172
- display: block;
173
- border-radius: 0;
174
- }
175
- }
176
- }
177
- }
178
- }
1
+ @use "variables" as *;
2
+ /* Tabs ========================================================================== */
3
+
4
+ @mixin cool-tabs {
5
+ .tabs-container {
6
+ overflow-x: auto;
7
+
8
+ &:has(+ .tab-content) {
9
+ padding-bottom: var(--cool-section-spacer);
10
+ }
11
+ }
12
+
13
+ .tabs {
14
+ display: inline-flex;
15
+ gap: 1px;
16
+ align-items: center;
17
+ background-color: var(--cool-section-bg);
18
+ border-radius: calc(var(--cool-section-border-radius) + 2px);
19
+ padding: 2px;
20
+ list-style-type: none;
21
+ margin: 0;
22
+ border: 1px solid var(--cool-section-border-color);
23
+ box-shadow: var(--cool-box-shadow-sm);
24
+
25
+ .tab-item {
26
+ &.active .tab-item-action {
27
+ border-color: var(--cool-theme-text-color-info);
28
+ color: var(--cool-theme-text-color-info);
29
+ }
30
+
31
+ .tab-item-action {
32
+ display: block;
33
+ padding: var(--cool-spacing-1) var(--cool-spacing-1);
34
+ border: 1px solid transparent;
35
+ border-radius: var(--cool-section-border-radius);
36
+ transition: all 0.2s ease-in-out;
37
+ color: var(--cool-theme-text-color-dark);
38
+ font-size: var(--cool-font-size-sm);
39
+ }
40
+ }
41
+ }
42
+ }
43
+
44
+ @if $cool-use-component-layer {
45
+ @layer components {
46
+ @include cool-tabs;
47
+ }
48
+ } @else {
49
+ @include cool-tabs;
50
+ }
package/scss/_toast.scss CHANGED
@@ -1,182 +1,277 @@
1
- // Toast
2
- // ---------------------------------------------------------------------------------------------------------------
3
-
4
- .toast {
5
- position: absolute;
6
- display: block;
7
- z-index: $zindex-toast;
8
- opacity: 0;
9
- transition: opacity 0.25s;
10
-
11
- &.show {
12
- opacity: 1;
13
- }
14
- }
1
+ @use "variables" as *;
2
+ /* Toast ========================================================================== */
3
+
4
+ @mixin cool-toast {
5
+ // ── Container: fixed overlay per placement zone ──────────────────────
6
+ .toast-container {
7
+ // Offset from edge — overridable per-instance via inline custom props
8
+ --_toast-offset-x: var(--cool-toast-offset-x);
9
+ --_toast-offset-y: var(--cool-toast-offset-y);
10
+ --_toast-gap: var(--cool-toast-gap);
11
+ --_toast-stack-offset: var(--cool-toast-stack-offset);
12
+ --_toast-max-visible: 3;
13
+ --_toast-animation-easing: ease-in-out;
14
+ --_toast-transform-origin-x: left;
15
+ --_toast-transform-origin-y: top;
16
+
17
+ position: fixed;
18
+ z-index: var(--cool-zindex-toast);
19
+ display: grid;
20
+ margin-block: 0;
21
+ margin-inline: 0;
22
+ transition: gap var(--cool-toast-transition-duration) var(--_toast-animation-easing);
23
+ padding: var(--_toast-offset-y) var(--_toast-offset-x);
24
+ transform-origin: var(--_toast-transform-origin-x) var(--_toast-transform-origin-y);
25
+ translate: 0 0 0;
26
+ gap: 0;
27
+
28
+ // ── Placement: vertical ─────────────────────────────────────────
29
+ &[data-placement^="top-"] {
30
+ top: 0;
31
+ flex-direction: column-reverse; // newest on top
32
+ }
15
33
 
16
- .toast-inner {
17
- background-clip: padding-box;
18
- border-radius: $toast-border-radius;
19
- font-size: $toast-font-size;
20
- word-wrap: break-word;
21
- @include reset-text;
22
- }
34
+ &[data-placement^="bottom-"] {
35
+ bottom: 0;
36
+ flex-direction: column; // newest on bottom
37
+ }
23
38
 
24
- .toast-header {
25
- display: flex;
26
- align-items: center;
27
- justify-content: space-between;
28
- padding: $toast-header-padding-y $toast-header-padding-x;
29
- margin-top: 0;
30
- margin-bottom: 0;
31
- font-size: $font-size-base;
32
- border-width: $toast-border-width;
33
- border-style: solid;
34
- border-top-left-radius: calc(#{$border-radius} - #{$toast-border-width});
35
- border-top-right-radius: calc(#{$border-radius} - #{$toast-border-width});
36
-
37
- span {
38
- font-weight: $font-weight-bold;
39
- }
40
-
41
- button[data-toast-close] {
42
- background-color: transparent;
43
- border: 0;
44
- opacity: 0.75;
45
- line-height: 0;
46
- padding: 0;
39
+ // ── Placement: horizontal ───────────────────────────────────────
40
+ &[data-placement$="-left"] {
41
+ left: 0;
42
+ justify-items: start;
43
+ }
47
44
 
48
- svg {
49
- pointer-events: none;
45
+ &[data-placement$="-center"] {
46
+ left: 0;
47
+ right: 0;
48
+ margin-inline: auto;
49
+ justify-items: center;
50
50
  }
51
51
 
52
- &:hover,
53
- &:focus {
54
- opacity: 1;
55
- outline: 0
52
+ &[data-placement$="-right"] {
53
+ right: 0;
54
+ justify-items: end;
55
+ --_toast-transform-origin-x: right;
56
+ }
57
+
58
+ // ── Transform origin per placement direction ────────────────────
59
+ &[data-placement^="top-"] .toast {
60
+ --_toast-transform-origin-y: top;
61
+ }
62
+
63
+ &[data-placement^="bottom-"] .toast {
64
+ --_toast-transform-origin-y: bottom;
65
+ }
66
+
67
+ &[data-placement$="-center"] .toast {
68
+ --_toast-transform-origin-y: center;
69
+ }
70
+
71
+ .toast {
72
+ transition:
73
+ grid-area var(--cool-toast-transition-duration) var(--_toast-animation-easing),
74
+ scale var(--cool-toast-transition-duration) var(--_toast-animation-easing),
75
+ opacity var(--cool-toast-transition-duration) var(--_toast-animation-easing),
76
+ translate var(--cool-toast-transition-duration) var(--_toast-animation-easing);
77
+ }
78
+
79
+ // ── Stacking (collapsed state) ──────────────────────────────────
80
+ // Each toast has --_toast-index set by JS (0 = front, 1 = behind, …)
81
+ // Toasts behind the front-most get progressively smaller + more transparent
82
+
83
+ &:not(:hover) {
84
+ // top-* uses column-reverse: older items are below newest,
85
+ // negative margin-top pulls them UP behind the newest
86
+ &[data-placement^="top-"] .toast {
87
+ &:not(:last-child) {
88
+ translate: 0 calc((var(--_toast-index)) * var(--_toast-stack-offset)) 0;
89
+ }
90
+
91
+ &[data-toast-hidden="true"] {
92
+ translate: 0 0 0;
93
+ }
94
+ }
95
+
96
+ // bottom-* and center-* use normal column: older items are above newest,
97
+ // negative margin-bottom pulls the next item UP behind
98
+ &[data-placement^="bottom-"] .toast,
99
+ &[data-placement^="center-"] .toast {
100
+ &:not(:last-child) {
101
+ translate: 0 calc(-1 * (var(--_toast-index)) * var(--_toast-stack-offset)) 0;
102
+ }
103
+
104
+ &[data-toast-hidden="true"] {
105
+ translate: 0 0 0;
106
+ }
107
+ }
108
+
109
+ .toast {
110
+ // Scale + opacity based on index for depth effect
111
+ scale: calc(1 - var(--_toast-index, 0) * var(--cool-toast-stack-scale));
112
+ opacity: calc(1 - var(--_toast-index, 0) * var(--cool-toast-stack-opacity));
113
+
114
+ &[data-toast-hidden="true"] {
115
+ opacity: 0;
116
+ }
117
+ }
118
+ }
119
+
120
+ // ── Expanded state (hover) ──────────────────────────────────────
121
+ &:hover {
122
+ .toast {
123
+ scale: 1;
124
+ opacity: 1;
125
+ translate: 0 0 0;
126
+ grid-area: auto;
127
+
128
+ &[data-toast-hidden="true"] {
129
+ opacity: 1;
130
+ }
131
+ }
132
+
133
+ gap: var(--_toast-gap);
56
134
  }
57
135
  }
58
136
 
59
- &:empty {
60
- display: none;
61
- }
62
- }
137
+ // ── Individual toast ─────────────────────────────────────────────────
138
+ .toast {
139
+ position: relative;
140
+ display: block;
141
+ pointer-events: auto;
142
+ max-width: var(--cool-toast-max-width, 420px);
143
+ width: max-content;
144
+ z-index: calc(var(--_toast-max-visible, 3) - var(--_toast-index, 0));
145
+ will-change: scale, opacity, translate, grid-area;
146
+ opacity: 0;
147
+ grid-area: 1/1;
148
+ min-width: 220px;
149
+
150
+ &.show {
151
+ opacity: 1;
152
+ }
153
+ }
63
154
 
64
- .toast-body {
65
- display: flex;
66
- align-items: center;
67
- justify-content: space-between;
68
- padding: $toast-body-padding-y $toast-body-padding-x;
69
- -webkit-font-smoothing: subpixel-antialiased;
155
+ // ── Inner wrapper ────────────────────────────────────────────────────
156
+ .toast-inner {
157
+ background-clip: padding-box;
158
+ background-color: var(--cool-toast-bg);
159
+ border-radius: var(--cool-toast-border-radius);
160
+ font-size: var(--cool-toast-font-size);
161
+ word-wrap: break-word;
162
+ font-family: var(--cool-font-family-base);
163
+ font-style: normal;
164
+ font-weight: var(--cool-font-weight-base);
165
+ line-height: var(--cool-line-height-base);
166
+ text-align: start;
167
+ text-decoration: none;
168
+ text-shadow: none;
169
+ text-transform: none;
170
+ letter-spacing: normal;
171
+ word-break: normal;
172
+ word-spacing: normal;
173
+ white-space: normal;
174
+ line-break: auto;
175
+ }
70
176
 
71
- button[data-toast-close] {
177
+ button[data-toast-close] {
72
178
  background-color: transparent;
73
179
  border: 0;
180
+ color: var(--cool-toast-header-color);
74
181
  opacity: 0.75;
75
182
  line-height: 0;
76
183
  padding: 0;
77
- margin-left: $toast-body-padding-x;
184
+ cursor: pointer;
78
185
 
79
186
  svg {
80
- pointer-events: none;
187
+ pointer-events: none;
81
188
  }
82
189
 
83
190
  &:hover,
84
191
  &:focus {
85
192
  opacity: 1;
86
- outline: 0
193
+ outline: 0;
87
194
  }
88
195
  }
89
- }
90
-
91
-
92
- // Themes
93
- .toast-light {
94
- .toast-inner {
95
- background-color: $toast-bg-light;
96
-
97
- .toast-header {
98
- color: $toast-header-color-light;
99
- background-color: $toast-header-bg-light;
100
- border-color: $toast-header-bg-light;
101
-
102
- button[data-toast-close] {
103
- color: $toast-header-color-light;
104
- }
105
- }
106
-
107
- .toast-body {
108
- color: $toast-body-color-light;
109
-
110
- button[data-toast-close] {
111
- color: $toast-body-color-light;
112
- }
113
- }
114
- }
115
- }
116
196
 
117
- .toast-dark {
118
- .toast-inner {
119
- background-color: $toast-bg-dark;
197
+ // ── Header ───────────────────────────────────────────────────────────
198
+ .toast-header {
199
+ display: flex;
200
+ align-items: center;
201
+ padding: var(--cool-toast-header-padding-y) var(--cool-toast-header-padding-x) 0;
202
+ gap: var(--cool-toast-header-gap, 8px);
203
+ margin-top: 0;
204
+ margin-bottom: 0;
205
+ color: var(--cool-toast-header-color);
206
+ background-color: var(--cool-toast-header-bg);
207
+ border-color: var(--cool-toast-header-bg);
208
+ font-size: var(--cool-font-size-base);
209
+ border-width: var(--cool-toast-border-width);
210
+ border-style: solid;
211
+ border-top-left-radius: calc(var(--cool-border-radius) - var(--cool-toast-border-width));
212
+ border-top-right-radius: calc(var(--cool-border-radius) - var(--cool-toast-border-width));
213
+
214
+ span {
215
+ font-weight: var(--cool-font-weight-bold);
216
+ }
120
217
 
121
- .toast-header {
122
- color: $toast-header-color-dark;
123
- background-color: $toast-header-bg-dark;
124
- border-color: $toast-header-bg-dark;
218
+ &:empty {
219
+ display: none;
220
+ }
221
+ }
125
222
 
126
- button[data-toast-close] {
127
- color: $toast-header-color-dark;
128
- }
129
- }
223
+ // ── Body ─────────────────────────────────────────────────────────────
224
+ .toast-body {
225
+ padding: var(--cool-toast-body-padding-y) var(--cool-toast-body-padding-x);
226
+ color: var(--cool-toast-body-color);
227
+ -webkit-font-smoothing: subpixel-antialiased;
130
228
 
131
- .toast-body {
132
- color: $toast-body-color-dark;
229
+ &:has(> button[data-toast-close]) {
230
+ display: grid;
231
+ grid-template-columns: 1fr auto;
232
+ }
233
+ }
133
234
 
134
- button[data-toast-close] {
135
- color: $toast-body-color-dark;
136
- }
137
- }
138
- }
139
- }
235
+ // ── Icon ─────────────────────────────────────────────────────────────
236
+ .toast-icon {
237
+ --icon-size: 16px;
238
+ flex-shrink: 0;
239
+ width: var(--icon-size);
240
+ height: var(--icon-size);
241
+ display: flex;
242
+ align-items: center;
243
+ justify-content: center;
244
+
245
+ &:has(> img) {
246
+ --icon-size: 24px;
247
+ }
140
248
 
249
+ img {
250
+ --icon-radius: var(
251
+ --cool-toast-icon-border-radius,
252
+ calc(
253
+ var(--cool-border-radius) - var(--cool-toast-border-width) - var(--cool-toast-header-padding-y) / 2
254
+ )
255
+ );
256
+ width: 100%;
257
+ height: 100%;
258
+ object-fit: cover;
259
+ border-radius: var(--icon-radius);
260
+ }
141
261
 
142
- // Sizes
143
- .toast-sm {
144
- .toast-inner {
145
- .toast-header {
146
- padding: $toast-header-padding-y-sm $toast-header-padding-x-sm;
147
- font-size: $toast-font-size-sm;
148
- }
149
-
150
- .toast-body {
151
- padding: $toast-body-padding-y-sm $toast-body-padding-x-sm;
152
- font-size: $toast-font-size-sm;
153
-
154
- button[data-toast-close] {
155
- margin-left: $toast-body-padding-x-sm;
156
- }
157
- }
262
+ i,
263
+ svg {
264
+ font-size: calc(var(--icon-size) * 0.625);
265
+ color: var(--cool-toast-body-color);
266
+ opacity: 0.75;
267
+ }
158
268
  }
159
269
  }
160
270
 
161
- .toast-lg {
162
- .toast-inner {
163
- .toast-header {
164
- padding: $toast-header-padding-y-lg $toast-header-padding-x-lg;
165
- font-size: $toast-font-size-lg;
166
-
167
- span {
168
- font-weight: $font-weight-normal;
169
- }
170
- }
171
-
172
- .toast-body {
173
- padding: $toast-body-padding-y-lg $toast-body-padding-x-lg;
174
- font-size: $toast-font-size-lg;
175
- font-weight: $font-weight-light;
176
-
177
- button[data-toast-close] {
178
- margin-left: $toast-body-padding-x-lg;
179
- }
180
- }
271
+ @if $cool-use-component-layer {
272
+ @layer components {
273
+ @include cool-toast;
181
274
  }
182
- }
275
+ } @else {
276
+ @include cool-toast;
277
+ }