@finqu/cool 1.3.0 → 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 (74) hide show
  1. package/README.md +23 -9
  2. package/dist/css/cool.css +13391 -7742
  3. package/dist/css/cool.css.map +1 -1
  4. package/dist/css/cool.min.css +2 -93
  5. package/dist/css/cool.min.css.map +1 -1
  6. package/dist/js/cool.bundle.js +16051 -17050
  7. package/dist/js/cool.bundle.js.map +1 -1
  8. package/dist/js/cool.bundle.min.js +11 -18
  9. package/dist/js/cool.bundle.min.js.map +1 -1
  10. package/dist/js/cool.esm.js +3469 -4468
  11. package/dist/js/cool.esm.js.map +1 -1
  12. package/dist/js/cool.esm.min.js +2 -8
  13. package/dist/js/cool.esm.min.js.map +1 -1
  14. package/dist/js/cool.js +5083 -6089
  15. package/dist/js/cool.js.map +1 -1
  16. package/dist/js/cool.min.js +2 -8
  17. package/dist/js/cool.min.js.map +1 -1
  18. package/package.json +48 -16
  19. package/scss/LISENCE +15 -0
  20. package/scss/_badge.scss +134 -0
  21. package/scss/_button-group.scss +80 -0
  22. package/scss/_buttons.scss +304 -0
  23. package/scss/_dark.scss +637 -0
  24. package/scss/_dialog.scss +351 -0
  25. package/scss/_dropdown.scss +165 -0
  26. package/scss/_forms.scss +613 -0
  27. package/scss/_frame.scss +948 -0
  28. package/scss/_grid.scss +215 -0
  29. package/scss/_input-group.scss +326 -0
  30. package/scss/_list-group.scss +127 -0
  31. package/scss/_media.scss +439 -0
  32. package/scss/_navbar.scss +122 -0
  33. package/scss/_notification.scss +115 -0
  34. package/scss/_pagination.scss +82 -0
  35. package/scss/_popover.scss +61 -0
  36. package/scss/_reboot.scss +306 -0
  37. package/scss/_root.scss +848 -0
  38. package/scss/_section.scss +735 -0
  39. package/scss/_select.scss +559 -0
  40. package/scss/_tables.scss +611 -0
  41. package/scss/_tabs.scss +50 -0
  42. package/scss/_toast.scss +277 -0
  43. package/scss/_tooltip.scss +130 -0
  44. package/scss/_typography.scss +166 -0
  45. package/scss/_variables.scss +1229 -0
  46. package/scss/cool.scss +69 -0
  47. package/scss/utilities/_align.scss +51 -0
  48. package/scss/utilities/_animation.scss +165 -0
  49. package/scss/utilities/_background.scss +72 -0
  50. package/scss/utilities/_borders.scss +205 -0
  51. package/scss/utilities/_collapse.scss +28 -0
  52. package/scss/utilities/_cursor.scss +160 -0
  53. package/scss/utilities/_display.scss +116 -0
  54. package/scss/utilities/_embed.scss +89 -0
  55. package/scss/utilities/_fill.scss +79 -0
  56. package/scss/utilities/_filters.scss +233 -0
  57. package/scss/utilities/_flex.scss +216 -0
  58. package/scss/utilities/_grid.scss +136 -0
  59. package/scss/utilities/_opacity.scss +131 -0
  60. package/scss/utilities/_overflow.scss +242 -0
  61. package/scss/utilities/_perfect-scrollbar.scss +147 -0
  62. package/scss/utilities/_pointer-events.scss +125 -0
  63. package/scss/utilities/_position.scss +130 -0
  64. package/scss/utilities/_screen-readers.scss +95 -0
  65. package/scss/utilities/_shadows.scss +195 -0
  66. package/scss/utilities/_sizing.scss +288 -0
  67. package/scss/utilities/_spacing.scss +168 -0
  68. package/scss/utilities/_stroke.scss +124 -0
  69. package/scss/utilities/_text.scss +420 -0
  70. package/scss/utilities/_transform.scss +232 -0
  71. package/scss/utilities/_transitions.scss +147 -0
  72. package/scss/utilities/_user-select.scss +93 -0
  73. package/scss/utilities/_visibility.scss +66 -0
  74. package/scss/utilities/_z-index.scss +169 -0
@@ -0,0 +1,277 @@
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
+ }
33
+
34
+ &[data-placement^="bottom-"] {
35
+ bottom: 0;
36
+ flex-direction: column; // newest on bottom
37
+ }
38
+
39
+ // ── Placement: horizontal ───────────────────────────────────────
40
+ &[data-placement$="-left"] {
41
+ left: 0;
42
+ justify-items: start;
43
+ }
44
+
45
+ &[data-placement$="-center"] {
46
+ left: 0;
47
+ right: 0;
48
+ margin-inline: auto;
49
+ justify-items: center;
50
+ }
51
+
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);
134
+ }
135
+ }
136
+
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
+ }
154
+
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
+ }
176
+
177
+ button[data-toast-close] {
178
+ background-color: transparent;
179
+ border: 0;
180
+ color: var(--cool-toast-header-color);
181
+ opacity: 0.75;
182
+ line-height: 0;
183
+ padding: 0;
184
+ cursor: pointer;
185
+
186
+ svg {
187
+ pointer-events: none;
188
+ }
189
+
190
+ &:hover,
191
+ &:focus {
192
+ opacity: 1;
193
+ outline: 0;
194
+ }
195
+ }
196
+
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
+ }
217
+
218
+ &:empty {
219
+ display: none;
220
+ }
221
+ }
222
+
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;
228
+
229
+ &:has(> button[data-toast-close]) {
230
+ display: grid;
231
+ grid-template-columns: 1fr auto;
232
+ }
233
+ }
234
+
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
+ }
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
+ }
261
+
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
+ }
268
+ }
269
+ }
270
+
271
+ @if $cool-use-component-layer {
272
+ @layer components {
273
+ @include cool-toast;
274
+ }
275
+ } @else {
276
+ @include cool-toast;
277
+ }
@@ -0,0 +1,130 @@
1
+ @use "variables" as *;
2
+ /* Tooltip ========================================================================== */
3
+
4
+ @mixin cool-tooltip {
5
+ .tooltip {
6
+ position: fixed;
7
+ z-index: var(--cool-zindex-tooltip);
8
+ display: block;
9
+ margin: var(--cool-tooltip-margin);
10
+ font-size: var(--cool-tooltip-font-size);
11
+ word-wrap: break-word;
12
+ opacity: 0;
13
+ -webkit-font-smoothing: subpixel-antialiased;
14
+ font-family: var(--cool-font-family-base);
15
+ font-style: normal;
16
+ font-weight: var(--cool-font-weight-base);
17
+ line-height: var(--cool-line-height-base);
18
+ text-align: start;
19
+ text-decoration: none;
20
+ text-shadow: none;
21
+ text-transform: none;
22
+ letter-spacing: normal;
23
+ word-break: normal;
24
+ word-spacing: normal;
25
+ white-space: normal;
26
+ line-break: auto;
27
+
28
+ &.show {
29
+ opacity: var(--cool-tooltip-opacity);
30
+ }
31
+
32
+ .arrow {
33
+ position: absolute;
34
+ display: block;
35
+ width: var(--cool-tooltip-arrow-width);
36
+ height: var(--cool-tooltip-arrow-height);
37
+
38
+ &::before {
39
+ position: absolute;
40
+ content: "";
41
+ border-color: transparent;
42
+ border-style: solid;
43
+ }
44
+ }
45
+ }
46
+
47
+ .tooltip-top {
48
+ padding: var(--cool-tooltip-arrow-height) 0;
49
+
50
+ .arrow {
51
+ bottom: 0;
52
+
53
+ &::before {
54
+ top: 0;
55
+ border-width: var(--cool-tooltip-arrow-height) calc(var(--cool-tooltip-arrow-width) * 0.5) 0;
56
+ border-top-color: var(--cool-tooltip-arrow-color);
57
+ }
58
+ }
59
+ }
60
+
61
+ .tooltip-right {
62
+ padding: 0 var(--cool-tooltip-arrow-height);
63
+
64
+ .arrow {
65
+ left: 0;
66
+ width: var(--cool-tooltip-arrow-height);
67
+ height: var(--cool-tooltip-arrow-width);
68
+
69
+ &::before {
70
+ right: 0;
71
+ border-width: calc(var(--cool-tooltip-arrow-width) * 0.5) var(--cool-tooltip-arrow-height)
72
+ calc(var(--cool-tooltip-arrow-width) * 0.5) 0;
73
+ border-right-color: var(--cool-tooltip-arrow-color);
74
+ }
75
+ }
76
+ }
77
+
78
+ .tooltip-bottom {
79
+ padding: var(--cool-tooltip-arrow-height) 0;
80
+
81
+ .arrow {
82
+ top: 0;
83
+
84
+ &::before {
85
+ bottom: 0;
86
+ border-width: 0 calc(var(--cool-tooltip-arrow-width) * 0.5) var(--cool-tooltip-arrow-height);
87
+ border-bottom-color: var(--cool-tooltip-arrow-color);
88
+ }
89
+ }
90
+ }
91
+
92
+ .tooltip-left {
93
+ padding: 0 var(--cool-tooltip-arrow-height);
94
+
95
+ .arrow {
96
+ right: 0;
97
+ width: var(--cool-tooltip-arrow-height);
98
+ height: var(--cool-tooltip-arrow-width);
99
+
100
+ &::before {
101
+ left: 0;
102
+ border-width: calc(var(--cool-tooltip-arrow-width) * 0.5) 0 calc(var(--cool-tooltip-arrow-width) * 0.5)
103
+ var(--cool-tooltip-arrow-height);
104
+ border-left-color: var(--cool-tooltip-arrow-color);
105
+ }
106
+ }
107
+ }
108
+
109
+ .tooltip-inner {
110
+ max-width: var(--cool-tooltip-max-width);
111
+ padding: var(--cool-tooltip-padding-y) var(--cool-tooltip-padding-x);
112
+ color: var(--cool-tooltip-color);
113
+ text-align: center;
114
+ background-color: var(--cool-tooltip-bg);
115
+ border-radius: var(--cool-tooltip-border-radius);
116
+ }
117
+
118
+ [data-toggle="tooltip"]:disabled {
119
+ pointer-events: auto;
120
+ cursor: default;
121
+ }
122
+ }
123
+
124
+ @if $cool-use-component-layer {
125
+ @layer components {
126
+ @include cool-tooltip;
127
+ }
128
+ } @else {
129
+ @include cool-tooltip;
130
+ }
@@ -0,0 +1,166 @@
1
+ @use "variables" as *;
2
+ /* Typography ========================================================================== */
3
+
4
+ @mixin cool-typography {
5
+ h1,
6
+ h2,
7
+ h3,
8
+ h4,
9
+ h5,
10
+ h6,
11
+ .h1,
12
+ .h2,
13
+ .h3,
14
+ .h4,
15
+ .h5,
16
+ .h6 {
17
+ margin-top: 0;
18
+ margin-bottom: var(--cool-headings-margin-bottom);
19
+ font-family: var(--cool-headings-font-family);
20
+ font-weight: var(--cool-headings-font-weight);
21
+ line-height: var(--cool-headings-line-height);
22
+ color: var(--cool-headings-color);
23
+ }
24
+
25
+ h1,
26
+ .h1 {
27
+ font-size: var(--cool-h1-font-size);
28
+ @include text-truncate-generate(
29
+ $font-size: var(--cool-h1-font-size),
30
+ $line-height: var(--cool-headings-line-height)
31
+ );
32
+ }
33
+
34
+ h2,
35
+ .h2 {
36
+ font-size: var(--cool-h2-font-size);
37
+ @include text-truncate-generate(
38
+ $font-size: var(--cool-h2-font-size),
39
+ $line-height: var(--cool-headings-line-height)
40
+ );
41
+ }
42
+
43
+ h3,
44
+ .h3 {
45
+ font-size: var(--cool-h3-font-size);
46
+ @include text-truncate-generate(
47
+ $font-size: var(--cool-h3-font-size),
48
+ $line-height: var(--cool-headings-line-height)
49
+ );
50
+ }
51
+
52
+ h4,
53
+ .h4 {
54
+ font-size: var(--cool-h4-font-size);
55
+ @include text-truncate-generate(
56
+ $font-size: var(--cool-h4-font-size),
57
+ $line-height: var(--cool-headings-line-height)
58
+ );
59
+ }
60
+
61
+ h5,
62
+ .h5 {
63
+ font-size: var(--cool-h5-font-size);
64
+ @include text-truncate-generate(
65
+ $font-size: var(--cool-h5-font-size),
66
+ $line-height: var(--cool-headings-line-height)
67
+ );
68
+ }
69
+
70
+ h6,
71
+ .h6 {
72
+ font-size: var(--cool-h6-font-size);
73
+ @include text-truncate-generate(
74
+ $font-size: var(--cool-h6-font-size),
75
+ $line-height: var(--cool-headings-line-height)
76
+ );
77
+ }
78
+
79
+ .lead {
80
+ font-size: var(--cool-lead-font-size);
81
+ font-weight: var(--cool-lead-font-weight);
82
+ @include text-truncate-generate($font-size: var(--cool-lead-font-size));
83
+ }
84
+
85
+ .display-1 {
86
+ font-size: var(--cool-display1-size);
87
+ font-weight: var(--cool-display1-weight);
88
+ line-height: var(--cool-display-line-height);
89
+ @include text-truncate-generate(
90
+ $font-size: var(--cool-display1-size),
91
+ $line-height: var(--cool-display-line-height)
92
+ );
93
+ }
94
+
95
+ .display-2 {
96
+ font-size: var(--cool-display2-size);
97
+ font-weight: var(--cool-display2-weight);
98
+ line-height: var(--cool-display-line-height);
99
+ @include text-truncate-generate(
100
+ $font-size: var(--cool-display2-size),
101
+ $line-height: var(--cool-display-line-height)
102
+ );
103
+ }
104
+
105
+ .display-3 {
106
+ font-size: var(--cool-display3-size);
107
+ font-weight: var(--cool-display3-weight);
108
+ line-height: var(--cool-display-line-height);
109
+ @include text-truncate-generate(
110
+ $font-size: var(--cool-display3-size),
111
+ $line-height: var(--cool-display-line-height)
112
+ );
113
+ }
114
+
115
+ .display-4 {
116
+ font-size: var(--cool-display4-size);
117
+ font-weight: var(--cool-display4-weight);
118
+ line-height: var(--cool-display-line-height);
119
+ @include text-truncate-generate(
120
+ $font-size: var(--cool-display4-size),
121
+ $line-height: var(--cool-display-line-height)
122
+ );
123
+ }
124
+
125
+ hr {
126
+ margin-top: var(--cool-hr-margin-y);
127
+ margin-bottom: var(--cool-hr-margin-y);
128
+ border: 0;
129
+ border-top: var(--cool-hr-border-width) solid var(--cool-hr-border-color);
130
+ }
131
+
132
+ small,
133
+ .small {
134
+ font-size: var(--cool-small-font-size);
135
+ }
136
+
137
+ kbd {
138
+ display: inline-flex;
139
+ align-items: center;
140
+ justify-content: center;
141
+ min-width: 2em;
142
+ height: 2em;
143
+ padding: 0 0.5em;
144
+ background: var(--cool-color-grey-100);
145
+ border: 1px solid var(--cool-color-grey-400);
146
+ border-radius: 0.35em;
147
+ font-family: inherit;
148
+ color: var(--cool-color-grey-800);
149
+
150
+ @media (hover: none), (pointer: coarse) {
151
+ display: none;
152
+ }
153
+ }
154
+
155
+ p {
156
+ color: currentColor;
157
+ }
158
+ }
159
+
160
+ @if $cool-use-base-layer {
161
+ @layer base {
162
+ @include cool-typography;
163
+ }
164
+ } @else {
165
+ @include cool-typography;
166
+ }