@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finqu/cool",
3
- "version": "1.3.0",
3
+ "version": "2.0.2",
4
4
  "description": "Build beautiful, responsive web interfaces. Fast, flexible, and effortlessly customizable.",
5
5
  "keywords": [
6
6
  "ui",
@@ -10,14 +10,34 @@
10
10
  ],
11
11
  "license": "ISC",
12
12
  "author": "Finqu Oy",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/finqu/cool.git"
16
+ },
17
+ "bugs": {
18
+ "url": "https://github.com/finqu/cool/issues"
19
+ },
20
+ "homepage": "https://github.com/finqu/cool#readme",
13
21
  "main": "dist/js/cool.bundle.js",
14
22
  "module": "dist/js/cool.esm.js",
15
23
  "style": "dist/css/cool.css",
24
+ "exports": {
25
+ ".": {
26
+ "import": "./dist/js/cool.esm.js",
27
+ "require": "./dist/js/cool.bundle.js",
28
+ "default": "./dist/js/cool.bundle.js"
29
+ },
30
+ "./scss/*": "./scss/*",
31
+ "./dist/*": "./dist/*"
32
+ },
16
33
  "sideEffects": [
17
- "dist/css/*.css"
34
+ "dist/css/*.css",
35
+ "dist/js/*.js",
36
+ "js/src/*.js"
18
37
  ],
19
38
  "files": [
20
- "dist/"
39
+ "dist/",
40
+ "scss/"
21
41
  ],
22
42
  "publishConfig": {
23
43
  "access": "public"
@@ -32,10 +52,10 @@
32
52
  "css-main": "npm-run-all css-compile-main css-prefix-main css-minify-main",
33
53
  "css-compile": "sass --style=expanded --embed-sources scss/:dist/css/",
34
54
  "css-compile-main": "sass --style=expanded --embed-sources scss/cool.scss:dist/css/cool.css scss/cool-grid.scss:dist/css/cool-grid.css scss/cool-reboot.scss:dist/css/cool-reboot.css",
35
- "css-minify": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/ --batch --batch-suffix '.min' 'dist/css/*.css' '!dist/css/*.min.css'",
36
- "css-minify-main": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/cool.min.css dist/css/cool.css && cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/cool-grid.min.css dist/css/cool-grid.css && cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output dist/css/cool-reboot.min.css dist/css/cool-reboot.css",
37
- "css-prefix": "postcss --config build/postcss.config.js --replace 'dist/css/*.css' '!dist/css/*.min.css'",
38
- "css-prefix-main": "postcss --config build/postcss.config.js --replace dist/css/cool.css dist/css/cool-grid.css dist/css/cool-reboot.css",
55
+ "css-minify": "node build/css-minify.js",
56
+ "css-minify-main": "node build/css-minify.js",
57
+ "css-prefix": "node build/css-prefix.js",
58
+ "css-prefix-main": "node build/css-prefix.js",
39
59
  "js": "npm-run-all clean-js js-compile js-minify",
40
60
  "js-main": "npm-run-all js-lint js-compile js-minify-main",
41
61
  "js-compile": "npm-run-all --parallel js-compile-standalone js-compile-standalone-esm js-compile-bundle js-compile-plugins",
@@ -44,7 +64,8 @@
44
64
  "js-compile-bundle": "rollup --environment BUNDLE:true --config build/rollup.config.mjs --sourcemap",
45
65
  "js-compile-plugins": "node build/build-plugins.js",
46
66
  "js-compile-plugins-coverage": "cross-env NODE_ENV=test node build/build-plugins.js",
47
- "js-lint": "eslint --cache --cache-location .cache/.eslintcache js/src js/tests build/",
67
+ "js-lint": "eslint --cache --cache-location .cache/.eslintcache js/src build/",
68
+ "js-fix": "eslint --fix js/src",
48
69
  "js-minify": "npm-run-all --parallel js-minify-*",
49
70
  "js-minify-main": "npm-run-all js-minify-standalone js-minify-standalone-esm js-minify-bundle",
50
71
  "js-minify-standalone": "terser --compress typeofs=false --mangle --comments '/^!/' --source-map \"content=dist/js/cool.js.map,includeSources,url=cool.min.js.map\" --output dist/js/cool.min.js dist/js/cool.js",
@@ -54,11 +75,16 @@
54
75
  "dist": "npm-run-all --parallel css js",
55
76
  "test": "npm-run-all dist size",
56
77
  "prepublishOnly": "npm run dist",
78
+ "docs": "bash docs/serve.sh",
79
+ "docs:build": "node docs/_build.js",
80
+ "docs:fast": "bash docs/serve.sh --no-build",
81
+ "docs:watch": "bash docs/serve.sh --watch",
57
82
  "watch": "npm-run-all --parallel watch-*",
58
83
  "watch-css": "nodemon --watch scss/ --ext scss --exec \"npm run css\"",
59
84
  "watch-js": "nodemon --watch js/src/ --ext js --exec \"npm run js\"",
60
85
  "format": "prettier --write \"scss/**/*.scss\"",
61
- "format-check": "prettier --check \"scss/**/*.scss\""
86
+ "format-check": "prettier --check \"scss/**/*.scss\"",
87
+ "release": "node scripts/release.js"
62
88
  },
63
89
  "devDependencies": {
64
90
  "@babel/cli": "^7.24.0",
@@ -70,16 +96,14 @@
70
96
  "@rollup/plugin-commonjs": "^25.0.0",
71
97
  "@rollup/plugin-node-resolve": "^15.2.0",
72
98
  "@size-limit/preset-small-lib": "^11.0.0",
73
- "autoprefixer": "^10.4.0",
74
99
  "babel-plugin-istanbul": "^7.0.0",
75
- "clean-css-cli": "^5.6.0",
76
100
  "cross-env": "^7.0.0",
77
101
  "eslint": "^8.57.0",
102
+ "jquery": "^3.7.1",
103
+ "lightningcss": "^1.31.1",
78
104
  "nodemon": "^3.1.0",
79
105
  "npm-run-all": "^4.1.0",
80
- "postcss": "^8.4.0",
81
- "postcss-cli": "^11.0.0",
82
- "postcss-preset-env": "^9.5.0",
106
+ "perfect-scrollbar": "^1.5.6",
83
107
  "prettier": "^3.7.4",
84
108
  "rimraf": "^6.0.1",
85
109
  "rollup": "^4.0.0",
@@ -87,10 +111,18 @@
87
111
  "size-limit": "^11.0.0",
88
112
  "terser": "^5.31.1"
89
113
  },
90
- "dependencies": {
114
+ "peerDependencies": {
91
115
  "jquery": "^3.7.1",
92
116
  "perfect-scrollbar": "^1.5.6"
93
117
  },
118
+ "peerDependenciesMeta": {
119
+ "jquery": {
120
+ "optional": true
121
+ },
122
+ "perfect-scrollbar": {
123
+ "optional": true
124
+ }
125
+ },
94
126
  "size-limit": [
95
127
  {
96
128
  "path": "dist/js/cool.bundle.js",
@@ -101,4 +133,4 @@
101
133
  "limit": "75 KB"
102
134
  }
103
135
  ]
104
- }
136
+ }
package/scss/LISENCE ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2026, Finqu Oy
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,134 @@
1
+ @use "variables" as *;
2
+ /* Badge ========================================================================== */
3
+
4
+ @mixin cool-badge {
5
+ .badge {
6
+ font-family: var(--cool-badge-font-family);
7
+ font-size: var(--cool-badge-font-size);
8
+ font-weight: var(--cool-badge-font-weight);
9
+ padding: var(--cool-badge-padding-y) var(--cool-badge-padding-x);
10
+ line-height: var(--cool-badge-line-height);
11
+ border-radius: var(--cool-badge-border-radius);
12
+ border: var(--cool-badge-border, var(--cool-badge-border-width) solid var(--cool-theme-color-primary));
13
+ background-color: var(--cool-badge-bg, var(--cool-theme-color-primary));
14
+ color: var(--cool-badge-color, var(--cool-theme-text-color-primary));
15
+ box-shadow: var(--cool-badge-box-shadow, none);
16
+ box-sizing: border-box;
17
+ align-items: center;
18
+ display: inline-flex;
19
+ text-align: center;
20
+ text-decoration: none;
21
+ touch-action: manipulation;
22
+ user-select: none;
23
+ vertical-align: middle;
24
+ white-space: nowrap;
25
+ flex-direction: row;
26
+ position: relative;
27
+ text-transform: uppercase;
28
+ width: fit-content;
29
+ letter-spacing: 0.1px;
30
+
31
+ .alert-icon {
32
+ margin-right: 0.4em;
33
+
34
+ .icon {
35
+ color: var(--cool-badge-icon-color, var(--cool-theme-text-color-primary));
36
+ }
37
+ }
38
+ }
39
+
40
+ @each $color, $value in $theme-bg-colors {
41
+ .badge-#{$color} {
42
+ --cool-badge-bg: var(--cool-theme-bg-color-#{$color});
43
+ --cool-badge-border: var(--cool-badge-border-width) solid var(--cool-theme-bg-color-#{$color});
44
+ --cool-badge-color: var(--cool-theme-foreground-color-#{$color});
45
+ --cool-badge-box-shadow: 0
46
+ 0
47
+ 0
48
+ var(--cool-badge-box-shadow-blur)
49
+ color-mix(in srgb, var(--cool-color-#{$color}) var(--cool-badge-box-shadow-opacity), transparent);
50
+ --badge-icon-color: var(--cool-theme-foreground-color-#{$color});
51
+ }
52
+ }
53
+
54
+ @each $color in ("success", "info", "warning", "danger") {
55
+ .badge-#{$color} {
56
+ --cool-badge-bg: color-mix(in oklab, var(--cool-theme-color-#{$color}) 25%, var(--cool-body-surface-bg));
57
+ --cool-badge-border: var(--cool-badge-border-width)
58
+ solid
59
+ color-mix(in oklab, var(--cool-theme-color-#{$color}) 25%, var(--cool-body-surface-bg));
60
+ }
61
+ }
62
+
63
+ @each $color, $value in $theme-colors {
64
+ .badge-outline-#{$color} {
65
+ --cool-badge-bg: transparent;
66
+ --cool-badge-border: var(--cool-badge-border-width) solid var(--cool-theme-bg-color-#{$color});
67
+ --cool-badge-color: var(--cool-theme-color-#{$color});
68
+ --cool-badge-box-shadow: 0
69
+ 0
70
+ 0
71
+ var(--cool-badge-box-shadow-blur)
72
+ color-mix(in srgb, var(--cool-theme-color-#{$color}) var(--cool-badge-box-shadow-opacity), transparent);
73
+ --badge-icon-color: var(--cool-theme-color-#{$color});
74
+ }
75
+ }
76
+
77
+ .badge-xs {
78
+ --cool-badge-font-size: var(--cool-badge-font-size-xs);
79
+ --cool-badge-font-weight: var(--cool-badge-font-weight-xs);
80
+ --cool-badge-padding-y: var(--cool-badge-padding-y-xs);
81
+ --cool-badge-padding-x: var(--cool-badge-padding-x-xs);
82
+ --cool-badge-line-height: var(--cool-badge-line-height-xs);
83
+ --cool-badge-border-radius: var(--cool-badge-border-radius-xs);
84
+ }
85
+
86
+ .badge-sm {
87
+ --cool-badge-font-size: var(--cool-badge-font-size-sm);
88
+ --cool-badge-font-weight: var(--cool-badge-font-weight-sm);
89
+ --cool-badge-padding-y: var(--cool-badge-padding-y-sm);
90
+ --cool-badge-padding-x: var(--cool-badge-padding-x-sm);
91
+ --cool-badge-line-height: var(--cool-badge-line-height-sm);
92
+ --cool-badge-border-radius: var(--cool-badge-border-radius-sm);
93
+ }
94
+
95
+ .badge-btn {
96
+ --cool-badge-padding-y: calc(var(--cool-btn-padding-y) - 1px);
97
+ --cool-badge-padding-x: var(--cool-btn-padding-x);
98
+ --cool-badge-font-size: var(--cool-btn-font-size);
99
+ --cool-badge-line-height: var(--cool-btn-line-height);
100
+ --cool-badge-border-radius: var(--cool-btn-border-radius);
101
+ }
102
+
103
+ .badge-btn-xs {
104
+ --cool-badge-padding-y: calc(var(--cool-btn-padding-y-xs) - 1px);
105
+ --cool-badge-padding-x: var(--cool-btn-padding-x-xs);
106
+ --cool-badge-font-size: var(--cool-btn-font-size-xs);
107
+ --cool-badge-line-height: var(--cool-btn-line-height-xs);
108
+ --cool-badge-border-radius: var(--cool-btn-border-radius-xs);
109
+ }
110
+
111
+ .badge-btn-sm {
112
+ --cool-badge-padding-y: calc(var(--cool-btn-padding-y-sm) - 1px);
113
+ --cool-badge-padding-x: var(--cool-btn-padding-x-sm);
114
+ --cool-badge-font-size: var(--cool-btn-font-size-sm);
115
+ --cool-badge-line-height: var(--cool-btn-line-height-sm);
116
+ --cool-badge-border-radius: var(--cool-btn-border-radius-sm);
117
+ }
118
+
119
+ .badge-btn-lg {
120
+ --cool-badge-padding-y: calc(var(--cool-btn-padding-y-lg) - 1px);
121
+ --cool-badge-padding-x: var(--cool-btn-padding-x-lg);
122
+ --cool-badge-font-size: var(--cool-btn-font-size-lg);
123
+ --cool-badge-line-height: var(--cool-btn-line-height-lg);
124
+ --cool-badge-border-radius: var(--cool-btn-border-radius-lg);
125
+ }
126
+ }
127
+
128
+ @if $cool-use-component-layer {
129
+ @layer components {
130
+ @include cool-badge;
131
+ }
132
+ } @else {
133
+ @include cool-badge;
134
+ }
@@ -0,0 +1,80 @@
1
+ @use "variables" as *;
2
+ /* Button Groups ========================================================================== */
3
+
4
+ @mixin cool-button-group {
5
+ .btn-group {
6
+ position: relative;
7
+ display: inline-flex;
8
+ vertical-align: middle;
9
+
10
+ > .btn {
11
+ position: relative;
12
+ flex: 1 1 auto;
13
+ margin: 0;
14
+
15
+ &:hover,
16
+ &:focus,
17
+ &:active,
18
+ &.active {
19
+ z-index: 1;
20
+ }
21
+ }
22
+ }
23
+
24
+ .btn-group {
25
+ > .btn:not(:last-child):not(.dropdown-toggle),
26
+ > .btn-group:not(:last-child) > .btn {
27
+ border-top-right-radius: 0;
28
+ border-bottom-right-radius: 0;
29
+ margin-right: -1px;
30
+ }
31
+
32
+ > .btn:not(:first-child),
33
+ > .btn-group:not(:first-child) > .btn {
34
+ border-top-left-radius: 0;
35
+ border-bottom-left-radius: 0;
36
+ }
37
+ }
38
+
39
+ .btn-group-sm > .btn {
40
+ font-size: var(--cool-btn-font-size-sm);
41
+ padding: var(--cool-btn-padding-y-sm) var(--cool-btn-padding-x-sm);
42
+ border-radius: var(--cool-btn-border-radius-sm);
43
+ }
44
+
45
+ .btn-group-lg > .btn {
46
+ font-size: var(--cool-btn-font-size-lg);
47
+ padding: var(--cool-btn-padding-y-lg) var(--cool-btn-padding-x-lg);
48
+ border-radius: var(--cool-btn-border-radius-lg);
49
+ }
50
+
51
+ .btn-group-toggle {
52
+ > .btn,
53
+ > .btn-group > .btn {
54
+ margin-bottom: 0;
55
+
56
+ &.active {
57
+ --cool-btn-bg: var(--cool-theme-color-primary);
58
+ --cool-btn-color: var(--cool-theme-foreground-color-primary);
59
+ --cool-btn-border-color: var(--cool-theme-color-primary);
60
+ --cool-btn-hover-bg: color-mix(in oklab, var(--cool-theme-color-primary) 80%, transparent);
61
+ z-index: 3;
62
+ }
63
+
64
+ input[type="radio"],
65
+ input[type="checkbox"] {
66
+ position: absolute;
67
+ clip: rect(0, 0, 0, 0);
68
+ pointer-events: none;
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ @if $cool-use-component-layer {
75
+ @layer components {
76
+ @include cool-button-group;
77
+ }
78
+ } @else {
79
+ @include cool-button-group;
80
+ }
@@ -0,0 +1,304 @@
1
+ @use "variables" as *;
2
+ /* Buttons ========================================================================== */
3
+
4
+ @mixin cool-buttons {
5
+ .btn {
6
+ display: var(--cool-btn-display, inline-flex);
7
+ font-family: var(--cool-btn-font-family);
8
+ font-weight: var(--cool-btn-font-weight);
9
+ font-size: var(--cool-btn-font-size);
10
+ line-height: var(--cool-btn-line-height);
11
+ color: var(--cool-btn-color, var(--cool-body-color));
12
+ background-color: var(--cool-btn-bg, transparent);
13
+ border-width: var(--cool-btn-border-width);
14
+ border-style: solid;
15
+ border-color: var(--cool-btn-border-color, transparent);
16
+ border-radius: var(--cool-btn-border-radius);
17
+ cursor: var(--cool-btn-cursor);
18
+ padding: var(--cool-btn-padding-y) var(--cool-btn-padding-x);
19
+ transition: var(--cool-btn-transition);
20
+ width: var(--cool-btn-width, auto);
21
+ height: var(--cool-btn-height, auto);
22
+ text-align: var(--cool-btn-text-align, center);
23
+ justify-content: var(--cool-btn-text-align, center);
24
+ text-transform: var(--cool-btn-text-transform, none);
25
+ text-decoration: var(--cool-btn-text-decoration, none);
26
+ align-items: center;
27
+ touch-action: manipulation;
28
+ user-select: none;
29
+ vertical-align: middle;
30
+ white-space: nowrap;
31
+ box-sizing: border-box;
32
+ position: relative;
33
+ margin: 0;
34
+ outline: 0;
35
+
36
+ > span + .icon {
37
+ margin-left: var(--cool-icon-spacer);
38
+ }
39
+
40
+ &:has(.icon + *) > .icon {
41
+ margin-right: var(--cool-icon-spacer);
42
+ }
43
+
44
+ .icon,
45
+ .image,
46
+ span {
47
+ pointer-events: none;
48
+ }
49
+
50
+ &:hover,
51
+ &.hover,
52
+ &:focus,
53
+ &.focus {
54
+ color: var(--cool-btn-hover-color, var(--cool-btn-color, var(--cool-body-color)));
55
+ background-color: var(--cool-btn-hover-bg, var(--cool-btn-bg, transparent));
56
+ border-color: var(--cool-btn-hover-border-color, var(--cool-btn-border-color, transparent));
57
+ text-decoration: var(--cool-btn-hover-text-decoration, none);
58
+ }
59
+
60
+ &:active,
61
+ &.active {
62
+ color: var(--cool-btn-active-color, var(--cool-btn-hover-color, var(--cool-btn-color)));
63
+ background-color: var(--cool-btn-active-bg, var(--cool-btn-hover-bg, var(--cool-btn-bg, transparent)));
64
+ border-color: var(
65
+ --cool-btn-active-border-color,
66
+ var(--cool-btn-hover-border-color, var(--cool-btn-border-color, transparent))
67
+ );
68
+ text-decoration: var(--cool-btn-hover-text-decoration, none);
69
+ }
70
+
71
+ &:disabled,
72
+ &.disabled {
73
+ color: var(--cool-btn-disabled-color, var(--cool-btn-color, currentColor));
74
+ opacity: 0.65;
75
+ pointer-events: none;
76
+ text-decoration: none;
77
+
78
+ &:hover {
79
+ color: var(--cool-btn-disabled-color, var(--cool-btn-color, currentColor));
80
+ }
81
+ }
82
+
83
+ &.text-left,
84
+ &.text-start {
85
+ --cool-btn-text-align: left;
86
+ }
87
+
88
+ &.text-center {
89
+ --cool-btn-text-align: center;
90
+ }
91
+
92
+ &.text-right,
93
+ &.text-end {
94
+ --cool-btn-text-align: left;
95
+ }
96
+ }
97
+
98
+ .btn-primary {
99
+ --cool-btn-bg: var(--cool-theme-color-primary);
100
+ --cool-btn-color: var(--cool-theme-foreground-color-primary);
101
+ --cool-btn-border-color: var(--cool-theme-color-primary);
102
+ --cool-btn-hover-bg: color-mix(in oklab, var(--cool-theme-color-primary) 80%, transparent);
103
+ }
104
+
105
+ .btn-secondary {
106
+ --cool-btn-bg: var(--cool-theme-color-secondary);
107
+ --cool-btn-color: var(--cool-theme-foreground-color-secondary);
108
+ --cool-btn-border-color: var(--cool-theme-color-secondary);
109
+ --cool-btn-hover-bg: color-mix(in oklab, var(--cool-theme-color-secondary) 80%, transparent);
110
+ }
111
+
112
+ .btn-brand {
113
+ --cool-btn-bg: var(--cool-theme-color-brand);
114
+ --cool-btn-color: var(--cool-theme-foreground-color-brand);
115
+ --cool-btn-border-color: var(--cool-theme-color-brand);
116
+ --cool-btn-hover-bg: color-mix(in oklab, var(--cool-theme-color-brand) 80%, transparent);
117
+ --cool-btn-font-weight: var(--cool-font-weight-bold);
118
+ }
119
+
120
+ .btn-outline-primary {
121
+ --cool-btn-bg: color-mix(in oklab, var(--cool-theme-color-primary) 3%, transparent);
122
+ --cool-btn-color: var(--cool-theme-color-primary);
123
+ --cool-btn-border-color: var(--cool-theme-color-primary);
124
+ --cool-btn-hover-bg: color-mix(in oklab, var(--cool-theme-color-primary) 80%, transparent);
125
+ --cool-btn-hover-color: var(--cool-theme-foreground-color-primary);
126
+ }
127
+
128
+ .btn-outline-secondary {
129
+ --cool-btn-bg: color-mix(in oklab, var(--cool-theme-color-secondary) 7%, transparent);
130
+ --cool-btn-color: var(--cool-theme-foreground-color-secondary);
131
+ --cool-btn-border-color: var(--cool-theme-color-secondary);
132
+ --cool-btn-hover-bg: color-mix(in oklab, var(--cool-theme-color-secondary) 80%, transparent);
133
+ --cool-btn-hover-color: var(--cool-theme-foreground-color-secondary);
134
+ }
135
+
136
+ .btn-remove {
137
+ --cool-btn-bg: var(--cool-theme-color-secondary);
138
+ --cool-btn-color: var(--cool-theme-foreground-color-secondary);
139
+ --cool-btn-border-color: var(--cool-theme-color-secondary);
140
+ --cool-btn-hover-bg: color-mix(in oklab, var(--cool-theme-color-danger) 80%, transparent);
141
+ --cool-btn-hover-color: var(--cool-theme-foreground-color-danger);
142
+ --cool-btn-hover-border-color: color-mix(in oklab, var(--cool-theme-color-danger) 80%, transparent);
143
+ }
144
+
145
+ .btn-action {
146
+ --cool-btn-bg: var(--cool-theme-color-success);
147
+ --cool-btn-color: var(--cool-theme-foreground-color-success);
148
+ --cool-btn-border-color: var(--cool-theme-color-success);
149
+ --cool-btn-hover-bg: color-mix(in oklab, var(--cool-theme-color-success) 80%, transparent);
150
+ --cool-btn-hover-border-color: color-mix(in oklab, var(--cool-theme-color-success) 80%, transparent);
151
+ --cool-btn-font-weight: 600;
152
+
153
+ &:hover {
154
+ transform: translateY(-1px);
155
+ }
156
+
157
+ &:active {
158
+ transform: translateY(0);
159
+ }
160
+ }
161
+
162
+ .btn-link {
163
+ --cool-btn-bg: transparent;
164
+ --cool-btn-color: var(--cool-link-color);
165
+ --cool-btn-font-family: inherit;
166
+ --cool-btn-font-size: inherit;
167
+ --cool-btn-font-weight: var(--cool-link-font-weight);
168
+ --cool-btn-line-height: inherit;
169
+ --cool-btn-padding-y: 0;
170
+ --cool-btn-padding-x: 0;
171
+ --cool-btn-text-align: left;
172
+ --cool-btn-display: inline-flex;
173
+ --cool-btn-hover-bg: transparent;
174
+ --cool-btn-hover-color: var(--cool-link-hover-color);
175
+ --cool-btn-disabled-color: var(--cool-link-disabled-color);
176
+ --cool-btn-border-width: 0;
177
+ --cool-btn-text-decoration: none;
178
+ --cool-btn-hover-text-decoration: var(--cool-link-hover-text-decoration);
179
+ }
180
+
181
+ .btn-text {
182
+ --cool-btn-padding-y: 0;
183
+ --cool-btn-padding-x: 0;
184
+ --cool-btn-font-family: inherit;
185
+ --cool-btn-font-size: inherit;
186
+ --cool-btn-line-height: inherit;
187
+ --cool-btn-bg: transparent;
188
+ --cool-btn-color: var(--cool-body-color);
189
+ --cool-btn-text-align: left;
190
+ --cool-btn-display: inline;
191
+ --cool-btn-border-width: 0;
192
+ }
193
+
194
+ .btn-block {
195
+ width: 100%;
196
+ margin-top: 0;
197
+
198
+ + .btn-block {
199
+ margin-top: var(--cool-spacing-1);
200
+ }
201
+ }
202
+
203
+ .btn-icon {
204
+ --cool-btn-width: var(--cool-btn-icon-width);
205
+ --cool-btn-height: var(--cool-btn-icon-height);
206
+ --cool-btn-padding-y: 0;
207
+ --cool-btn-padding-x: 0;
208
+ --cool-btn-line-height: 0;
209
+ --cool-btn-text-align: center;
210
+ flex-shrink: 0;
211
+
212
+ @supports (aspect-ratio: 1) {
213
+ aspect-ratio: 1;
214
+ }
215
+
216
+ &.btn-sm {
217
+ --cool-btn-width: var(--cool-btn-icon-width-sm);
218
+ --cool-btn-height: var(--cool-btn-icon-height-sm);
219
+ }
220
+
221
+ &.btn-lg {
222
+ --cool-btn-width: var(--cool-btn-icon-width-lg);
223
+ --cool-btn-height: var(--cool-btn-icon-height-lg);
224
+ }
225
+
226
+ &:not(.btn-primary):not(.btn-secondary):not(.btn-brand):not(.btn-outline-primary):not(
227
+ .btn-outline-secondary
228
+ ):not(.btn-remove):not(.btn-action):not(.btn-link):not(.btn-text) {
229
+ --cool-btn-color: var(--cool-icon-color);
230
+ --cool-btn-hover-color: var(--cool-theme-color-dark);
231
+ --cool-link-disabled-color: var(--cool-icon-color);
232
+ --cool-btn-border-radius: 50%;
233
+
234
+ &:hover:not(.disabled):not([disabled]):not(.disable-hover) {
235
+ background-color: transparent;
236
+
237
+ &:before {
238
+ transform: scale3d(1, 1, 1);
239
+ opacity: 1;
240
+ }
241
+ }
242
+
243
+ &:not(.disabled):not([disabled]):not(.disable-hover) {
244
+ background-color: transparent;
245
+ transition:
246
+ opacity 0.5s ease,
247
+ scale 0.5s ease;
248
+
249
+ &:before {
250
+ position: absolute;
251
+ left: 0;
252
+ top: 0;
253
+ width: 100%;
254
+ height: 100%;
255
+ content: "";
256
+ transform: scale3d(0, 0, 0);
257
+ transition: all;
258
+ transition-duration: 250ms;
259
+ background-color: rgba(0, 0, 0, 0.1);
260
+ border-radius: 50%;
261
+ z-index: 0;
262
+ opacity: 0;
263
+ }
264
+ }
265
+ }
266
+
267
+ > .icon {
268
+ vertical-align: middle;
269
+ margin: 0;
270
+ }
271
+ }
272
+
273
+ .btn-xs {
274
+ --cool-btn-padding-y: var(--cool-btn-padding-y-xs);
275
+ --cool-btn-padding-x: var(--cool-btn-padding-x-xs);
276
+ --cool-btn-font-size: var(--cool-btn-font-size-xs);
277
+ --cool-btn-line-height: var(--cool-btn-line-height-xs);
278
+ --cool-btn-border-radius: var(--cool-btn-border-radius-xs);
279
+ }
280
+
281
+ .btn-sm {
282
+ --cool-btn-padding-y: var(--cool-btn-padding-y-sm);
283
+ --cool-btn-padding-x: var(--cool-btn-padding-x-sm);
284
+ --cool-btn-font-size: var(--cool-btn-font-size-sm);
285
+ --cool-btn-line-height: var(--cool-btn-line-height-sm);
286
+ --cool-btn-border-radius: var(--cool-btn-border-radius-sm);
287
+ }
288
+
289
+ .btn-lg {
290
+ --cool-btn-padding-y: var(--cool-btn-padding-y-lg);
291
+ --cool-btn-padding-x: var(--cool-btn-padding-x-lg);
292
+ --cool-btn-font-size: var(--cool-btn-font-size-lg);
293
+ --cool-btn-line-height: var(--cool-btn-line-height-lg);
294
+ --cool-btn-border-radius: var(--cool-btn-border-radius-lg);
295
+ }
296
+ }
297
+
298
+ @if $cool-use-component-layer {
299
+ @layer components {
300
+ @include cool-buttons;
301
+ }
302
+ } @else {
303
+ @include cool-buttons;
304
+ }