},
{
"path": "./dist/css/bootstrap-reboot.css",
- "maxSize": "3.5 kB"
+ "maxSize": "4.25 kB"
},
{
"path": "./dist/css/bootstrap-reboot.min.css",
- "maxSize": "3.25 kB"
+ "maxSize": "4.25 kB"
},
{
"path": "./dist/css/bootstrap-utilities.css",
- "maxSize": "11.75 kB"
+ "maxSize": "12.75 kB"
},
{
"path": "./dist/css/bootstrap-utilities.min.css",
- "maxSize": "11.0 kB"
+ "maxSize": "12.0 kB"
},
{
"path": "./dist/css/bootstrap.css",
- "maxSize": "32.5 kB"
+ "maxSize": "33.75 kB"
},
{
"path": "./dist/css/bootstrap.min.css",
- "maxSize": "30.25 kB"
+ "maxSize": "31.25 kB"
},
{
"path": "./dist/js/bootstrap.bundle.js",
+++ /dev/null
-name: CSS (node-sass)
-
-on:
- push:
- branches:
- - main
- pull_request:
- workflow_dispatch:
-
-env:
- FORCE_COLOR: 2
- NODE: 22
-
-permissions:
- contents: read
-
-jobs:
- css:
- runs-on: ubuntu-latest
-
- steps:
- - name: Clone repository
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- with:
- persist-credentials: false
-
- - name: Set up Node.js
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
- with:
- node-version: "${{ env.NODE }}"
-
- - name: Build CSS with node-sass
- run: |
- npx --package node-sass@latest node-sass --version
- npx --package node-sass@latest node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/ -o dist-sass/css/
- ls -Al dist-sass/css
-
- - name: Check built CSS files for Sass variables
- shell: bash
- run: |
- SASS_VARS_FOUND=$(find "dist-sass/css/" -type f -name "*.css" -print0 | xargs -0 --no-run-if-empty grep -F "\$" || true)
- if [[ -z "$SASS_VARS_FOUND" ]]; then
- echo "All good, no Sass variables found!"
- exit 0
- else
- echo "Found $(echo "$SASS_VARS_FOUND" | wc -l | bc) Sass variables:"
- echo "$SASS_VARS_FOUND"
- exit 1
- fi
"rollup": "^4.52.0",
"rollup-plugin-istanbul": "^5.0.0",
"rtlcss": "^4.3.0",
- "sass": "1.78.0",
+ "sass": "^1.90.0",
"sass-true": "^9.0.0",
"shelljs": "^0.10.0",
"stylelint": "^16.24.0",
"dev": true,
"license": "MIT"
},
+ "node_modules/@parcel/watcher": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
+ "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^1.0.3",
+ "is-glob": "^4.0.3",
+ "micromatch": "^4.0.5",
+ "node-addon-api": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.5.1",
+ "@parcel/watcher-darwin-arm64": "2.5.1",
+ "@parcel/watcher-darwin-x64": "2.5.1",
+ "@parcel/watcher-freebsd-x64": "2.5.1",
+ "@parcel/watcher-linux-arm-glibc": "2.5.1",
+ "@parcel/watcher-linux-arm-musl": "2.5.1",
+ "@parcel/watcher-linux-arm64-glibc": "2.5.1",
+ "@parcel/watcher-linux-arm64-musl": "2.5.1",
+ "@parcel/watcher-linux-x64-glibc": "2.5.1",
+ "@parcel/watcher-linux-x64-musl": "2.5.1",
+ "@parcel/watcher-win32-arm64": "2.5.1",
+ "@parcel/watcher-win32-ia32": "2.5.1",
+ "@parcel/watcher-win32-x64": "2.5.1"
+ }
+ },
+ "node_modules/@parcel/watcher-android-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
+ "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
+ "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
+ "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-freebsd-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
+ "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
+ "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
+ "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
+ "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
+ "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-glibc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
+ "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-musl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
+ "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-arm64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
+ "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-ia32": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
+ "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-x64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
+ "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher/node_modules/detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "detect-libc": "bin/detect-libc.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
"npm": "1.2.8000 || >= 1.4.16"
}
},
- "node_modules/detect-libc": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz",
- "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/deterministic-object-hash": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz",
}
},
"node_modules/immutable": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
- "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz",
+ "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==",
"dev": true,
"license": "MIT"
},
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"license": "MIT"
},
"node_modules/sass": {
- "version": "1.78.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz",
- "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==",
+ "version": "1.90.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz",
+ "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "chokidar": ">=3.0.0 <4.0.0",
- "immutable": "^4.0.0",
+ "chokidar": "^4.0.0",
+ "immutable": "^5.0.2",
"source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
},
"engines": {
"node": ">=14.0.0"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher": "^2.4.1"
}
},
"node_modules/sass-formatter": {
}
}
},
- "node_modules/sass/node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/sass/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/sass/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/sass/node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
"node_modules/sax": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
"@img/sharp-win32-x64": "0.34.4"
}
},
+ "node_modules/sharp/node_modules/detect-libc": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+ "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/sharp/node_modules/semver": {
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"start": "npm-run-all --parallel watch docs-serve",
"bundlewatch": "bundlewatch --config .bundlewatch.config.json",
"css": "npm-run-all css-compile css-prefix css-rtl css-minify",
- "css-compile": "sass --style expanded --source-map --embed-sources --no-error-css scss/:dist/css/",
+ "css-compile": "sass --style expanded --source-map --embed-sources --no-error-css scss/bootstrap.scss:dist/css/bootstrap.css scss/bootstrap-grid.scss:dist/css/bootstrap-grid.css scss/bootstrap-reboot.scss:dist/css/bootstrap-reboot.css scss/bootstrap-utilities.scss:dist/css/bootstrap-utilities.css",
"css-rtl": "cross-env NODE_ENV=RTL postcss --config build/postcss.config.mjs --dir \"dist/css\" --ext \".rtl.css\" \"dist/css/*.css\" \"!dist/css/*.min.css\" \"!dist/css/*.rtl.css\"",
"css-lint": "npm-run-all --aggregate-output --continue-on-error --parallel css-lint-*",
"css-lint-stylelint": "stylelint \"**/*.{css,scss}\" --cache --cache-location .cache/.stylelintcache",
"rollup": "^4.52.0",
"rollup-plugin-istanbul": "^5.0.0",
"rtlcss": "^4.3.0",
- "sass": "1.78.0",
+ "sass": "^1.90.0",
"sass-true": "^9.0.0",
"shelljs": "^0.10.0",
"stylelint": "^16.24.0",
+@use "config" as *;
+@use "variables" as *;
+@use "functions" as *;
+@use "vendor/rfs" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/transition" as *;
+@use "mixins/box-shadow" as *;
+@use "mixins/color-mode" as *;
+
//
// Base styles
//
+@use "sass:map";
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+
//
// Base styles
//
// scss-docs-start alert-modifiers
// Generate contextual modifier classes for colorizing the alert
-@each $state in map-keys($theme-colors) {
+@each $state in map.keys($theme-colors) {
.alert-#{$state} {
--#{$prefix}alert-color: var(--#{$prefix}#{$state}-text-emphasis);
--#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/gradients" as *;
+@use "vendor/rfs" as *;
+
// Base class
//
// Requires one of the contextual, color modifier classes for `color` and
--- /dev/null
+$file: "" !default;
+
+/*!
+ * Bootstrap #{$file} v6.0.0-dev (https://getbootstrap.com/)
+ * Copyright 2011-2025 The Bootstrap Authors
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "vendor/rfs" as *;
+
.breadcrumb {
// scss-docs-start breadcrumb-css-vars
--#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/box-shadow" as *;
+
// Make the div behave like a button
.btn-group,
.btn-group-vertical {
+@use "sass:color";
+@use "colors" as *;
+@use "config" as *;
+@use "variables" as *;
+@use "functions" as *;
+@use "vendor/rfs" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/box-shadow" as *;
+@use "mixins/transition" as *;
+@use "mixins/gradients" as *;
+
+// Button variants
+//
+// Easily pump out default styles, as well as :hover, :focus, :active,
+// and disabled options for all buttons
+
+// scss-docs-start btn-variant-mixin
+@mixin button-variant(
+ $background,
+ $border,
+ $color: color-contrast($background),
+ $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),
+ $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),
+ $hover-color: color-contrast($hover-background),
+ $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),
+ $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),
+ $active-color: color-contrast($active-background),
+ $disabled-background: $background,
+ $disabled-border: $border,
+ $disabled-color: color-contrast($disabled-background)
+) {
+ --#{$prefix}btn-color: #{$color};
+ --#{$prefix}btn-bg: #{$background};
+ --#{$prefix}btn-border-color: #{$border};
+ --#{$prefix}btn-hover-color: #{$hover-color};
+ --#{$prefix}btn-hover-bg: #{$hover-background};
+ --#{$prefix}btn-hover-border-color: #{$hover-border};
+ --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(color.mix($color, $border, 15%))};
+ --#{$prefix}btn-active-color: #{$active-color};
+ --#{$prefix}btn-active-bg: #{$active-background};
+ --#{$prefix}btn-active-border-color: #{$active-border};
+ --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};
+ --#{$prefix}btn-disabled-color: #{$disabled-color};
+ --#{$prefix}btn-disabled-bg: #{$disabled-background};
+ --#{$prefix}btn-disabled-border-color: #{$disabled-border};
+}
+// scss-docs-end btn-variant-mixin
+
+// scss-docs-start btn-outline-variant-mixin
+@mixin button-outline-variant(
+ $color,
+ $color-hover: color-contrast($color),
+ $active-background: $color,
+ $active-border: $color,
+ $active-color: color-contrast($active-background)
+) {
+ --#{$prefix}btn-color: #{$color};
+ --#{$prefix}btn-border-color: #{$color};
+ --#{$prefix}btn-hover-color: #{$color-hover};
+ --#{$prefix}btn-hover-bg: #{$active-background};
+ --#{$prefix}btn-hover-border-color: #{$active-border};
+ --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};
+ --#{$prefix}btn-active-color: #{$active-color};
+ --#{$prefix}btn-active-bg: #{$active-background};
+ --#{$prefix}btn-active-border-color: #{$active-border};
+ --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};
+ --#{$prefix}btn-disabled-color: #{$color};
+ --#{$prefix}btn-disabled-bg: transparent;
+ --#{$prefix}btn-disabled-border-color: #{$color};
+ --#{$prefix}gradient: none;
+}
+// scss-docs-end btn-outline-variant-mixin
+
+// scss-docs-start btn-size-mixin
+@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {
+ --#{$prefix}btn-padding-y: #{$padding-y};
+ --#{$prefix}btn-padding-x: #{$padding-x};
+ @include rfs($font-size, --#{$prefix}btn-font-size);
+ --#{$prefix}btn-border-radius: #{$border-radius};
+}
+// scss-docs-end btn-size-mixin
+
+
//
// Base styles
//
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/box-shadow" as *;
+@use "layout/breakpoints" as *;
+
//
// Base styles
//
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/transition" as *;
+@use "mixins/gradients" as *;
+@use "mixins/color-mode" as *;
+@use "vendor/rfs" as *;
+
// Notes on the classes:
//
// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/color-mode" as *;
+
// Transparent background and border properties included for button version.
// iOS requires the button element instead of an anchor tag.
// If you want the anchor version, it requires `href="#"`.
--- /dev/null
+$blue: #0d6efd !default;
+$blue-100: #cfe2ff !default;
+$blue-200: #9ec5fe !default;
+$blue-300: #6ea8fe !default;
+$blue-400: #3d8bfd !default;
+$blue-500: $blue !default;
+$blue-600: #0a58ca !default;
+$blue-700: #084298 !default;
+$blue-800: #052c65 !default;
+$blue-900: #031633 !default;
+
+$indigo: #6610f2 !default;
+$indigo-100: #e0cffc !default;
+$indigo-200: #c29ffa !default;
+$indigo-300: #a370f7 !default;
+$indigo-400: #8540f5 !default;
+$indigo-500: $indigo !default;
+$indigo-600: #520dc2 !default;
+$indigo-700: #3d0a91 !default;
+$indigo-800: #290661 !default;
+$indigo-900: #140330 !default;
+
+$purple: #6f42c1 !default;
+$purple-100: #e2d9f3 !default;
+$purple-200: #c5b3e6 !default;
+$purple-300: #a98eda !default;
+$purple-400: #8c68cd !default;
+$purple-500: $purple !default;
+$purple-600: #59359a !default;
+$purple-700: #432874 !default;
+$purple-800: #2c1a4d !default;
+$purple-900: #160d27 !default;
+
+$pink: #d63384 !default;
+$pink-100: #f7d6e6 !default;
+$pink-200: #efadce !default;
+$pink-300: #e685b5 !default;
+$pink-400: #de5c9d !default;
+$pink-500: $pink !default;
+$pink-600: #ab296a !default;
+$pink-700: #801f4f !default;
+$pink-800: #561435 !default;
+$pink-900: #2b0a1a !default;
+
+$red: #dc3545 !default;
+$red-100: #f8d7da !default;
+$red-200: #f1aeb5 !default;
+$red-300: #ea868f !default;
+$red-400: #e35d6a !default;
+$red-500: $red !default;
+$red-600: #b02a37 !default;
+$red-700: #842029 !default;
+$red-800: #58151c !default;
+$red-900: #2c0b0e !default;
+
+$orange: #fd7e14 !default;
+$orange-100: #ffe5d0 !default;
+$orange-200: #fecba1 !default;
+$orange-300: #feb272 !default;
+$orange-400: #fd9843 !default;
+$orange-500: $orange !default;
+$orange-600: #ca6510 !default;
+$orange-700: #984c0c !default;
+$orange-800: #653208 !default;
+$orange-900: #331904 !default;
+
+$yellow: #ffc107 !default;
+$yellow-100: #fff3cd !default;
+$yellow-200: #ffe69c !default;
+$yellow-300: #ffda6a !default;
+$yellow-400: #ffcd39 !default;
+$yellow-500: $yellow !default;
+$yellow-600: #cc9a06 !default;
+$yellow-700: #997404 !default;
+$yellow-800: #664d03 !default;
+$yellow-900: #332701 !default;
+
+$green: #198754 !default;
+$green-100: #d1e7dd !default;
+$green-200: #a3cfbb !default;
+$green-300: #75b798 !default;
+$green-400: #479f76 !default;
+$green-500: $green !default;
+$green-600: #146c43 !default;
+$green-700: #0f5132 !default;
+$green-800: #0a3622 !default;
+$green-900: #051b11 !default;
+
+$teal: #20c997 !default;
+$teal-100: #d2f4ea !default;
+$teal-200: #a6e9d5 !default;
+$teal-300: #79dfc1 !default;
+$teal-400: #4dd4ac !default;
+$teal-500: $teal !default;
+$teal-600: #1aa179 !default;
+$teal-700: #13795b !default;
+$teal-800: #0d503c !default;
+$teal-900: #06281e !default;
+
+$cyan: #0dcaf0 !default;
+$cyan-100: #cff4fc !default;
+$cyan-200: #9eeaf9 !default;
+$cyan-300: #6edff6 !default;
+$cyan-400: #3dd5f3 !default;
+$cyan-500: $cyan !default;
+$cyan-600: #0aa2c0 !default;
+$cyan-700: #087990 !default;
+$cyan-800: #055160 !default;
+$cyan-900: #032830 !default;
+
+$gray: #adb5bd !default;
+$gray-100: #f8f9fa !default;
+$gray-200: #e9ecef !default;
+$gray-300: #dee2e6 !default;
+$gray-400: #ced4da !default;
+$gray-500: $gray !default;
+$gray-600: #6c757d !default;
+$gray-700: #495057 !default;
+$gray-800: #343a40 !default;
+$gray-900: #212529 !default;
+
+$white: #fff !default;
+$black: #000 !default;
+
+$blues: (
+ "blue-100": $blue-100,
+ "blue-200": $blue-200,
+ "blue-300": $blue-300,
+ "blue-400": $blue-400,
+ "blue-500": $blue-500,
+ "blue-600": $blue-600,
+ "blue-700": $blue-700,
+ "blue-800": $blue-800,
+ "blue-900": $blue-900
+) !default;
+
+$indigos: (
+ "indigo-100": $indigo-100,
+ "indigo-200": $indigo-200,
+ "indigo-300": $indigo-300,
+ "indigo-400": $indigo-400,
+ "indigo-500": $indigo-500,
+ "indigo-600": $indigo-600,
+ "indigo-700": $indigo-700,
+ "indigo-800": $indigo-800,
+ "indigo-900": $indigo-900
+) !default;
+
+$purples: (
+ "purple-100": $purple-100,
+ "purple-200": $purple-200,
+ "purple-300": $purple-300,
+ "purple-400": $purple-400,
+ "purple-500": $purple-500,
+ "purple-600": $purple-600,
+ "purple-700": $purple-700,
+ "purple-800": $purple-800,
+ "purple-900": $purple-900
+) !default;
+
+$pinks: (
+ "pink-100": $pink-100,
+ "pink-200": $pink-200,
+ "pink-300": $pink-300,
+ "pink-400": $pink-400,
+ "pink-500": $pink-500,
+ "pink-600": $pink-600,
+ "pink-700": $pink-700,
+ "pink-800": $pink-800,
+ "pink-900": $pink-900
+) !default;
+
+$reds: (
+ "red-100": $red-100,
+ "red-200": $red-200,
+ "red-300": $red-300,
+ "red-400": $red-400,
+ "red-500": $red-500,
+ "red-600": $red-600,
+ "red-700": $red-700,
+ "red-800": $red-800,
+ "red-900": $red-900
+) !default;
+
+$oranges: (
+ "orange-100": $orange-100,
+ "orange-200": $orange-200,
+ "orange-300": $orange-300,
+ "orange-400": $orange-400,
+ "orange-500": $orange-500,
+ "orange-600": $orange-600,
+ "orange-700": $orange-700,
+ "orange-800": $orange-800,
+ "orange-900": $orange-900
+) !default;
+
+$yellows: (
+ "yellow-100": $yellow-100,
+ "yellow-200": $yellow-200,
+ "yellow-300": $yellow-300,
+ "yellow-400": $yellow-400,
+ "yellow-500": $yellow-500,
+ "yellow-600": $yellow-600,
+ "yellow-700": $yellow-700,
+ "yellow-800": $yellow-800,
+ "yellow-900": $yellow-900
+) !default;
+
+$greens: (
+ "green-100": $green-100,
+ "green-200": $green-200,
+ "green-300": $green-300,
+ "green-400": $green-400,
+ "green-500": $green-500,
+ "green-600": $green-600,
+ "green-700": $green-700,
+ "green-800": $green-800,
+ "green-900": $green-900
+) !default;
+
+$teals: (
+ "teal-100": $teal-100,
+ "teal-200": $teal-200,
+ "teal-300": $teal-300,
+ "teal-400": $teal-400,
+ "teal-500": $teal-500,
+ "teal-600": $teal-600,
+ "teal-700": $teal-700,
+ "teal-800": $teal-800,
+ "teal-900": $teal-900
+) !default;
+
+$cyans: (
+ "cyan-100": $cyan-100,
+ "cyan-200": $cyan-200,
+ "cyan-300": $cyan-300,
+ "cyan-400": $cyan-400,
+ "cyan-500": $cyan-500,
+ "cyan-600": $cyan-600,
+ "cyan-700": $cyan-700,
+ "cyan-800": $cyan-800,
+ "cyan-900": $cyan-900
+) !default;
+
+$grays: (
+ "gray-100": $gray-100,
+ "gray-200": $gray-200,
+ "gray-300": $gray-300,
+ "gray-400": $gray-400,
+ "gray-500": $gray-500,
+ "gray-600": $gray-600,
+ "gray-700": $gray-700,
+ "gray-800": $gray-800,
+ "gray-900": $gray-900
+) !default;
+
+$colors: (
+ "blue": $blue,
+ "indigo": $indigo,
+ "purple": $purple,
+ "pink": $pink,
+ "red": $red,
+ "orange": $orange,
+ "yellow": $yellow,
+ "green": $green,
+ "teal": $teal,
+ "cyan": $cyan
+) !default;
+
+$all-colors: (
+ "grays": $grays,
+ "blues": $blues,
+ "indigos": $indigos,
+ "purples": $purples,
+ "pinks": $pinks,
+ "reds": $reds,
+ "oranges": $oranges,
+ "yellows": $yellows,
+ "greens": $greens,
+ "teals": $teals,
+ "cyans": $cyans
+) !default;
--- /dev/null
+// Configuration
+//
+// Variables and settings not related to theme, components, and more go here. It does include layout.
+
+$prefix: bs- !default;
+
+$enable-caret: true !default;
+$enable-rounded: true !default;
+$enable-shadows: false !default;
+$enable-gradients: false !default;
+$enable-transitions: true !default;
+$enable-reduced-motion: true !default;
+$enable-smooth-scroll: true !default;
+$enable-grid-classes: true !default;
+$enable-container-classes: true !default;
+$enable-cssgrid: false !default;
+$enable-button-pointers: true !default;
+$enable-rfs: true !default;
+$enable-validation-icons: true !default;
+$enable-negative-margins: false !default;
+$enable-deprecation-messages: true !default;
+$enable-important-utilities: true !default;
+
+$enable-dark-mode: true !default;
+$color-mode-type: data !default; // `data` or `media-query`
+
+// more to come here…
+
+$color-mode-type: "media-query" !default;
+$color-contrast-dark: #000 !default;
+$color-contrast-light: #fff !default;
+$min-contrast-ratio: 4.5 !default;
+
+// Grid breakpoints
+//
+// Define the minimum dimensions at which your layout will change,
+// adapting to different screen sizes, for use in media queries.
+
+// scss-docs-start grid-breakpoints
+$grid-breakpoints: (
+ xs: 0,
+ sm: 576px,
+ md: 768px,
+ lg: 992px,
+ xl: 1200px,
+ xxl: 1400px
+) !default;
+// scss-docs-end grid-breakpoints
+
+// Grid columns
+//
+// Set the number of columns and specify the width of the gutters.
+
+$grid-columns: 12 !default;
+$grid-gutter-width: 1.5rem !default;
+$grid-row-columns: 6 !default;
+
+// Grid containers
+//
+// Define the maximum width of `.container` for different screen sizes.
+
+// scss-docs-start container-max-widths
+$container-max-widths: (
+ sm: 540px,
+ md: 720px,
+ lg: 960px,
+ xl: 1140px,
+ xxl: 1320px
+) !default;
+// scss-docs-end container-max-widths
+
+$container-padding-x: $grid-gutter-width !default;
+
+$utilities: () !default;
+
+// Characters which are escaped by the escape-svg function
+$escaped-characters: (
+ ("<", "%3c"),
+ (">", "%3e"),
+ ("#", "%23"),
+ ("(", "%28"),
+ (")", "%29"),
+) !default;
+@use "sass:map";
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/caret" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/box-shadow" as *;
+@use "mixins/gradients" as *;
+@use "mixins/caret" as *;
+@use "vendor/rfs" as *;
+@use "layout/breakpoints" as *;
+
// The dropdown wrapper (`<div>`)
.dropup,
.dropend,
// We deliberately hardcode the `bs-` prefix because we check
// this custom property in JS to determine Popper's positioning
-@each $breakpoint in map-keys($grid-breakpoints) {
+@each $breakpoint in map.keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+++ /dev/null
-@import "forms/labels";
-@import "forms/form-text";
-@import "forms/form-control";
-@import "forms/form-select";
-@import "forms/form-check";
-@import "forms/form-range";
-@import "forms/floating-labels";
-@import "forms/input-group";
-@import "forms/validation";
+@use "sass:color";
+@use "sass:list";
+@use "sass:map";
+@use "sass:math";
+@use "sass:meta";
+@use "sass:string";
+// @use "variables" as *;
+@use "config" as *;
+
// Bootstrap functions
//
// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.
$prev-key: null;
$prev-num: null;
@each $key, $num in $map {
- @if $prev-num == null or unit($num) == "%" or unit($prev-num) == "%" {
+ @if $prev-num == null or math.unit($num) == "%" or math.unit($prev-num) == "%" {
// Do nothing
} @else if not comparable($prev-num, $num) {
@warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
// Starts at zero
// Used to ensure the min-width of the lowest breakpoint starts at 0.
-@mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") {
- @if length($map) > 0 {
- $values: map-values($map);
- $first-value: nth($values, 1);
+@mixin _assert-starts-at-zero($map, $map-name: "$breakpoints") {
+ @if list.length($map) > 0 {
+ $values: map.values($map);
+ $first-value: list.nth($values, 1);
@if $first-value != 0 {
@warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
}
// Colors
@function to-rgb($value) {
- @return red($value), green($value), blue($value);
+ @return color.channel($value, "red"), color.channel($value, "green"), color.channel($value, "blue");
}
// stylelint-disable scss/dollar-variable-pattern
// allow to pass the $key and $value of the map as an function argument
$_args: ();
@each $arg in $args {
- $_args: append($_args, if($arg == "$key", $key, if($arg == "$value", $value, $arg)));
+ $_args: list.append($_args, if($arg == "$key", $key, if($arg == "$value", $value, $arg)));
}
- $_map: map-merge($_map, ($key: call(get-function($func), $_args...)));
+ $_map: map.merge($_map, ($key: meta.call(meta.get-function($func), $_args...)));
}
@return $_map;
@function varify($list) {
$result: null;
@each $entry in $list {
- $result: append($result, var(--#{$prefix}#{$entry}), space);
+ $result: list.append($result, var(--#{$prefix}#{$entry}), space);
}
@return $result;
}
$result: ();
@each $key, $value in $map {
@if $key != 0 {
- $result: map-merge($result, ("n" + $key: (-$value)));
+ $result: map.merge($result, ("n" + $key: (-$value)));
}
}
@return $result;
@function map-get-multiple($map, $values) {
$result: ();
@each $key, $value in $map {
- @if (index($values, $key) != null) {
- $result: map-merge($result, ($key: $value));
+ @if (list.index($values, $key) != null) {
+ $result: map.merge($result, ($key: $value));
}
}
@return $result;
$merged-maps: ();
@each $map in $maps {
- $merged-maps: map-merge($merged-maps, $map);
+ $merged-maps: map.merge($merged-maps, $map);
}
@return $merged-maps;
}
// @param {String} $replace ('') - New value
// @return {String} - Updated string
@function str-replace($string, $search, $replace: "") {
- $index: str-index($string, $search);
+ $index: string.index($string, $search);
@if $index {
- @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
+ @return string.slice($string, 1, $index - 1) + $replace + str-replace(string.slice($string, $index + string.length($search)), $search, $replace);
}
@return $string;
// Requires the use of quotes around data URIs.
@function escape-svg($string) {
- @if str-index($string, "data:image/svg+xml") {
+ @if string.index($string, "data:image/svg+xml") {
@each $char, $encoded in $escaped-characters {
// Do not escape the url brackets
- @if str-index($string, "url(") == 1 {
- $string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}");
+ @if string.index($string, "url(") == 1 {
+ $string: url("#{str-replace(string.slice($string, 6, -3), $char, $encoded)}");
} @else {
$string: str-replace($string, $char, $encoded);
}
$_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .0044 .0048 .0052 .0056 .006 .0065 .007 .0075 .008 .0086 .0091 .0097 .0103 .011 .0116 .0123 .013 .0137 .0144 .0152 .016 .0168 .0176 .0185 .0194 .0203 .0212 .0222 .0232 .0242 .0252 .0262 .0273 .0284 .0296 .0307 .0319 .0331 .0343 .0356 .0369 .0382 .0395 .0409 .0423 .0437 .0452 .0467 .0482 .0497 .0513 .0529 .0545 .0561 .0578 .0595 .0612 .063 .0648 .0666 .0685 .0704 .0723 .0742 .0762 .0782 .0802 .0823 .0844 .0865 .0887 .0908 .0931 .0953 .0976 .0999 .1022 .1046 .107 .1095 .1119 .1144 .117 .1195 .1221 .1248 .1274 .1301 .1329 .1356 .1384 .1413 .1441 .147 .15 .1529 .1559 .159 .162 .1651 .1683 .1714 .1746 .1779 .1812 .1845 .1878 .1912 .1946 .1981 .2016 .2051 .2086 .2122 .2159 .2195 .2232 .227 .2307 .2346 .2384 .2423 .2462 .2502 .2542 .2582 .2623 .2664 .2705 .2747 .2789 .2831 .2874 .2918 .2961 .3005 .305 .3095 .314 .3185 .3231 .3278 .3325 .3372 .3419 .3467 .3515 .3564 .3613 .3663 .3712 .3763 .3813 .3864 .3916 .3968 .402 .4072 .4125 .4179 .4233 .4287 .4342 .4397 .4452 .4508 .4564 .4621 .4678 .4735 .4793 .4851 .491 .4969 .5029 .5089 .5149 .521 .5271 .5333 .5395 .5457 .552 .5583 .5647 .5711 .5776 .5841 .5906 .5972 .6038 .6105 .6172 .624 .6308 .6376 .6445 .6514 .6584 .6654 .6724 .6795 .6867 .6939 .7011 .7084 .7157 .7231 .7305 .7379 .7454 .7529 .7605 .7682 .7758 .7835 .7913 .7991 .807 .8148 .8228 .8308 .8388 .8469 .855 .8632 .8714 .8796 .8879 .8963 .9047 .9131 .9216 .9301 .9387 .9473 .956 .9647 .9734 .9823 .9911 1;
@function color-contrast($background, $color-contrast-dark: $color-contrast-dark, $color-contrast-light: $color-contrast-light, $min-contrast-ratio: $min-contrast-ratio) {
- $foregrounds: $color-contrast-light, $color-contrast-dark, $white, $black;
+ $foregrounds: $color-contrast-light, $color-contrast-dark, #fff, #000;
$max-ratio: 0;
$max-ratio-color: null;
$l1: luminance($background);
$l2: luminance(opaque($background, $foreground));
- @return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05));
+ @return if($l1 > $l2, math.div($l1 + .05, $l2 + .05), math.div($l2 + .05, $l1 + .05));
}
// Return WCAG2.2 relative luminance
// See https://www.w3.org/TR/WCAG/#dfn-contrast-ratio
@function luminance($color) {
$rgb: (
- "r": red($color),
- "g": green($color),
- "b": blue($color)
+ "r": color.channel($color, "red"),
+ "g": color.channel($color, "green"),
+ "b": color.channel($color, "blue")
);
@each $name, $value in $rgb {
- $value: if(divide($value, 255) < .04045, divide(divide($value, 255), 12.92), nth($_luminance-list, $value + 1));
- $rgb: map-merge($rgb, ($name: $value));
+ $value: if(math.div($value, 255) < .04045, math.div(math.div($value, 255), 12.92), list.nth($_luminance-list, math.round($value + 1)));
+ $rgb: map.merge($rgb, ($name: $value));
}
- @return (map-get($rgb, "r") * .2126) + (map-get($rgb, "g") * .7152) + (map-get($rgb, "b") * .0722);
+ @return (map.get($rgb, "r") * .2126) + (map.get($rgb, "g") * .7152) + (map.get($rgb, "b") * .0722);
}
// Return opaque color
// opaque(#fff, rgba(0, 0, 0, .5)) => #808080
@function opaque($background, $foreground) {
- @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100%);
+ @return color.mix(rgba($foreground, 1), $background, color.opacity($foreground) * 100%);
}
// scss-docs-start color-functions
-// Tint a color: mix a color with white
+// // Tint a color: mix a color with white
@function tint-color($color, $weight) {
- @return mix(white, $color, $weight);
+ @return color.mix(white, $color, $weight);
}
-// Shade a color: mix a color with black
+// // Shade a color: mix a color with black
@function shade-color($color, $weight) {
- @return mix(black, $color, $weight);
+ @return color.mix(black, $color, $weight);
}
-// Shade the color if the weight is positive, else tint it
+// // Shade the color if the weight is positive, else tint it
@function shift-color($color, $weight) {
@return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight));
}
// scss-docs-end color-functions
-
-@function divide($dividend, $divisor, $precision: 10) {
- $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
- $dividend: abs($dividend);
- $divisor: abs($divisor);
- @if $dividend == 0 {
- @return 0;
- }
- @if $divisor == 0 {
- @error "Cannot divide by 0";
- }
- $remainder: $dividend;
- $result: 0;
- $factor: 10;
- @while ($remainder > 0 and $precision >= 0) {
- $quotient: 0;
- @while ($remainder >= $divisor) {
- $remainder: $remainder - $divisor;
- $quotient: $quotient + 1;
- }
- $result: $result * 10 + $quotient;
- $factor: $factor * .1;
- $remainder: $remainder * 10;
- $precision: $precision - 1;
- @if ($precision < 0 and $remainder >= $divisor * 5) {
- $result: $result + 1;
- }
- }
- $result: $result * $factor * $sign;
- $dividend-unit: unit($dividend);
- $divisor-unit: unit($divisor);
- $unit-map: (
- "px": 1px,
- "rem": 1rem,
- "em": 1em,
- "%": 1%
- );
- @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {
- $result: $result * map-get($unit-map, $dividend-unit);
- }
- @return $result;
-}
+++ /dev/null
-// Row
-//
-// Rows contain your columns.
-
-:root {
- @each $name, $value in $grid-breakpoints {
- --#{$prefix}breakpoint-#{$name}: #{$value};
- }
-}
-
-@if $enable-grid-classes {
- .row {
- @include make-row();
-
- > * {
- @include make-col-ready();
- }
- }
-}
-
-@if $enable-cssgrid {
- .grid {
- display: grid;
- grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);
- grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);
- gap: var(--#{$prefix}gap, #{$grid-gutter-width});
-
- @include make-cssgrid();
- }
-}
-
-
-// Columns
-//
-// Common styles for small and large grid columns
-
-@if $enable-grid-classes {
- @include make-grid-columns();
-}
+++ /dev/null
-@import "helpers/color-bg";
-@import "helpers/colored-links";
-@import "helpers/focus-ring";
-@import "helpers/icon-link";
-@import "helpers/position";
-@import "helpers/stacks";
-@import "helpers/visually-hidden";
-@import "helpers/stretched-link";
-@import "helpers/text-truncation";
-@import "helpers/vr";
+@use "sass:map";
+@use "colors" as *;
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "vendor/rfs" as *;
+@use "layout/breakpoints" as *;
+
// Base class
//
// Easily usable on <ul>, <ol>, or <div>.
//
// Change the layout of list group items from vertical (default) to horizontal.
-@each $breakpoint in map-keys($grid-breakpoints) {
+@each $breakpoint in map.keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
// Add modifier classes to change text and background color on individual items.
// Organizationally, this must come after the `:hover` states.
-@each $state in map-keys($theme-colors) {
+@each $state in map.keys($theme-colors) {
.list-group-item-#{$state} {
--#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text-emphasis);
--#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);
-// Re-assigned maps
-//
-// Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.
-
-// scss-docs-start theme-colors-rgb
-$theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value") !default;
-// scss-docs-end theme-colors-rgb
-
-// scss-docs-start theme-text-map
-$theme-colors-text: (
- "primary": $primary-text-emphasis,
- "secondary": $secondary-text-emphasis,
- "success": $success-text-emphasis,
- "info": $info-text-emphasis,
- "warning": $warning-text-emphasis,
- "danger": $danger-text-emphasis,
- "light": $light-text-emphasis,
- "dark": $dark-text-emphasis,
-) !default;
-// scss-docs-end theme-text-map
-
-// scss-docs-start theme-bg-subtle-map
-$theme-colors-bg-subtle: (
- "primary": $primary-bg-subtle,
- "secondary": $secondary-bg-subtle,
- "success": $success-bg-subtle,
- "info": $info-bg-subtle,
- "warning": $warning-bg-subtle,
- "danger": $danger-bg-subtle,
- "light": $light-bg-subtle,
- "dark": $dark-bg-subtle,
-) !default;
-// scss-docs-end theme-bg-subtle-map
-
-// scss-docs-start theme-border-subtle-map
-$theme-colors-border-subtle: (
- "primary": $primary-border-subtle,
- "secondary": $secondary-border-subtle,
- "success": $success-border-subtle,
- "info": $info-border-subtle,
- "warning": $warning-border-subtle,
- "danger": $danger-border-subtle,
- "light": $light-border-subtle,
- "dark": $dark-border-subtle,
-) !default;
-// scss-docs-end theme-border-subtle-map
-
-$theme-colors-text-dark: null !default;
-$theme-colors-bg-subtle-dark: null !default;
-$theme-colors-border-subtle-dark: null !default;
-
-@if $enable-dark-mode {
- // scss-docs-start theme-text-dark-map
- $theme-colors-text-dark: (
- "primary": $primary-text-emphasis-dark,
- "secondary": $secondary-text-emphasis-dark,
- "success": $success-text-emphasis-dark,
- "info": $info-text-emphasis-dark,
- "warning": $warning-text-emphasis-dark,
- "danger": $danger-text-emphasis-dark,
- "light": $light-text-emphasis-dark,
- "dark": $dark-text-emphasis-dark,
- ) !default;
- // scss-docs-end theme-text-dark-map
-
- // scss-docs-start theme-bg-subtle-dark-map
- $theme-colors-bg-subtle-dark: (
- "primary": $primary-bg-subtle-dark,
- "secondary": $secondary-bg-subtle-dark,
- "success": $success-bg-subtle-dark,
- "info": $info-bg-subtle-dark,
- "warning": $warning-bg-subtle-dark,
- "danger": $danger-bg-subtle-dark,
- "light": $light-bg-subtle-dark,
- "dark": $dark-bg-subtle-dark,
- ) !default;
- // scss-docs-end theme-bg-subtle-dark-map
-
- // scss-docs-start theme-border-subtle-dark-map
- $theme-colors-border-subtle-dark: (
- "primary": $primary-border-subtle-dark,
- "secondary": $secondary-border-subtle-dark,
- "success": $success-border-subtle-dark,
- "info": $info-border-subtle-dark,
- "warning": $warning-border-subtle-dark,
- "danger": $danger-border-subtle-dark,
- "light": $light-border-subtle-dark,
- "dark": $dark-border-subtle-dark,
- ) !default;
- // scss-docs-end theme-border-subtle-dark-map
-}
-
-// Utilities maps
-//
-// Extends the default `$theme-colors` maps to help create our utilities.
-
-// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.
-// scss-docs-start utilities-colors
-$utilities-colors: $theme-colors-rgb !default;
-// scss-docs-end utilities-colors
-
-// scss-docs-start utilities-text-colors
-$utilities-text: map-merge(
- $utilities-colors,
- (
- "black": to-rgb($black),
- "white": to-rgb($white),
- "body": to-rgb($body-color)
- )
-) !default;
-$utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default;
-
-$utilities-text-emphasis-colors: (
- "primary-emphasis": var(--#{$prefix}primary-text-emphasis),
- "secondary-emphasis": var(--#{$prefix}secondary-text-emphasis),
- "success-emphasis": var(--#{$prefix}success-text-emphasis),
- "info-emphasis": var(--#{$prefix}info-text-emphasis),
- "warning-emphasis": var(--#{$prefix}warning-text-emphasis),
- "danger-emphasis": var(--#{$prefix}danger-text-emphasis),
- "light-emphasis": var(--#{$prefix}light-text-emphasis),
- "dark-emphasis": var(--#{$prefix}dark-text-emphasis)
-) !default;
-// scss-docs-end utilities-text-colors
-
-// scss-docs-start utilities-bg-colors
-$utilities-bg: map-merge(
- $utilities-colors,
- (
- "black": to-rgb($black),
- "white": to-rgb($white),
- "body": to-rgb($body-bg)
- )
-) !default;
-$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default;
-
-$utilities-bg-subtle: (
- "primary-subtle": var(--#{$prefix}primary-bg-subtle),
- "secondary-subtle": var(--#{$prefix}secondary-bg-subtle),
- "success-subtle": var(--#{$prefix}success-bg-subtle),
- "info-subtle": var(--#{$prefix}info-bg-subtle),
- "warning-subtle": var(--#{$prefix}warning-bg-subtle),
- "danger-subtle": var(--#{$prefix}danger-bg-subtle),
- "light-subtle": var(--#{$prefix}light-bg-subtle),
- "dark-subtle": var(--#{$prefix}dark-bg-subtle)
-) !default;
-// scss-docs-end utilities-bg-colors
-
-// scss-docs-start utilities-border-colors
-$utilities-border: map-merge(
- $utilities-colors,
- (
- "black": to-rgb($black),
- "white": to-rgb($white)
- )
-) !default;
-$utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$key", "border") !default;
-
-$utilities-border-subtle: (
- "primary-subtle": var(--#{$prefix}primary-border-subtle),
- "secondary-subtle": var(--#{$prefix}secondary-border-subtle),
- "success-subtle": var(--#{$prefix}success-border-subtle),
- "info-subtle": var(--#{$prefix}info-border-subtle),
- "warning-subtle": var(--#{$prefix}warning-border-subtle),
- "danger-subtle": var(--#{$prefix}danger-border-subtle),
- "light-subtle": var(--#{$prefix}light-border-subtle),
- "dark-subtle": var(--#{$prefix}dark-border-subtle)
-) !default;
-// scss-docs-end utilities-border-colors
-
-$utilities-links-underline: map-loop($utilities-colors, rgba-css-var, "$key", "link-underline") !default;
-
-$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
-
-$gutters: $spacers !default;
+// @use "sass:map";
+// @use "colors" as *;
+// @use "functions" as *;
+// @use "config" as *;
+// @use "variables" as *;
+
+// // Re-assigned maps
+// //
+// // Placed here so that others can override the default Sass maps and see automatic updates to utilities and more.
+
+// // scss-docs-start theme-colors-rgb
+// $theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value") !default;
+// // scss-docs-end theme-colors-rgb
+
+// // scss-docs-start theme-text-map
+// $theme-colors-text: (
+// "primary": $primary-text-emphasis,
+// "secondary": $secondary-text-emphasis,
+// "success": $success-text-emphasis,
+// "info": $info-text-emphasis,
+// "warning": $warning-text-emphasis,
+// "danger": $danger-text-emphasis,
+// "light": $light-text-emphasis,
+// "dark": $dark-text-emphasis,
+// ) !default;
+// // scss-docs-end theme-text-map
+
+// // scss-docs-start theme-bg-subtle-map
+// $theme-colors-bg-subtle: (
+// "primary": $primary-bg-subtle,
+// "secondary": $secondary-bg-subtle,
+// "success": $success-bg-subtle,
+// "info": $info-bg-subtle,
+// "warning": $warning-bg-subtle,
+// "danger": $danger-bg-subtle,
+// "light": $light-bg-subtle,
+// "dark": $dark-bg-subtle,
+// ) !default;
+// // scss-docs-end theme-bg-subtle-map
+
+// // scss-docs-start theme-border-subtle-map
+// $theme-colors-border-subtle: (
+// "primary": $primary-border-subtle,
+// "secondary": $secondary-border-subtle,
+// "success": $success-border-subtle,
+// "info": $info-border-subtle,
+// "warning": $warning-border-subtle,
+// "danger": $danger-border-subtle,
+// "light": $light-border-subtle,
+// "dark": $dark-border-subtle,
+// ) !default;
+// // scss-docs-end theme-border-subtle-map
+
+// $theme-colors-text-dark: null !default;
+// $theme-colors-bg-subtle-dark: null !default;
+// $theme-colors-border-subtle-dark: null !default;
+
+// @if $enable-dark-mode {
+// // scss-docs-start theme-text-dark-map
+// $theme-colors-text-dark: (
+// "primary": $primary-text-emphasis-dark,
+// "secondary": $secondary-text-emphasis-dark,
+// "success": $success-text-emphasis-dark,
+// "info": $info-text-emphasis-dark,
+// "warning": $warning-text-emphasis-dark,
+// "danger": $danger-text-emphasis-dark,
+// "light": $light-text-emphasis-dark,
+// "dark": $dark-text-emphasis-dark,
+// ) !default;
+// // scss-docs-end theme-text-dark-map
+
+// // scss-docs-start theme-bg-subtle-dark-map
+// $theme-colors-bg-subtle-dark: (
+// "primary": $primary-bg-subtle-dark,
+// "secondary": $secondary-bg-subtle-dark,
+// "success": $success-bg-subtle-dark,
+// "info": $info-bg-subtle-dark,
+// "warning": $warning-bg-subtle-dark,
+// "danger": $danger-bg-subtle-dark,
+// "light": $light-bg-subtle-dark,
+// "dark": $dark-bg-subtle-dark,
+// ) !default;
+// // scss-docs-end theme-bg-subtle-dark-map
+
+// // scss-docs-start theme-border-subtle-dark-map
+// $theme-colors-border-subtle-dark: (
+// "primary": $primary-border-subtle-dark,
+// "secondary": $secondary-border-subtle-dark,
+// "success": $success-border-subtle-dark,
+// "info": $info-border-subtle-dark,
+// "warning": $warning-border-subtle-dark,
+// "danger": $danger-border-subtle-dark,
+// "light": $light-border-subtle-dark,
+// "dark": $dark-border-subtle-dark,
+// ) !default;
+// // scss-docs-end theme-border-subtle-dark-map
+// }
+
+// // Utilities maps
+// //
+// // Extends the default `$theme-colors` maps to help create our utilities.
+
+// // Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.
+// // scss-docs-start utilities-colors
+// $utilities-colors: $theme-colors-rgb !default;
+// // scss-docs-end utilities-colors
+
+// // scss-docs-start utilities-text-colors
+// $utilities-text: map.merge(
+// $utilities-colors,
+// (
+// "black": to-rgb($black),
+// "white": to-rgb($white),
+// "body": to-rgb($body-color)
+// )
+// ) !default;
+// $utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default;
+
+// $utilities-text-emphasis-colors: (
+// "primary-emphasis": var(--#{$prefix}primary-text-emphasis),
+// "secondary-emphasis": var(--#{$prefix}secondary-text-emphasis),
+// "success-emphasis": var(--#{$prefix}success-text-emphasis),
+// "info-emphasis": var(--#{$prefix}info-text-emphasis),
+// "warning-emphasis": var(--#{$prefix}warning-text-emphasis),
+// "danger-emphasis": var(--#{$prefix}danger-text-emphasis),
+// "light-emphasis": var(--#{$prefix}light-text-emphasis),
+// "dark-emphasis": var(--#{$prefix}dark-text-emphasis)
+// ) !default;
+// // scss-docs-end utilities-text-colors
+
+// // scss-docs-start utilities-bg-colors
+// $utilities-bg: map.merge(
+// $utilities-colors,
+// (
+// "black": to-rgb($black),
+// "white": to-rgb($white),
+// "body": to-rgb($body-bg)
+// )
+// ) !default;
+// $utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default;
+
+// $utilities-bg-subtle: (
+// "primary-subtle": var(--#{$prefix}primary-bg-subtle),
+// "secondary-subtle": var(--#{$prefix}secondary-bg-subtle),
+// "success-subtle": var(--#{$prefix}success-bg-subtle),
+// "info-subtle": var(--#{$prefix}info-bg-subtle),
+// "warning-subtle": var(--#{$prefix}warning-bg-subtle),
+// "danger-subtle": var(--#{$prefix}danger-bg-subtle),
+// "light-subtle": var(--#{$prefix}light-bg-subtle),
+// "dark-subtle": var(--#{$prefix}dark-bg-subtle)
+// ) !default;
+// // scss-docs-end utilities-bg-colors
+
+// // scss-docs-start utilities-border-colors
+// $utilities-border: map.merge(
+// $utilities-colors,
+// (
+// "black": to-rgb($black),
+// "white": to-rgb($white)
+// )
+// ) !default;
+// $utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$key", "border") !default;
+
+// $utilities-border-subtle: (
+// "primary-subtle": var(--#{$prefix}primary-border-subtle),
+// "secondary-subtle": var(--#{$prefix}secondary-border-subtle),
+// "success-subtle": var(--#{$prefix}success-border-subtle),
+// "info-subtle": var(--#{$prefix}info-border-subtle),
+// "warning-subtle": var(--#{$prefix}warning-border-subtle),
+// "danger-subtle": var(--#{$prefix}danger-border-subtle),
+// "light-subtle": var(--#{$prefix}light-border-subtle),
+// "dark-subtle": var(--#{$prefix}dark-border-subtle)
+// ) !default;
+// // scss-docs-end utilities-border-colors
+
+// $utilities-links-underline: map-loop($utilities-colors, rgba-css-var, "$key", "link-underline") !default;
+
+// $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
+
+// $gutters: $spacers !default;
+++ /dev/null
-// Toggles
-//
-// Used in conjunction with global variables to enable certain theme features.
-
-// Vendor
-@import "vendor/rfs";
-
-// Deprecate
-@import "mixins/deprecate";
-
-// Helpers
-@import "mixins/breakpoints";
-@import "mixins/color-mode";
-@import "mixins/color-scheme";
-@import "mixins/image";
-@import "mixins/resize";
-@import "mixins/visually-hidden";
-@import "mixins/reset-text";
-@import "mixins/text-truncate";
-
-// Utilities
-@import "mixins/utilities";
-
-// Components
-@import "mixins/backdrop";
-@import "mixins/buttons";
-@import "mixins/caret";
-@import "mixins/pagination";
-@import "mixins/lists";
-@import "mixins/forms";
-@import "mixins/table-variants";
-
-// Skins
-@import "mixins/border-radius";
-@import "mixins/box-shadow";
-@import "mixins/gradients";
-@import "mixins/transition";
-
-// Layout
-@import "mixins/container";
-@import "mixins/grid";
+@use "sass:map";
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/box-shadow" as *;
+@use "mixins/transition" as *;
+@use "mixins/gradients" as *;
+@use "mixins/backdrop" as *;
+@use "vendor/rfs" as *;
+@use "layout/breakpoints" as *;
+
// .modal-open - body class for killing the scroll
// .modal - container to scroll within
// .modal-dialog - positioning shell for the actual modal
}
// scss-docs-start modal-fullscreen-loop
-@each $breakpoint in map-keys($grid-breakpoints) {
+@each $breakpoint in map.keys($grid-breakpoints) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
$postfix: if($infix != "", $infix + "-down", "");
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/transition" as *;
+@use "mixins/gradients" as *;
+@use "vendor/rfs" as *;
+
// Base class
//
// Kickstart any navigation component with a set of style resets. Works with
+@use "sass:map";
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/box-shadow" as *;
+@use "mixins/gradients" as *;
+@use "mixins/transition" as *;
+@use "mixins/color-mode" as *;
+@use "mixins/deprecate" as *;
+@use "vendor/rfs" as *;
+@use "layout/breakpoints" as *;
+
// Navbar
//
// Provide a static navbar from which we expand to create full-width, fixed, and
// Generate series of `.navbar-expand-*` responsive classes for configuring
// where your navbar collapses.
.navbar-expand {
- @each $breakpoint in map-keys($grid-breakpoints) {
+ @each $breakpoint in map.keys($grid-breakpoints) {
$next: breakpoint-next($breakpoint, $grid-breakpoints);
$infix: breakpoint-infix($next, $grid-breakpoints);
+@use "sass:map";
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/box-shadow" as *;
+@use "mixins/transition" as *;
+@use "mixins/backdrop" as *;
+@use "layout/breakpoints" as *;
+
%offcanvas-css-vars {
// scss-docs-start offcanvas-css-vars
--#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};
// scss-docs-end offcanvas-css-vars
}
-@each $breakpoint in map-keys($grid-breakpoints) {
+@each $breakpoint in map.keys($grid-breakpoints) {
$next: breakpoint-next($breakpoint, $grid-breakpoints);
$infix: breakpoint-infix($next, $grid-breakpoints);
}
}
-@each $breakpoint in map-keys($grid-breakpoints) {
+@each $breakpoint in map.keys($grid-breakpoints) {
$next: breakpoint-next($breakpoint, $grid-breakpoints);
$infix: breakpoint-infix($next, $grid-breakpoints);
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/lists" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/transition" as *;
+@use "mixins/gradients" as *;
+@use "vendor/rfs" as *;
+
+// scss-docs-start pagination-mixin
+@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {
+ --#{$prefix}pagination-padding-x: #{$padding-x};
+ --#{$prefix}pagination-padding-y: #{$padding-y};
+ @include rfs($font-size, --#{$prefix}pagination-font-size);
+ --#{$prefix}pagination-border-radius: #{$border-radius};
+}
+// scss-docs-end pagination-mixin
+
.pagination {
// scss-docs-start pagination-css-vars
--#{$prefix}pagination-padding-x: #{$pagination-padding-x};
+@use "colors" as *;
+@use "config" as *;
+@use "variables" as *;
+
.placeholder {
display: inline-block;
min-height: 1em;
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/box-shadow" as *;
+@use "vendor/rfs" as *;
+@use "mixins/reset-text" as *;
+
.popover {
// scss-docs-start popover-css-vars
--#{$prefix}popover-zindex: #{$zindex-popover};
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/transition" as *;
+@use "mixins/gradients" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/box-shadow" as *;
+@use "vendor/rfs" as *;
+
// Disable animation if transitions are disabled
// scss-docs-start progress-keyframes
+@use "sass:meta";
+@use "colors" as *;
+@use "config" as *;
+@use "variables" as *;
+@use "theme" as *;
+// @use "maps" as *;
+@use "vendor/rfs" as *;
+@use "mixins/color-mode" as *;
+
+:root {
+ color-scheme: light dark;
+
+ @each $color-group-name, $color-group in $all-colors {
+ @if meta.type-of($color-group) == "map" {
+ @each $color-name, $color-value in $color-group {
+ --#{$prefix}#{$color-name}: #{$color-value};
+ }
+ } @else {
+ --#{$prefix}#{$color-group-name}: #{$color-group};
+ }
+ }
+
+ @each $color, $value in $theme-colors {
+ --#{$prefix}#{$color}: #{$value};
+ }
+
+ @each $color-name, $color-map in $new-theme-colors {
+ @each $key, $value in $color-map {
+ --#{$prefix}#{$color-name}-#{$key}: #{$value};
+ }
+ }
+
+ --#{$prefix}black: #{$black};
+ --#{$prefix}white: #{$white};
+}
+
:root,
[data-bs-theme="light"] {
// Note: Custom variable values only support SassScript inside `#{}`.
//
// Generate palettes for full colors, grays, and theme colors.
- @each $color, $value in $colors {
- --#{$prefix}#{$color}: #{$value};
- }
+ // @each $color, $value in $colors {
+ // --#{$prefix}#{$color}: #{$value};
+ // }
- @each $color, $value in $grays {
- --#{$prefix}gray-#{$color}: #{$value};
- }
+ // @each $color, $value in $grays {
+ // --#{$prefix}gray-#{$color}: #{$value};
+ // }
- @each $color, $value in $theme-colors {
- --#{$prefix}#{$color}: #{$value};
- }
+ // @each $color, $value in $theme-colors {
+ // --#{$prefix}#{$color}: #{$value};
+ // }
- @each $color, $value in $theme-colors-rgb {
- --#{$prefix}#{$color}-rgb: #{$value};
- }
+ // @each $color, $value in $theme-colors-rgb {
+ // --#{$prefix}#{$color}-rgb: #{$value};
+ // }
- @each $color, $value in $theme-colors-text {
- --#{$prefix}#{$color}-text-emphasis: #{$value};
- }
+ // @each $color, $value in $theme-colors-text {
+ // --#{$prefix}#{$color}-text-emphasis: #{$value};
+ // }
- @each $color, $value in $theme-colors-bg-subtle {
- --#{$prefix}#{$color}-bg-subtle: #{$value};
- }
+ // @each $color, $value in $theme-colors-bg-subtle {
+ // --#{$prefix}#{$color}-bg-subtle: #{$value};
+ // }
- @each $color, $value in $theme-colors-border-subtle {
- --#{$prefix}#{$color}-border-subtle: #{$value};
- }
+ // @each $color, $value in $theme-colors-border-subtle {
+ // --#{$prefix}#{$color}-border-subtle: #{$value};
+ // }
--#{$prefix}white-rgb: #{to-rgb($white)};
--#{$prefix}black-rgb: #{to-rgb($black)};
// Note: Use `inspect` for lists so that quoted items keep the quotes.
// See https://github.com/sass/sass/issues/2383#issuecomment-336349172
- --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};
- --#{$prefix}font-monospace: #{inspect($font-family-monospace)};
+ --#{$prefix}font-sans-serif: #{meta.inspect($font-family-sans-serif)};
+ --#{$prefix}font-monospace: #{meta.inspect($font-family-monospace)};
--#{$prefix}gradient: #{$gradient};
// Root and body
@if $font-size-root != null {
--#{$prefix}root-font-size: #{$font-size-root};
}
- --#{$prefix}body-font-family: #{inspect($font-family-base)};
+ --#{$prefix}body-font-family: #{meta.inspect($font-family-base)};
@include rfs($font-size-base, --#{$prefix}body-font-size);
--#{$prefix}body-font-weight: #{$font-weight-base};
--#{$prefix}body-line-height: #{$line-height-base};
--#{$prefix}body-text-align: #{$body-text-align};
}
+ @each $key, $value in $theme-bgs {
+ $key: if($key == null, "", "-" + $key);
+ --#{$prefix}bg#{$key}: #{$value};
+ }
+
+ @each $key, $value in $theme-fgs {
+ $key: if($key == null, "", "-" + $key);
+ --#{$prefix}fg#{$key}: #{$value};
+ }
+
+ @each $key, $value in $theme-borders {
+ $key: if($key == null, "", "-" + $key);
+ --#{$prefix}border#{$key}: #{$value};
+ }
+
--#{$prefix}body-color: #{$body-color};
--#{$prefix}body-color-rgb: #{to-rgb($body-color)};
--#{$prefix}body-bg: #{$body-bg};
--#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};
- --#{$prefix}emphasis-color: #{$body-emphasis-color};
- --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};
+ // --#{$prefix}emphasis-color: #{$body-emphasis-color};
+ // --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};
- --#{$prefix}secondary-color: #{$body-secondary-color};
- --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};
- --#{$prefix}secondary-bg: #{$body-secondary-bg};
- --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};
+ // --#{$prefix}secondary-color: #{$body-secondary-color};
+ // --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};
+ // --#{$prefix}secondary-bg: #{$body-secondary-bg};
+ // --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};
- --#{$prefix}tertiary-color: #{$body-tertiary-color};
- --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};
- --#{$prefix}tertiary-bg: #{$body-tertiary-bg};
- --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};
+ // --#{$prefix}tertiary-color: #{$body-tertiary-color};
+ // --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};
+ // --#{$prefix}tertiary-bg: #{$body-tertiary-bg};
+ // --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};
// scss-docs-end root-body-variables
--#{$prefix}heading-color: #{$headings-color};
- --#{$prefix}link-color: #{$link-color};
- --#{$prefix}link-color-rgb: #{to-rgb($link-color)};
- --#{$prefix}link-decoration: #{$link-decoration};
+ // --#{$prefix}link-color: #{$link-color};
+ // --#{$prefix}link-color-rgb: #{to-rgb($link-color)};
+ // --#{$prefix}link-decoration: #{$link-decoration};
+
+ // --#{$prefix}link-hover-color: #{$link-hover-color};
+ // --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};
- --#{$prefix}link-hover-color: #{$link-hover-color};
- --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};
+ --#{$prefix}link-color: light-dark(var(--#{$prefix}primary-base), var(--#{$prefix}primary-text));
+ --#{$prefix}link-decoration: #{$link-decoration};
+ --#{$prefix}link-hover-color: color-mix(in oklch, var(--#{$prefix}link-color) 90%, #000);
@if $link-hover-decoration != null {
--#{$prefix}link-hover-decoration: #{$link-hover-decoration};
--#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};
--#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};
- @each $color, $value in $theme-colors-text-dark {
- --#{$prefix}#{$color}-text-emphasis: #{$value};
- }
+ // @each $color, $value in $theme-colors-text-dark {
+ // --#{$prefix}#{$color}-text-emphasis: #{$value};
+ // }
- @each $color, $value in $theme-colors-bg-subtle-dark {
- --#{$prefix}#{$color}-bg-subtle: #{$value};
- }
+ // @each $color, $value in $theme-colors-bg-subtle-dark {
+ // --#{$prefix}#{$color}-bg-subtle: #{$value};
+ // }
- @each $color, $value in $theme-colors-border-subtle-dark {
- --#{$prefix}#{$color}-border-subtle: #{$value};
- }
+ // @each $color, $value in $theme-colors-border-subtle-dark {
+ // --#{$prefix}#{$color}-border-subtle: #{$value};
+ // }
--#{$prefix}heading-color: #{$headings-color-dark};
+@use "config" as *;
+@use "variables" as *;
+
+// scss-docs-start spinner-variables
+$spinner-width: 2rem !default;
+$spinner-height: $spinner-width !default;
+$spinner-vertical-align: -.125em !default;
+$spinner-border-width: .25em !default;
+$spinner-animation-speed: .75s !default;
+
+$spinner-width-sm: 1rem !default;
+$spinner-height-sm: $spinner-width-sm !default;
+$spinner-border-width-sm: .2em !default;
+// scss-docs-end spinner-variables
+
//
// Rotating border
//
--- /dev/null
+@use "sass:meta";
+@use "sass:map";
+@use "config" as *;
+@use "colors" as *;
+
+@function theme-color-values($key) {
+ $result: ();
+
+ @each $color-name, $color-map in $new-theme-colors {
+ @if map.has-key($color-map, $key) {
+ $result: map.merge($result, ($color-name: map.get($color-map, $key)));
+ }
+ }
+
+ @return $result;
+}
+
+// Recursive mixin to handle nested maps
+@mixin create-css-vars($map, $parent-key: "") {
+ @each $key, $value in $map {
+ $current-key: if($parent-key == "", $key, "#{$parent-key}-#{$key}");
+
+ @if meta.type-of($value) == "map" {
+ @include create-css-vars($value, $current-key);
+ } @else {
+ --#{$prefix}#{$current-key}: #{$value};
+ }
+ }
+}
+
+// scss-docs-start theme-colors
+$new-theme-colors: (
+ "primary": (
+ "base": var(--#{$prefix}blue-500),
+ "text": light-dark(var(--#{$prefix}blue-600), var(--#{$prefix}blue-300)),
+ "bg": light-dark(var(--#{$prefix}blue-500), var(--#{$prefix}blue-500)),
+ "bg-subtle": light-dark(var(--#{$prefix}blue-100), var(--#{$prefix}blue-900)),
+ "bg-muted": light-dark(var(--#{$prefix}blue-200), var(--#{$prefix}blue-800)),
+ // "bg-emphasized": light-dark(color-mix(in oklch, var(--#{$prefix}blue-200), var(--#{$prefix}blue-300)), var(--#{$prefix}blue-700)),
+ "border": light-dark(var(--#{$prefix}blue-300), var(--#{$prefix}blue-600)),
+ "focus-ring": color-mix(in oklch, var(--#{$prefix}blue-500) 50%, var(--#{$prefix}bg)),
+ "contrast": var(--#{$prefix}white)
+ ),
+ "accent": (
+ "base": var(--#{$prefix}indigo-500),
+ "text": light-dark(var(--#{$prefix}indigo-600), var(--#{$prefix}indigo-300)),
+ "bg": light-dark(var(--#{$prefix}indigo-500), var(--#{$prefix}indigo-500)),
+ "bg-subtle": light-dark(var(--#{$prefix}indigo-100), var(--#{$prefix}indigo-900)),
+ "bg-muted": light-dark(var(--#{$prefix}indigo-200), var(--#{$prefix}indigo-800)),
+ // "bg-emphasized": light-dark(color-mix(in oklch, var(--#{$prefix}indigo-200), var(--#{$prefix}indigo-300)), var(--#{$prefix}indigo-700)),
+ "border": light-dark(var(--#{$prefix}indigo-300), var(--#{$prefix}indigo-600)),
+ "focus-ring": color-mix(in oklch, var(--#{$prefix}indigo-500) 50%, var(--#{$prefix}bg)),
+ "contrast": var(--#{$prefix}white)
+ ),
+ "danger": (
+ "base": var(--#{$prefix}red-500),
+ "text": light-dark(var(--#{$prefix}red-600), var(--#{$prefix}red-300)),
+ "bg": light-dark(var(--#{$prefix}red-500), var(--#{$prefix}red-500)),
+ "bg-subtle": light-dark(var(--#{$prefix}red-100), var(--#{$prefix}red-900)),
+ "bg-muted": light-dark(var(--#{$prefix}red-200), var(--#{$prefix}red-800)),
+ // "bg-emphasized": light-dark(color-mix(in oklch, var(--#{$prefix}red-200), var(--#{$prefix}red-300)), var(--#{$prefix}red-700)),
+ "border": light-dark(var(--#{$prefix}red-300), var(--#{$prefix}red-600)),
+ "focus-ring": color-mix(in oklch, var(--#{$prefix}red-500) 50%, var(--#{$prefix}bg)),
+ "contrast": var(--#{$prefix}white)
+ ),
+ "warning": (
+ "base": var(--#{$prefix}yellow-500),
+ "text": light-dark(var(--#{$prefix}yellow-700), var(--#{$prefix}yellow-300)),
+ "bg": light-dark(var(--#{$prefix}yellow-500), var(--#{$prefix}yellow-500)),
+ "bg-subtle": light-dark(var(--#{$prefix}yellow-100), var(--#{$prefix}yellow-900)),
+ "bg-muted": light-dark(var(--#{$prefix}yellow-200), var(--#{$prefix}yellow-800)),
+ // "bg-emphasized": light-dark(color-mix(in oklch, var(--#{$prefix}yellow-200), var(--#{$prefix}yellow-300)), var(--#{$prefix}yellow-700)),
+ "border": light-dark(var(--#{$prefix}yellow-300), var(--#{$prefix}yellow-600)),
+ "focus-ring": color-mix(in oklch, var(--#{$prefix}yellow-500) 50%, var(--#{$prefix}bg)),
+ "contrast": var(--#{$prefix}gray-900)
+ ),
+ "success": (
+ "base": var(--#{$prefix}green-500),
+ "text": light-dark(var(--#{$prefix}green-600), var(--#{$prefix}green-300)),
+ "bg": light-dark(var(--#{$prefix}green-500), var(--#{$prefix}green-500)),
+ "bg-subtle": light-dark(var(--#{$prefix}green-100), var(--#{$prefix}green-900)),
+ "bg-muted": light-dark(var(--#{$prefix}green-200), var(--#{$prefix}green-800)),
+ // "bg-emphasized": light-dark(color-mix(in oklch, var(--#{$prefix}green-200), var(--#{$prefix}green-300)), var(--#{$prefix}green-700)),
+ "border": light-dark(var(--#{$prefix}green-300), var(--#{$prefix}green-600)),
+ "focus-ring": color-mix(in oklch, var(--#{$prefix}green-500) 50%, var(--#{$prefix}bg)),
+ "contrast": var(--#{$prefix}white)
+ ),
+ "info": (
+ "base": var(--#{$prefix}cyan-500),
+ "text": light-dark(var(--#{$prefix}cyan-600), var(--#{$prefix}cyan-300)),
+ "bg": light-dark(var(--#{$prefix}cyan-500), var(--#{$prefix}cyan-500)),
+ "bg-subtle": light-dark(var(--#{$prefix}cyan-100), var(--#{$prefix}cyan-900)),
+ "bg-muted": light-dark(var(--#{$prefix}cyan-200), var(--#{$prefix}cyan-800)),
+ // "bg-emphasized": light-dark(color-mix(in oklch, var(--#{$prefix}cyan-200), var(--#{$prefix}cyan-300)), var(--#{$prefix}cyan-700)),
+ "border": light-dark(var(--#{$prefix}cyan-300), var(--#{$prefix}cyan-600)),
+ "focus-ring": color-mix(in oklch, var(--#{$prefix}cyan-500) 50%, var(--#{$prefix}bg)),
+ "contrast": var(--#{$prefix}gray-900)
+ ),
+ "secondary": (
+ "base": var(--#{$prefix}gray-300),
+ "text": light-dark(var(--#{$prefix}gray-600), var(--#{$prefix}gray-400)),
+ "bg": light-dark(var(--#{$prefix}gray-300), var(--#{$prefix}gray-600)),
+ "bg-subtle": light-dark(var(--#{$prefix}gray-100), var(--#{$prefix}gray-800)),
+ "bg-muted": light-dark(var(--#{$prefix}gray-200), var(--#{$prefix}gray-700)),
+ // "bg-emphasized": light-dark(color-mix(in oklch, var(--#{$prefix}gray-200), var(--#{$prefix}gray-300)), color-mix(in oklch, var(--#{$prefix}gray-600), var(--#{$prefix}gray-700))),
+ "border": light-dark(var(--#{$prefix}gray-300), var(--#{$prefix}gray-600)),
+ "focus-ring": color-mix(in oklch, var(--#{$prefix}gray-500) 50%, var(--#{$prefix}bg)),
+ "contrast": light-dark(var(--#{$prefix}gray-900), var(--#{$prefix}white))
+ )
+) !default;
+// scss-docs-end theme-colors
+
+// mdo-do: consider using muted, subtle, ghost or something instead of linear scale?
+$theme-bgs: (
+ null: light-dark(var(--#{$prefix}white), var(--#{$prefix}gray-900)),
+ "1": light-dark(var(--#{$prefix}gray-100), color-mix(in srgb, var(--#{$prefix}gray-900), var(--#{$prefix}gray-800))),
+ "2": light-dark(color-mix(in srgb, var(--#{$prefix}gray-100), var(--#{$prefix}gray-200)), color-mix(in srgb, var(--#{$prefix}gray-800), var(--#{$prefix}gray-700))),
+ "3": light-dark(color-mix(in srgb, var(--#{$prefix}gray-200), var(--#{$prefix}gray-300)), color-mix(in srgb, var(--#{$prefix}gray-700), var(--#{$prefix}gray-600))),
+ "white": var(--#{$prefix}white),
+ "black": var(--#{$prefix}black),
+ "transparent": transparent,
+ "inherit": inherit,
+) !default;
+
+$theme-fgs: (
+ null: light-dark(var(--#{$prefix}gray-900), var(--#{$prefix}gray-100)),
+ "1": light-dark(var(--#{$prefix}gray-800), var(--#{$prefix}gray-200)),
+ "2": light-dark(var(--#{$prefix}gray-700), var(--#{$prefix}gray-300)),
+ "3": light-dark(var(--#{$prefix}gray-600), var(--#{$prefix}gray-400)),
+ "white": var(--#{$prefix}white),
+ "black": var(--#{$prefix}black),
+ "inherit": inherit,
+) !default;
+
+$theme-borders: (
+ null: light-dark(var(--#{$prefix}gray-300), var(--#{$prefix}gray-700)),
+ "muted": light-dark(var(--#{$prefix}gray-200), var(--#{$prefix}gray-800)),
+ "subtle": light-dark(var(--#{$prefix}gray-100), color-mix(in srgb, var(--#{$prefix}gray-800), var(--#{$prefix}gray-900))),
+ "emphasized": light-dark(var(--#{$prefix}gray-400), var(--#{$prefix}gray-600)),
+) !default;
+
+// $util-opacity: (
+// "10": .1,
+// "20": .2,
+// "30": .3,
+// "40": .4,
+// "50": .5,
+// "60": .6,
+// "70": .7,
+// "80": .8,
+// "90": .9,
+// "100": 1
+// ) !default;
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "vendor/rfs" as *;
+
.toast {
// scss-docs-start toast-css-vars
--#{$prefix}toast-zindex: #{$zindex-toast};
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/border-radius" as *;
+@use "mixins/deprecate" as *;
+@use "vendor/rfs" as *;
+@use "mixins/reset-text" as *;
+
// Base class
.tooltip {
// scss-docs-start tooltip-css-vars
+@use "config" as *;
+@use "variables" as *;
+@use "mixins/transition" as *;
+
.fade {
@include transition($transition-fade);
-// Utilities
+@use "sass:map";
+@use "config" as *;
+@use "colors" as *;
+@use "variables" as *;
+@use "functions" as *;
+@use "theme" as *;
$utilities: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
-$utilities: map-merge(
+$utilities: map.merge(
(
// scss-docs-start utils-vertical-align
"align": (
),
// scss-docs-end utils-vertical-align
// scss-docs-start utils-aspect-ratio
- "aspect-ratio": (
+ "aspect-ratio-attr": (
+ selector: "attr-includes",
+ class: "ratio-",
property: aspect-ratio,
+ values: var(--#{$prefix}ratio),
+ ),
+ "aspect-ratio": (
+ // property: aspect-ratio,
+ property: --#{$prefix}ratio,
class: ratio,
values: $aspect-ratios
),
// scss-docs-end utils-aspect-ratio
// scss-docs-start utils-float
"float": (
- responsive: true,
property: float,
+ responsive: true,
values: (
start: left,
end: right,
// scss-docs-end utils-shadow
// scss-docs-start utils-focus-ring
"focus-ring": (
- css-var: true,
- css-variable-name: focus-ring-color,
+ // css-var: true,
+ property: --#{$prefix}focus-ring-color,
class: focus-ring,
- values: map-loop($theme-colors-rgb, rgba-css-var, "$key", "focus-ring")
+ values: theme-color-values("focus-ring"),
),
// scss-docs-end utils-focus-ring
// scss-docs-start utils-position
)
),
"border-top": (
- property: border-top,
+ class: border-top,
+ property: border-block-start,
values: (
null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),
0: 0,
)
),
"border-end": (
- property: border-right,
+ property: border-inline-end,
class: border-end,
values: (
null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),
)
),
"border-bottom": (
- property: border-bottom,
+ property: border-block-end,
+ class: border-bottom,
values: (
null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),
0: 0,
)
),
"border-start": (
- property: border-left,
+ property: border-inline-start,
class: border-start,
values: (
null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),
0: 0,
)
),
- "border-color": (
- property: border-color,
- class: border,
- local-vars: (
- "border-opacity": 1
- ),
- values: $utilities-border-colors
+ "border-y": (
+ property: border-block,
+ values: (
+ null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),
+ 0: 0,
+ )
+ ),
+ "border-x": (
+ property: border-inline,
+ values: (
+ null: var(--#{$prefix}border-width) var(--#{$prefix}border-style) var(--#{$prefix}border-color),
+ 0: 0,
+ )
),
- "subtle-border-color": (
+ "border-color": (
property: border-color,
class: border,
- values: $utilities-border-subtle
+ values: theme-color-values("border")
),
"border-width": (
property: border-width,
class: border,
values: $border-widths
),
- "border-opacity": (
- css-var: true,
- class: border-opacity,
- values: (
- 10: .1,
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1
- )
- ),
+ // "border-opacity": (
+ // css-var: true,
+ // class: border-opacity,
+ // values: (
+ // 10: .1,
+ // 25: .25,
+ // 50: .5,
+ // 75: .75,
+ // 100: 1
+ // )
+ // ),
// scss-docs-end utils-borders
// Sizing utilities
// scss-docs-start utils-sizing
evenly: space-evenly,
)
),
+ "justify-self": (
+ responsive: true,
+ property: justify-self,
+ values: (
+ start: flex-start,
+ end: flex-end,
+ center: center,
+ )
+ ),
"align-items": (
responsive: true,
property: align-items,
responsive: true,
property: margin,
class: m,
- values: map-merge($spacers, (auto: auto))
+ values: map.merge($spacers, (auto: auto))
),
"margin-x": (
responsive: true,
property: margin-right margin-left,
class: mx,
- values: map-merge($spacers, (auto: auto))
+ values: map.merge($spacers, (auto: auto))
),
"margin-y": (
responsive: true,
property: margin-top margin-bottom,
class: my,
- values: map-merge($spacers, (auto: auto))
+ values: map.merge($spacers, (auto: auto))
),
"margin-top": (
responsive: true,
property: margin-top,
class: mt,
- values: map-merge($spacers, (auto: auto))
+ values: map.merge($spacers, (auto: auto))
),
"margin-end": (
responsive: true,
property: margin-right,
class: me,
- values: map-merge($spacers, (auto: auto))
+ values: map.merge($spacers, (auto: auto))
),
"margin-bottom": (
responsive: true,
property: margin-bottom,
class: mb,
- values: map-merge($spacers, (auto: auto))
+ values: map.merge($spacers, (auto: auto))
),
"margin-start": (
responsive: true,
property: margin-left,
class: ms,
- values: map-merge($spacers, (auto: auto))
+ values: map.merge($spacers, (auto: auto))
),
// Negative margin utilities
- "negative-margin": (
- responsive: true,
- property: margin,
- class: m,
- values: $negative-spacers
- ),
- "negative-margin-x": (
- responsive: true,
- property: margin-right margin-left,
- class: mx,
- values: $negative-spacers
- ),
- "negative-margin-y": (
- responsive: true,
- property: margin-top margin-bottom,
- class: my,
- values: $negative-spacers
- ),
- "negative-margin-top": (
- responsive: true,
- property: margin-top,
- class: mt,
- values: $negative-spacers
- ),
- "negative-margin-end": (
- responsive: true,
- property: margin-right,
- class: me,
- values: $negative-spacers
- ),
- "negative-margin-bottom": (
- responsive: true,
- property: margin-bottom,
- class: mb,
- values: $negative-spacers
- ),
- "negative-margin-start": (
- responsive: true,
- property: margin-left,
- class: ms,
- values: $negative-spacers
- ),
+ // "negative-margin": (
+ // responsive: true,
+ // property: margin,
+ // class: m,
+ // values: $negative-spacers
+ // ),
+ // "negative-margin-x": (
+ // responsive: true,
+ // property: margin-right margin-left,
+ // class: mx,
+ // values: $negative-spacers
+ // ),
+ // "negative-margin-y": (
+ // responsive: true,
+ // property: margin-top margin-bottom,
+ // class: my,
+ // values: $negative-spacers
+ // ),
+ // "negative-margin-top": (
+ // responsive: true,
+ // property: margin-top,
+ // class: mt,
+ // values: $negative-spacers
+ // ),
+ // "negative-margin-end": (
+ // responsive: true,
+ // property: margin-right,
+ // class: me,
+ // values: $negative-spacers
+ // ),
+ // "negative-margin-bottom": (
+ // responsive: true,
+ // property: margin-bottom,
+ // class: mb,
+ // values: $negative-spacers
+ // ),
+ // "negative-margin-start": (
+ // responsive: true,
+ // property: margin-left,
+ // class: ms,
+ // values: $negative-spacers
+ // ),
// Padding utilities
"padding": (
responsive: true,
),
// scss-docs-end utils-text
// scss-docs-start utils-color
- "color": (
+ "color-attr": (
+ selector: "attr-includes",
+ class: "color-",
property: color,
- class: text,
- local-vars: (
- "text-opacity": 1
- ),
- values: map-merge(
- $utilities-text-colors,
- (
- "body-secondary": var(--#{$prefix}secondary-color),
- "body-tertiary": var(--#{$prefix}tertiary-color),
- "body-emphasis": var(--#{$prefix}emphasis-color),
- "reset": inherit,
- )
- )
+ values: var(--#{$prefix}color),
),
- "text-opacity": (
- css-var: true,
- class: text-opacity,
+ "color": (
+ property: --#{$prefix}color,
+ class: color,
+ values: map.merge(theme-color-values("text"), $theme-fgs),
+ ),
+ "color-opacity": (
+ class: color,
+ property: color,
values: (
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1
+ 10: color-mix(in oklch, var(--#{$prefix}color) 10%, transparent),
+ 20: color-mix(in oklch, var(--#{$prefix}color) 20%, transparent),
+ 30: color-mix(in oklch, var(--#{$prefix}color) 30%, transparent),
+ 40: color-mix(in oklch, var(--#{$prefix}color) 40%, transparent),
+ 50: color-mix(in oklch, var(--#{$prefix}color) 50%, transparent),
+ 60: color-mix(in oklch, var(--#{$prefix}color) 60%, transparent),
+ 70: color-mix(in oklch, var(--#{$prefix}color) 70%, transparent),
+ 80: color-mix(in oklch, var(--#{$prefix}color) 80%, transparent),
+ 90: color-mix(in oklch, var(--#{$prefix}color) 90%, transparent),
+ 100: var(--#{$prefix}color),
)
),
- "text-color": (
- property: color,
- class: text,
- values: $utilities-text-emphasis-colors
+ "contrast-color": (
+ property: --#{$prefix}color,
+ class: color-on,
+ values: theme-color-values("contrast"),
),
// scss-docs-end utils-color
// scss-docs-start utils-links
"link-opacity": (
- css-var: true,
+ property: --#{$prefix}link-opacity,
+ // css-var: true,
class: link-opacity,
state: hover,
values: (
local-vars: (
"link-underline-opacity": 1
),
- values: map-merge(
- $utilities-links-underline,
- (
- null: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-underline-opacity, 1)),
- )
- )
+ // values: map.merge(
+ // $utilities-links-underline,
+ // (
+ // // null: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-underline-opacity, 1)),
+ // )
+ // )
),
"link-underline-opacity": (
- css-var: true,
+ // css-var: true,
+ property: --#{$prefix}link-underline-opacity,
class: link-underline-opacity,
state: hover,
values: (
),
// scss-docs-end utils-links
// scss-docs-start utils-bg-color
- "background-color": (
+ "bg-attr": (
+ selector: "attr-includes",
+ class: "bg-",
property: background-color,
+ values: var(--#{$prefix}bg),
+ ),
+ "bg-color": (
+ property: --#{$prefix}bg,
class: bg,
- local-vars: (
- "bg-opacity": 1
- ),
- values: map-merge(
- $utilities-bg-colors,
- (
- "transparent": transparent,
- "body-secondary": rgba(var(--#{$prefix}secondary-bg-rgb), var(--#{$prefix}bg-opacity)),
- "body-tertiary": rgba(var(--#{$prefix}tertiary-bg-rgb), var(--#{$prefix}bg-opacity)),
- )
- )
+ values: map.merge(theme-color-values("bg"), $theme-bgs),
+ ),
+ "bg-color-subtle": (
+ property: --#{$prefix}bg,
+ class: bg-subtle,
+ values: theme-color-values("bg-subtle"),
+ ),
+ "bg-color-muted": (
+ property: --#{$prefix}bg,
+ class: bg-muted,
+ values: theme-color-values("bg-muted"),
),
"bg-opacity": (
- css-var: true,
- class: bg-opacity,
+ class: bg,
+ property: background-color,
values: (
- 10: .1,
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1
+ 10: color-mix(in oklch, var(--#{$prefix}bg) 10%, transparent),
+ 20: color-mix(in oklch, var(--#{$prefix}bg) 20%, transparent),
+ 30: color-mix(in oklch, var(--#{$prefix}bg) 30%, transparent),
+ 40: color-mix(in oklch, var(--#{$prefix}bg) 40%, transparent),
+ 50: color-mix(in oklch, var(--#{$prefix}bg) 50%, transparent),
+ 60: color-mix(in oklch, var(--#{$prefix}bg) 60%, transparent),
+ 70: color-mix(in oklch, var(--#{$prefix}bg) 70%, transparent),
+ 80: color-mix(in oklch, var(--#{$prefix}bg) 80%, transparent),
+ 90: color-mix(in oklch, var(--#{$prefix}bg) 90%, transparent),
+ 100: var(--#{$prefix}bg),
)
),
- "subtle-background-color": (
- property: background-color,
- class: bg,
- values: $utilities-bg-subtle
- ),
// scss-docs-end utils-bg-color
"gradient": (
property: background-image,
),
// scss-docs-end utils-interaction
// scss-docs-start utils-border-radius
- "rounded": (
+ "border-radius": (
property: border-radius,
class: rounded,
values: (
2: var(--#{$prefix}border-radius),
3: var(--#{$prefix}border-radius-lg),
4: var(--#{$prefix}border-radius-xl),
- 5: var(--#{$prefix}border-radius-xxl),
+ 5: var(--#{$prefix}border-radius-2xl),
circle: 50%,
pill: var(--#{$prefix}border-radius-pill)
)
2: var(--#{$prefix}border-radius),
3: var(--#{$prefix}border-radius-lg),
4: var(--#{$prefix}border-radius-xl),
- 5: var(--#{$prefix}border-radius-xxl),
+ 5: var(--#{$prefix}border-radius-2xl),
circle: 50%,
pill: var(--#{$prefix}border-radius-pill)
)
2: var(--#{$prefix}border-radius),
3: var(--#{$prefix}border-radius-lg),
4: var(--#{$prefix}border-radius-xl),
- 5: var(--#{$prefix}border-radius-xxl),
+ 5: var(--#{$prefix}border-radius-2xl),
circle: 50%,
pill: var(--#{$prefix}border-radius-pill)
)
2: var(--#{$prefix}border-radius),
3: var(--#{$prefix}border-radius-lg),
4: var(--#{$prefix}border-radius-xl),
- 5: var(--#{$prefix}border-radius-xxl),
+ 5: var(--#{$prefix}border-radius-2xl),
circle: 50%,
pill: var(--#{$prefix}border-radius-pill)
)
2: var(--#{$prefix}border-radius),
3: var(--#{$prefix}border-radius-lg),
4: var(--#{$prefix}border-radius-xl),
- 5: var(--#{$prefix}border-radius-xxl),
+ 5: var(--#{$prefix}border-radius-2xl),
circle: 50%,
pill: var(--#{$prefix}border-radius-pill)
)
// scss-docs-start sass-dark-mode-vars
// scss-docs-start theme-text-dark-variables
-$primary-text-emphasis-dark: tint-color($primary, 40%) !default;
-$secondary-text-emphasis-dark: tint-color($secondary, 40%) !default;
-$success-text-emphasis-dark: tint-color($success, 40%) !default;
-$info-text-emphasis-dark: tint-color($info, 40%) !default;
-$warning-text-emphasis-dark: tint-color($warning, 40%) !default;
-$danger-text-emphasis-dark: tint-color($danger, 40%) !default;
-$light-text-emphasis-dark: $gray-100 !default;
-$dark-text-emphasis-dark: $gray-300 !default;
+// $primary-text-emphasis-dark: tint-color($primary, 40%) !default;
+// $secondary-text-emphasis-dark: tint-color($secondary, 40%) !default;
+// $success-text-emphasis-dark: tint-color($success, 40%) !default;
+// $info-text-emphasis-dark: tint-color($info, 40%) !default;
+// $warning-text-emphasis-dark: tint-color($warning, 40%) !default;
+// $danger-text-emphasis-dark: tint-color($danger, 40%) !default;
+// $light-text-emphasis-dark: $gray-100 !default;
+// $dark-text-emphasis-dark: $gray-300 !default;
// scss-docs-end theme-text-dark-variables
// scss-docs-start theme-bg-subtle-dark-variables
-$primary-bg-subtle-dark: shade-color($primary, 80%) !default;
-$secondary-bg-subtle-dark: shade-color($secondary, 80%) !default;
-$success-bg-subtle-dark: shade-color($success, 80%) !default;
-$info-bg-subtle-dark: shade-color($info, 80%) !default;
-$warning-bg-subtle-dark: shade-color($warning, 80%) !default;
-$danger-bg-subtle-dark: shade-color($danger, 80%) !default;
-$light-bg-subtle-dark: $gray-800 !default;
-$dark-bg-subtle-dark: mix($gray-800, $black) !default;
+// $primary-bg-subtle-dark: shade-color($primary, 80%) !default;
+// $secondary-bg-subtle-dark: shade-color($secondary, 80%) !default;
+// $success-bg-subtle-dark: shade-color($success, 80%) !default;
+// $info-bg-subtle-dark: shade-color($info, 80%) !default;
+// $warning-bg-subtle-dark: shade-color($warning, 80%) !default;
+// $danger-bg-subtle-dark: shade-color($danger, 80%) !default;
+// $light-bg-subtle-dark: $gray-800 !default;
+// $dark-bg-subtle-dark: color.mix($gray-800, $black) !default;
// scss-docs-end theme-bg-subtle-dark-variables
// scss-docs-start theme-border-subtle-dark-variables
-$primary-border-subtle-dark: shade-color($primary, 40%) !default;
-$secondary-border-subtle-dark: shade-color($secondary, 40%) !default;
-$success-border-subtle-dark: shade-color($success, 40%) !default;
-$info-border-subtle-dark: shade-color($info, 40%) !default;
-$warning-border-subtle-dark: shade-color($warning, 40%) !default;
-$danger-border-subtle-dark: shade-color($danger, 40%) !default;
-$light-border-subtle-dark: $gray-700 !default;
-$dark-border-subtle-dark: $gray-800 !default;
+// $primary-border-subtle-dark: shade-color($primary, 40%) !default;
+// $secondary-border-subtle-dark: shade-color($secondary, 40%) !default;
+// $success-border-subtle-dark: shade-color($success, 40%) !default;
+// $info-border-subtle-dark: shade-color($info, 40%) !default;
+// $warning-border-subtle-dark: shade-color($warning, 40%) !default;
+// $danger-border-subtle-dark: shade-color($danger, 40%) !default;
+// $light-border-subtle-dark: $gray-700 !default;
+// $dark-border-subtle-dark: $gray-800 !default;
// scss-docs-end theme-border-subtle-dark-variables
-$body-color-dark: $gray-300 !default;
-$body-bg-dark: $gray-900 !default;
-$body-secondary-color-dark: rgba($body-color-dark, .75) !default;
-$body-secondary-bg-dark: $gray-800 !default;
-$body-tertiary-color-dark: rgba($body-color-dark, .5) !default;
-$body-tertiary-bg-dark: mix($gray-800, $gray-900, 50%) !default;
-$body-emphasis-color-dark: $white !default;
-$border-color-dark: $gray-700 !default;
-$border-color-translucent-dark: rgba($white, .15) !default;
-$headings-color-dark: inherit !default;
-$link-color-dark: tint-color($primary, 40%) !default;
-$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;
-$code-color-dark: tint-color($code-color, 40%) !default;
-$mark-color-dark: $body-color-dark !default;
-$mark-bg-dark: $yellow-800 !default;
+// $body-color-dark: $gray-300 !default;
+// $body-bg-dark: $gray-900 !default;
+// $body-secondary-color-dark: rgba($body-color-dark, .75) !default;
+// $body-secondary-bg-dark: $gray-800 !default;
+// $body-tertiary-color-dark: rgba($body-color-dark, .5) !default;
+// $body-tertiary-bg-dark: color.mix($gray-800, $gray-900, 50%) !default;
+// $body-emphasis-color-dark: $white !default;
+// $border-color-dark: $gray-700 !default;
+// $border-color-translucent-dark: rgba($white, .15) !default;
+// $headings-color-dark: inherit !default;
+// $link-color-dark: tint-color($primary, 40%) !default;
+// $link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;
+// $code-color-dark: tint-color($code-color, 40%) !default;
+// $mark-color-dark: $body-color-dark !default;
+// $mark-bg-dark: $yellow-800 !default;
-//
-// Forms
-//
+// //
+// // Forms
+// //
-$form-select-indicator-color-dark: $body-color-dark !default;
-$form-select-indicator-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>") !default;
+// $form-select-indicator-color-dark: $body-color-dark !default;
+// $form-select-indicator-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>") !default;
-$form-switch-color-dark: rgba($white, .25) !default;
-$form-switch-bg-image-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>") !default;
+// $form-switch-color-dark: rgba($white, .25) !default;
+// $form-switch-bg-image-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>") !default;
-// scss-docs-start form-validation-colors-dark
-$form-valid-color-dark: $green-300 !default;
-$form-valid-border-color-dark: $green-300 !default;
-$form-invalid-color-dark: $red-300 !default;
-$form-invalid-border-color-dark: $red-300 !default;
-// scss-docs-end form-validation-colors-dark
+// // scss-docs-start form-validation-colors-dark
+// $form-valid-color-dark: $green-300 !default;
+// $form-valid-border-color-dark: $green-300 !default;
+// $form-invalid-color-dark: $red-300 !default;
+// $form-invalid-border-color-dark: $red-300 !default;
+// // scss-docs-end form-validation-colors-dark
-//
-// Accordion
-//
+// //
+// // Accordion
+// //
-$accordion-icon-color-dark: $primary-text-emphasis-dark !default;
-$accordion-icon-active-color-dark: $primary-text-emphasis-dark !default;
+// $accordion-icon-color-dark: $primary-text-emphasis-dark !default;
+// $accordion-icon-active-color-dark: $primary-text-emphasis-dark !default;
-$accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
-$accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
-// scss-docs-end sass-dark-mode-vars
+// $accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
+// $accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
+// // scss-docs-end sass-dark-mode-vars
-//
-// Carousel
-//
+// //
+// // Carousel
+// //
-// scss-docs-start carousel-dark-variables
-$carousel-indicator-active-bg-dark: $black !default;
-$carousel-caption-color-dark: $black !default;
-$carousel-control-icon-filter-dark: invert(1) grayscale(100) !default;
-// scss-docs-end carousel-dark-variables
+// // scss-docs-start carousel-dark-variables
+// $carousel-indicator-active-bg-dark: $black !default;
+// $carousel-caption-color-dark: $black !default;
+// $carousel-control-icon-filter-dark: invert(1) grayscale(100) !default;
+// // scss-docs-end carousel-dark-variables
-//
-// Close button
-//
+// //
+// // Close button
+// //
-$btn-close-filter-dark: invert(1) grayscale(100%) brightness(200%) !default;
+// $btn-close-filter-dark: invert(1) grayscale(100%) brightness(200%) !default;
+@use "sass:color";
+@use "sass:string";
+@use "colors" as *;
+@use "config" as *;
+@use "functions" as *;
+
// Variables
//
// Variables should follow the `$component-state-property-size` formula for
// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.
-// Color system
-
-// scss-docs-start gray-color-variables
-$white: #fff !default;
-$gray-100: #f8f9fa !default;
-$gray-200: #e9ecef !default;
-$gray-300: #dee2e6 !default;
-$gray-400: #ced4da !default;
-$gray-500: #adb5bd !default;
-$gray-600: #6c757d !default;
-$gray-700: #495057 !default;
-$gray-800: #343a40 !default;
-$gray-900: #212529 !default;
-$black: #000 !default;
-// scss-docs-end gray-color-variables
-
-// fusv-disable
-// scss-docs-start gray-colors-map
-$grays: (
- "100": $gray-100,
- "200": $gray-200,
- "300": $gray-300,
- "400": $gray-400,
- "500": $gray-500,
- "600": $gray-600,
- "700": $gray-700,
- "800": $gray-800,
- "900": $gray-900
-) !default;
-// scss-docs-end gray-colors-map
-// fusv-enable
-
-// scss-docs-start color-variables
-$blue: #0d6efd !default;
-$indigo: #6610f2 !default;
-$purple: #6f42c1 !default;
-$pink: #d63384 !default;
-$red: #dc3545 !default;
-$orange: #fd7e14 !default;
-$yellow: #ffc107 !default;
-$green: #198754 !default;
-$teal: #20c997 !default;
-$cyan: #0dcaf0 !default;
-// scss-docs-end color-variables
-
-// scss-docs-start colors-map
-$colors: (
- "blue": $blue,
- "indigo": $indigo,
- "purple": $purple,
- "pink": $pink,
- "red": $red,
- "orange": $orange,
- "yellow": $yellow,
- "green": $green,
- "teal": $teal,
- "cyan": $cyan,
- "black": $black,
- "white": $white,
- "gray": $gray-600,
- "gray-dark": $gray-800
-) !default;
-// scss-docs-end colors-map
-
-// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.2 are 3, 4.5 and 7.
-// See https://www.w3.org/TR/WCAG/#contrast-minimum
-$min-contrast-ratio: 4.5 !default;
-
-// Customize the light and dark text colors for use in our color contrast function.
-$color-contrast-dark: $black !default;
-$color-contrast-light: $white !default;
-
-// fusv-disable
-$blue-100: tint-color($blue, 80%) !default;
-$blue-200: tint-color($blue, 60%) !default;
-$blue-300: tint-color($blue, 40%) !default;
-$blue-400: tint-color($blue, 20%) !default;
-$blue-500: $blue !default;
-$blue-600: shade-color($blue, 20%) !default;
-$blue-700: shade-color($blue, 40%) !default;
-$blue-800: shade-color($blue, 60%) !default;
-$blue-900: shade-color($blue, 80%) !default;
-
-$indigo-100: tint-color($indigo, 80%) !default;
-$indigo-200: tint-color($indigo, 60%) !default;
-$indigo-300: tint-color($indigo, 40%) !default;
-$indigo-400: tint-color($indigo, 20%) !default;
-$indigo-500: $indigo !default;
-$indigo-600: shade-color($indigo, 20%) !default;
-$indigo-700: shade-color($indigo, 40%) !default;
-$indigo-800: shade-color($indigo, 60%) !default;
-$indigo-900: shade-color($indigo, 80%) !default;
-
-$purple-100: tint-color($purple, 80%) !default;
-$purple-200: tint-color($purple, 60%) !default;
-$purple-300: tint-color($purple, 40%) !default;
-$purple-400: tint-color($purple, 20%) !default;
-$purple-500: $purple !default;
-$purple-600: shade-color($purple, 20%) !default;
-$purple-700: shade-color($purple, 40%) !default;
-$purple-800: shade-color($purple, 60%) !default;
-$purple-900: shade-color($purple, 80%) !default;
-
-$pink-100: tint-color($pink, 80%) !default;
-$pink-200: tint-color($pink, 60%) !default;
-$pink-300: tint-color($pink, 40%) !default;
-$pink-400: tint-color($pink, 20%) !default;
-$pink-500: $pink !default;
-$pink-600: shade-color($pink, 20%) !default;
-$pink-700: shade-color($pink, 40%) !default;
-$pink-800: shade-color($pink, 60%) !default;
-$pink-900: shade-color($pink, 80%) !default;
-
-$red-100: tint-color($red, 80%) !default;
-$red-200: tint-color($red, 60%) !default;
-$red-300: tint-color($red, 40%) !default;
-$red-400: tint-color($red, 20%) !default;
-$red-500: $red !default;
-$red-600: shade-color($red, 20%) !default;
-$red-700: shade-color($red, 40%) !default;
-$red-800: shade-color($red, 60%) !default;
-$red-900: shade-color($red, 80%) !default;
-
-$orange-100: tint-color($orange, 80%) !default;
-$orange-200: tint-color($orange, 60%) !default;
-$orange-300: tint-color($orange, 40%) !default;
-$orange-400: tint-color($orange, 20%) !default;
-$orange-500: $orange !default;
-$orange-600: shade-color($orange, 20%) !default;
-$orange-700: shade-color($orange, 40%) !default;
-$orange-800: shade-color($orange, 60%) !default;
-$orange-900: shade-color($orange, 80%) !default;
-
-$yellow-100: tint-color($yellow, 80%) !default;
-$yellow-200: tint-color($yellow, 60%) !default;
-$yellow-300: tint-color($yellow, 40%) !default;
-$yellow-400: tint-color($yellow, 20%) !default;
-$yellow-500: $yellow !default;
-$yellow-600: shade-color($yellow, 20%) !default;
-$yellow-700: shade-color($yellow, 40%) !default;
-$yellow-800: shade-color($yellow, 60%) !default;
-$yellow-900: shade-color($yellow, 80%) !default;
-
-$green-100: tint-color($green, 80%) !default;
-$green-200: tint-color($green, 60%) !default;
-$green-300: tint-color($green, 40%) !default;
-$green-400: tint-color($green, 20%) !default;
-$green-500: $green !default;
-$green-600: shade-color($green, 20%) !default;
-$green-700: shade-color($green, 40%) !default;
-$green-800: shade-color($green, 60%) !default;
-$green-900: shade-color($green, 80%) !default;
-
-$teal-100: tint-color($teal, 80%) !default;
-$teal-200: tint-color($teal, 60%) !default;
-$teal-300: tint-color($teal, 40%) !default;
-$teal-400: tint-color($teal, 20%) !default;
-$teal-500: $teal !default;
-$teal-600: shade-color($teal, 20%) !default;
-$teal-700: shade-color($teal, 40%) !default;
-$teal-800: shade-color($teal, 60%) !default;
-$teal-900: shade-color($teal, 80%) !default;
-
-$cyan-100: tint-color($cyan, 80%) !default;
-$cyan-200: tint-color($cyan, 60%) !default;
-$cyan-300: tint-color($cyan, 40%) !default;
-$cyan-400: tint-color($cyan, 20%) !default;
-$cyan-500: $cyan !default;
-$cyan-600: shade-color($cyan, 20%) !default;
-$cyan-700: shade-color($cyan, 40%) !default;
-$cyan-800: shade-color($cyan, 60%) !default;
-$cyan-900: shade-color($cyan, 80%) !default;
-
-$blues: (
- "blue-100": $blue-100,
- "blue-200": $blue-200,
- "blue-300": $blue-300,
- "blue-400": $blue-400,
- "blue-500": $blue-500,
- "blue-600": $blue-600,
- "blue-700": $blue-700,
- "blue-800": $blue-800,
- "blue-900": $blue-900
-) !default;
-
-$indigos: (
- "indigo-100": $indigo-100,
- "indigo-200": $indigo-200,
- "indigo-300": $indigo-300,
- "indigo-400": $indigo-400,
- "indigo-500": $indigo-500,
- "indigo-600": $indigo-600,
- "indigo-700": $indigo-700,
- "indigo-800": $indigo-800,
- "indigo-900": $indigo-900
-) !default;
-
-$purples: (
- "purple-100": $purple-100,
- "purple-200": $purple-200,
- "purple-300": $purple-300,
- "purple-400": $purple-400,
- "purple-500": $purple-500,
- "purple-600": $purple-600,
- "purple-700": $purple-700,
- "purple-800": $purple-800,
- "purple-900": $purple-900
-) !default;
-
-$pinks: (
- "pink-100": $pink-100,
- "pink-200": $pink-200,
- "pink-300": $pink-300,
- "pink-400": $pink-400,
- "pink-500": $pink-500,
- "pink-600": $pink-600,
- "pink-700": $pink-700,
- "pink-800": $pink-800,
- "pink-900": $pink-900
-) !default;
-
-$reds: (
- "red-100": $red-100,
- "red-200": $red-200,
- "red-300": $red-300,
- "red-400": $red-400,
- "red-500": $red-500,
- "red-600": $red-600,
- "red-700": $red-700,
- "red-800": $red-800,
- "red-900": $red-900
-) !default;
-
-$oranges: (
- "orange-100": $orange-100,
- "orange-200": $orange-200,
- "orange-300": $orange-300,
- "orange-400": $orange-400,
- "orange-500": $orange-500,
- "orange-600": $orange-600,
- "orange-700": $orange-700,
- "orange-800": $orange-800,
- "orange-900": $orange-900
-) !default;
-
-$yellows: (
- "yellow-100": $yellow-100,
- "yellow-200": $yellow-200,
- "yellow-300": $yellow-300,
- "yellow-400": $yellow-400,
- "yellow-500": $yellow-500,
- "yellow-600": $yellow-600,
- "yellow-700": $yellow-700,
- "yellow-800": $yellow-800,
- "yellow-900": $yellow-900
-) !default;
-
-$greens: (
- "green-100": $green-100,
- "green-200": $green-200,
- "green-300": $green-300,
- "green-400": $green-400,
- "green-500": $green-500,
- "green-600": $green-600,
- "green-700": $green-700,
- "green-800": $green-800,
- "green-900": $green-900
-) !default;
-
-$teals: (
- "teal-100": $teal-100,
- "teal-200": $teal-200,
- "teal-300": $teal-300,
- "teal-400": $teal-400,
- "teal-500": $teal-500,
- "teal-600": $teal-600,
- "teal-700": $teal-700,
- "teal-800": $teal-800,
- "teal-900": $teal-900
-) !default;
-
-$cyans: (
- "cyan-100": $cyan-100,
- "cyan-200": $cyan-200,
- "cyan-300": $cyan-300,
- "cyan-400": $cyan-400,
- "cyan-500": $cyan-500,
- "cyan-600": $cyan-600,
- "cyan-700": $cyan-700,
- "cyan-800": $cyan-800,
- "cyan-900": $cyan-900
-) !default;
-// fusv-enable
-
// scss-docs-start theme-color-variables
-$primary: $blue !default;
+$primary: $purple-500 !default;
$secondary: $gray-600 !default;
-$success: $green !default;
-$info: $cyan !default;
-$warning: $yellow !default;
-$danger: $red !default;
+$success: $green-500 !default;
+$info: $cyan-500 !default;
+$warning: $yellow-500 !default;
+$danger: $red-500 !default;
$light: $gray-100 !default;
$dark: $gray-900 !default;
// scss-docs-end theme-color-variables
) !default;
// scss-docs-end theme-colors-map
-// scss-docs-start theme-text-variables
-$primary-text-emphasis: shade-color($primary, 60%) !default;
-$secondary-text-emphasis: shade-color($secondary, 60%) !default;
-$success-text-emphasis: shade-color($success, 60%) !default;
-$info-text-emphasis: shade-color($info, 60%) !default;
-$warning-text-emphasis: shade-color($warning, 60%) !default;
-$danger-text-emphasis: shade-color($danger, 60%) !default;
-$light-text-emphasis: $gray-700 !default;
-$dark-text-emphasis: $gray-700 !default;
-// scss-docs-end theme-text-variables
-
-// scss-docs-start theme-bg-subtle-variables
-$primary-bg-subtle: tint-color($primary, 80%) !default;
-$secondary-bg-subtle: tint-color($secondary, 80%) !default;
-$success-bg-subtle: tint-color($success, 80%) !default;
-$info-bg-subtle: tint-color($info, 80%) !default;
-$warning-bg-subtle: tint-color($warning, 80%) !default;
-$danger-bg-subtle: tint-color($danger, 80%) !default;
-$light-bg-subtle: mix($gray-100, $white) !default;
-$dark-bg-subtle: $gray-400 !default;
-// scss-docs-end theme-bg-subtle-variables
-
-// scss-docs-start theme-border-subtle-variables
-$primary-border-subtle: tint-color($primary, 60%) !default;
-$secondary-border-subtle: tint-color($secondary, 60%) !default;
-$success-border-subtle: tint-color($success, 60%) !default;
-$info-border-subtle: tint-color($info, 60%) !default;
-$warning-border-subtle: tint-color($warning, 60%) !default;
-$danger-border-subtle: tint-color($danger, 60%) !default;
-$light-border-subtle: $gray-200 !default;
-$dark-border-subtle: $gray-500 !default;
-// scss-docs-end theme-border-subtle-variables
+// // scss-docs-start theme-text-variables
+// $primary-text-emphasis: shade-color($primary, 60%) !default;
+// $secondary-text-emphasis: shade-color($secondary, 60%) !default;
+// $success-text-emphasis: shade-color($success, 60%) !default;
+// $info-text-emphasis: shade-color($info, 60%) !default;
+// $warning-text-emphasis: shade-color($warning, 60%) !default;
+// $danger-text-emphasis: shade-color($danger, 60%) !default;
+// $light-text-emphasis: $gray-700 !default;
+// $dark-text-emphasis: $gray-700 !default;
+// // scss-docs-end theme-text-variables
+
+// // scss-docs-start theme-bg-subtle-variables
+// $primary-bg-subtle: tint-color($primary, 80%) !default;
+// $secondary-bg-subtle: tint-color($secondary, 80%) !default;
+// $success-bg-subtle: tint-color($success, 80%) !default;
+// $info-bg-subtle: tint-color($info, 80%) !default;
+// $warning-bg-subtle: tint-color($warning, 80%) !default;
+// $danger-bg-subtle: tint-color($danger, 80%) !default;
+// $light-bg-subtle: color.mix($gray-100, $white) !default;
+// $dark-bg-subtle: $gray-400 !default;
+// // scss-docs-end theme-bg-subtle-variables
+
+// // scss-docs-start theme-border-subtle-variables
+// $primary-border-subtle: tint-color($primary, 60%) !default;
+// $secondary-border-subtle: tint-color($secondary, 60%) !default;
+// $success-border-subtle: tint-color($success, 60%) !default;
+// $info-border-subtle: tint-color($info, 60%) !default;
+// $warning-border-subtle: tint-color($warning, 60%) !default;
+// $danger-border-subtle: tint-color($danger, 60%) !default;
+// $light-border-subtle: $gray-200 !default;
+// $dark-border-subtle: $gray-500 !default;
+// // scss-docs-end theme-border-subtle-variables
// Characters which are escaped by the escape-svg function
$escaped-characters: (
(")", "%29"),
) !default;
-// Options
-//
-// Quickly modify global styling by enabling or disabling optional features.
-
-$enable-caret: true !default;
-$enable-rounded: true !default;
-$enable-shadows: false !default;
-$enable-gradients: false !default;
-$enable-transitions: true !default;
-$enable-reduced-motion: true !default;
-$enable-smooth-scroll: true !default;
-$enable-grid-classes: true !default;
-$enable-container-classes: true !default;
-$enable-cssgrid: false !default;
-$enable-button-pointers: true !default;
-$enable-rfs: true !default;
-$enable-validation-icons: true !default;
-$enable-negative-margins: false !default;
-$enable-deprecation-messages: true !default;
-$enable-important-utilities: true !default;
-
-$enable-dark-mode: true !default;
-$color-mode-type: data !default; // `data` or `media-query`
-
-// Prefix for :root CSS variables
-
-$prefix: bs- !default;
+// // Options
+// //
+// // Quickly modify global styling by enabling or disabling optional features.
+
+// $enable-caret: true !default;
+// $enable-rounded: true !default;
+// $enable-shadows: false !default;
+// $enable-gradients: false !default;
+// $enable-transitions: true !default;
+// $enable-reduced-motion: true !default;
+// $enable-smooth-scroll: true !default;
+// $enable-grid-classes: true !default;
+// $enable-container-classes: true !default;
+// $enable-cssgrid: false !default;
+// $enable-button-pointers: true !default;
+// $enable-rfs: true !default;
+// $enable-validation-icons: true !default;
+// $enable-negative-margins: false !default;
+// $enable-deprecation-messages: true !default;
+// $enable-important-utilities: true !default;
+
+// $enable-dark-mode: true !default;
+// $color-mode-type: data !default; // `data` or `media-query`
+
+// // Prefix for :root CSS variables
+// $prefix: bs- !default;
+
+// $color-mode-type: "media-query" !default;
+// $color-contrast-dark: #000 !default;
+// $color-contrast-light: #fff !default;
+// $min-contrast-ratio: 4.5 !default;
+
// Gradient
//
) !default;
// scss-docs-end grid-breakpoints
-@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
-@include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints");
+// @include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
+// @include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints");
// Grid containers
) !default;
// scss-docs-end container-max-widths
-@include _assert-ascending($container-max-widths, "$container-max-widths");
+// @include _assert-ascending($container-max-widths, "$container-max-widths");
// Grid columns
$btn-link-color: var(--#{$prefix}link-color) !default;
$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;
$btn-link-disabled-color: $gray-600 !default;
-$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default;
+$btn-link-color-contrast: color-contrast($link-color) !default;
+$btn-link-focus-shadow-rgb: to-rgb(color.mix($btn-link-color-contrast, $link-color, 15%)) !default;
// Allows for customizing button radius independently from global border radius
$btn-border-radius: var(--#{$prefix}border-radius) !default;
$navbar-toggler-focus-width: $btn-focus-width !default;
$navbar-toggler-transition: box-shadow .15s ease-in-out !default;
-$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;
-$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;
-$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;
-$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;
+$navbar-light-color: color-mix(in srgb, var(--#{$prefix}fg-black) 65%, transparent) !default;
+$navbar-light-hover-color: color-mix(in srgb, var(--#{$prefix}fg-black) 80%, transparent) !default;
+$navbar-light-active-color: color-mix(in srgb, var(--#{$prefix}fg-black) 100%, transparent) !default;
+$navbar-light-disabled-color: color-mix(in srgb, var(--#{$prefix}fg-black) 30%, transparent) !default;
$navbar-light-icon-color: rgba($body-color, .75) !default;
$navbar-light-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-icon-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default;
$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;
$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;
$accordion-icon-width: 1.25rem !default;
-$accordion-icon-color: $body-color !default;
-$accordion-icon-active-color: $primary-text-emphasis !default;
+$accordion-icon-color: var(--#{$prefix}body-color) !default;
+$accordion-icon-active-color: var(--#{$prefix}primary-text-emphasis) !default;
$accordion-icon-transition: transform .2s ease-in-out !default;
$accordion-icon-transform: rotate(-180deg) !default;
$breadcrumb-bg: null !default;
$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;
$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;
-$breadcrumb-divider: quote("/") !default;
+$breadcrumb-divider: string.quote("/") !default;
$breadcrumb-divider-flipped: $breadcrumb-divider !default;
$breadcrumb-border-radius: null !default;
// scss-docs-end breadcrumb-variables
// scss-docs-end carousel-variables
-// Spinners
-
-// scss-docs-start spinner-variables
-$spinner-width: 2rem !default;
-$spinner-height: $spinner-width !default;
-$spinner-vertical-align: -.125em !default;
-$spinner-border-width: .25em !default;
-$spinner-animation-speed: .75s !default;
-
-$spinner-width-sm: 1rem !default;
-$spinner-height-sm: $spinner-width-sm !default;
-$spinner-border-width-sm: .2em !default;
-// scss-docs-end spinner-variables
-
-
// Close
// scss-docs-start close-variables
$pre-color: null !default;
-@import "variables-dark"; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3
+// Dark color mode variables
+//
+// Custom variables for the `[data-bs-theme="dark"]` theme. Use this as a starting point for your own custom color modes by creating a new theme-specific file like `_variables-dark.scss` and adding the variables you need.
+
+//
+// Global colors
+//
+
+// scss-docs-start sass-dark-mode-vars
+// scss-docs-start theme-text-dark-variables
+$primary-text-emphasis-dark: tint-color($primary, 40%) !default;
+$secondary-text-emphasis-dark: tint-color($secondary, 40%) !default;
+$success-text-emphasis-dark: tint-color($success, 40%) !default;
+$info-text-emphasis-dark: tint-color($info, 40%) !default;
+$warning-text-emphasis-dark: tint-color($warning, 40%) !default;
+$danger-text-emphasis-dark: tint-color($danger, 40%) !default;
+$light-text-emphasis-dark: $gray-100 !default;
+$dark-text-emphasis-dark: $gray-300 !default;
+// scss-docs-end theme-text-dark-variables
+
+// scss-docs-start theme-bg-subtle-dark-variables
+$primary-bg-subtle-dark: shade-color($primary, 80%) !default;
+$secondary-bg-subtle-dark: shade-color($secondary, 80%) !default;
+$success-bg-subtle-dark: shade-color($success, 80%) !default;
+$info-bg-subtle-dark: shade-color($info, 80%) !default;
+$warning-bg-subtle-dark: shade-color($warning, 80%) !default;
+$danger-bg-subtle-dark: shade-color($danger, 80%) !default;
+$light-bg-subtle-dark: $gray-800 !default;
+$dark-bg-subtle-dark: color.mix($gray-800, $black) !default;
+// scss-docs-end theme-bg-subtle-dark-variables
+
+// scss-docs-start theme-border-subtle-dark-variables
+$primary-border-subtle-dark: shade-color($primary, 40%) !default;
+$secondary-border-subtle-dark: shade-color($secondary, 40%) !default;
+$success-border-subtle-dark: shade-color($success, 40%) !default;
+$info-border-subtle-dark: shade-color($info, 40%) !default;
+$warning-border-subtle-dark: shade-color($warning, 40%) !default;
+$danger-border-subtle-dark: shade-color($danger, 40%) !default;
+$light-border-subtle-dark: $gray-700 !default;
+$dark-border-subtle-dark: $gray-800 !default;
+// scss-docs-end theme-border-subtle-dark-variables
+
+$body-color-dark: $gray-300 !default;
+$body-bg-dark: $gray-900 !default;
+$body-secondary-color-dark: rgba($body-color-dark, .75) !default;
+$body-secondary-bg-dark: $gray-800 !default;
+$body-tertiary-color-dark: rgba($body-color-dark, .5) !default;
+$body-tertiary-bg-dark: color.mix($gray-800, $gray-900, 50%) !default;
+$body-emphasis-color-dark: $white !default;
+$border-color-dark: $gray-700 !default;
+$border-color-translucent-dark: rgba($white, .15) !default;
+$headings-color-dark: inherit !default;
+$link-color-dark: tint-color($primary, 40%) !default;
+$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage) !default;
+$code-color-dark: tint-color($code-color, 40%) !default;
+$mark-color-dark: $body-color-dark !default;
+$mark-bg-dark: $yellow-800 !default;
+
+
+//
+// Forms
+//
+
+$form-select-indicator-color-dark: $body-color-dark !default;
+$form-select-indicator-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>") !default;
+
+$form-switch-color-dark: rgba($white, .25) !default;
+$form-switch-bg-image-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>") !default;
+
+// scss-docs-start form-validation-colors-dark
+$form-valid-color-dark: $green-300 !default;
+$form-valid-border-color-dark: $green-300 !default;
+$form-invalid-color-dark: $red-300 !default;
+$form-invalid-border-color-dark: $red-300 !default;
+// scss-docs-end form-validation-colors-dark
+
+
+//
+// Accordion
+//
+
+$accordion-icon-color-dark: $primary-text-emphasis-dark !default;
+$accordion-icon-active-color-dark: $primary-text-emphasis-dark !default;
+
+$accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
+$accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>") !default;
+// scss-docs-end sass-dark-mode-vars
+
+
+//
+// Carousel
+//
+
+// scss-docs-start carousel-dark-variables
+$carousel-indicator-active-bg-dark: $black !default;
+$carousel-caption-color-dark: $black !default;
+$carousel-control-icon-filter-dark: invert(1) grayscale(100) !default;
+// scss-docs-end carousel-dark-variables
+
+//
+// Close button
+//
+
+$btn-close-filter-dark: invert(1) grayscale(100%) brightness(200%) !default;
-@import "mixins/banner";
-@include bsBanner(Grid);
-
-$include-column-box-sizing: true !default;
-
-@import "functions";
-@import "variables";
-@import "variables-dark";
-@import "maps";
+@use "banner" with (
+ $file: "Grid"
+);
-@import "mixins/breakpoints";
-@import "mixins/container";
-@import "mixins/grid";
-@import "mixins/utilities";
+@use "sass:map";
+@use "colors" as *;
+@use "config" as *;
+@use "variables" as *;
+@use "functions" as *;
+// @use "maps" as *;
-@import "vendor/rfs";
+@forward "utilities"; // Make utilities available downstream
+@use "utilities" as *; // Bring utilities into the current namespace
-@import "containers";
-@import "grid";
+@forward "layout/containers";
+@forward "layout/grid";
-@import "utilities";
-// Only use the utilities we need
// stylelint-disable-next-line scss/dollar-variable-default
$utilities: map-get-multiple(
$utilities,
)
);
-@import "utilities/api";
+@use "utilities/api";
-@import "mixins/banner";
-@include bsBanner(Reboot);
+@use "banner" with (
+ $file: "Reboot"
+);
-@import "functions";
-@import "variables";
-@import "variables-dark";
-@import "maps";
-@import "mixins";
-@import "root";
-@import "reboot";
+@forward "root";
+@forward "content/reboot";
-@import "mixins/banner";
-@include bsBanner(Utilities);
+@use "banner" with (
+ $file: "Utilities"
+);
// Configuration
-@import "functions";
-@import "variables";
-@import "variables-dark";
-@import "maps";
-@import "mixins";
-@import "utilities";
+// @forward "variables";
// Layout & components
-@import "root";
+@use "root" as *;
// Helpers
-@import "helpers";
+@forward "helpers";
// Utilities
-@import "utilities/api";
+@use "utilities" as *;
+@use "utilities/api";
-@import "mixins/banner";
-@include bsBanner("");
-
+@use "banner";
// scss-docs-start import-stack
-// Configuration
-@import "functions";
-@import "variables";
-@import "variables-dark";
-@import "maps";
-@import "mixins";
-@import "utilities";
+// Global CSS variables, layer definitions, and configuration
+@use "root";
+
+// Reboot & Content
+@use "content";
+
+// Layout
+@use "layout";
+
+// Forms
+@use "forms";
-// Layout & components
-@import "root";
-@import "reboot";
-@import "type";
-@import "images";
-@import "containers";
-@import "grid";
-@import "tables";
-@import "forms";
-@import "buttons";
-@import "transitions";
-@import "dropdown";
-@import "button-group";
-@import "nav";
-@import "navbar";
-@import "card";
-@import "accordion";
-@import "breadcrumb";
-@import "pagination";
-@import "badge";
-@import "alert";
-@import "progress";
-@import "list-group";
-@import "close";
-@import "toasts";
-@import "modal";
-@import "tooltip";
-@import "popover";
-@import "carousel";
-@import "spinners";
-@import "offcanvas";
-@import "placeholders";
+// Components
+@use "accordion";
+@use "alert";
+@use "badge";
+@use "breadcrumb";
+@use "buttons";
+@use "button-group";
+@use "card";
+@use "carousel";
+@use "close";
+@use "dropdown";
+@use "list-group";
+@use "modal";
+@use "nav";
+@use "navbar";
+@use "offcanvas";
+@use "pagination";
+@use "placeholders";
+@use "popover";
+@use "progress";
+@use "spinners";
+@use "toasts";
+@use "tooltip";
+@use "transitions";
// Helpers
-@import "helpers";
+@use "helpers";
// Utilities
-@import "utilities/api";
+@use "utilities/api";
// scss-docs-end import-stack
+@use "../config" as *;
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
+@use "../mixins/image" as *;
+@use "../mixins/border-radius" as *;
+@use "../mixins/box-shadow" as *;
+
// Responsive images (ensure images don't scale beyond their parents)
//
// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.
+@use "../colors" as *;
+@use "../config" as *;
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
+@use "../mixins/border-radius" as *;
+
// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix
+@use "sass:color";
+@use "sass:map";
+@use "sass:math";
+@use "../config" as *;
+@use "../colors" as *;
+@use "../variables" as *;
+@use "../functions" as *;
+@use "../layout/breakpoints" as *;
+
+// scss-docs-start table-variant
+@mixin table-variant($state, $background) {
+ .table-#{$state} {
+ $color: color-contrast(opaque($body-bg, $background));
+ $hover-bg: color.mix($color, $background, math.percentage($table-hover-bg-factor));
+ $striped-bg: color.mix($color, $background, math.percentage($table-striped-bg-factor));
+ $active-bg: color.mix($color, $background, math.percentage($table-active-bg-factor));
+ $table-border-color: color.mix($color, $background, math.percentage($table-border-factor));
+
+ --#{$prefix}table-color: #{$color};
+ --#{$prefix}table-bg: #{$background};
+ --#{$prefix}table-border-color: #{$table-border-color};
+ --#{$prefix}table-striped-bg: #{$striped-bg};
+ --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};
+ --#{$prefix}table-active-bg: #{$active-bg};
+ --#{$prefix}table-active-color: #{color-contrast($active-bg)};
+ --#{$prefix}table-hover-bg: #{$hover-bg};
+ --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};
+
+ color: var(--#{$prefix}table-color);
+ border-color: var(--#{$prefix}table-border-color);
+ }
+}
+// scss-docs-end table-variant
+
//
// Basic Bootstrap table
//
// Generate series of `.table-responsive-*` classes for configuring the screen
// size of where your table will overflow.
-@each $breakpoint in map-keys($grid-breakpoints) {
+@each $breakpoint in map.keys($grid-breakpoints) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
@include media-breakpoint-down($breakpoint) {
-//
-// Headings
-//
+@use "../config" as *;
+@use "../variables" as *;
+@use "../mixins/lists" as *;
+@use "../vendor/rfs" as *;
.lead {
@include font-size($lead-font-size);
--- /dev/null
+@forward "reboot";
+@forward "type";
+@forward "tables";
+@forward "images";
+@use "../config" as *;
+@use "../variables" as *;
+@use "../mixins/border-radius" as *;
+@use "../mixins/transition" as *;
+
.form-floating {
position: relative;
+@use "../config" as *;
+@use "../variables" as *;
+@use "../functions" as *;
+@use "../vendor/rfs" as *;
+@use "../mixins/border-radius" as *;
+@use "../mixins/box-shadow" as *;
+@use "../mixins/transition" as *;
+@use "../mixins/color-mode" as *;
+
//
// Check/radio
//
+@use "sass:math";
+@use "../config" as *;
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
+@use "../mixins/border-radius" as *;
+@use "../mixins/box-shadow" as *;
+@use "../mixins/transition" as *;
+@use "../mixins/gradients" as *;
//
// General form controls (plus a few specific high-level interventions)
//
// https://github.com/twbs/bootstrap/issues/23307
// TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved
// Multiply line-height by 1em if it has no unit
- height: if(unit($input-line-height) == "", $input-line-height * 1em, $input-line-height);
+ height: if(math.unit($input-line-height) == "", $input-line-height * 1em, $input-line-height);
// Android Chrome type="date" is taller than the other inputs
// because of "margin: 1px 24px 1px 4px" inside the shadow DOM
+@use "../variables" as *;
+@use "../mixins/border-radius" as *;
+@use "../mixins/box-shadow" as *;
+@use "../mixins/transition" as *;
+@use "../mixins/gradients" as *;
+
// Range
//
// Style range inputs the same across browsers. Vendor-specific rules for pseudo
+@use "../config" as *;
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
+@use "../mixins/border-radius" as *;
+@use "../mixins/box-shadow" as *;
+@use "../mixins/transition" as *;
+@use "../mixins/color-mode" as *;
+
// Select
//
// Replaces the browser default select with a custom one, mostly pulled from
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
//
// Form text
//
+@use "sass:map";
+@use "sass:string";
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
+@use "../mixins/border-radius" as *;
+
//
// Base styles
//
}
$validation-messages: "";
- @each $state in map-keys($form-validation-states) {
- $validation-messages: $validation-messages + ":not(." + unquote($state) + "-tooltip)" + ":not(." + unquote($state) + "-feedback)";
+ @each $state in map.keys($form-validation-states) {
+ $validation-messages: $validation-messages + ":not(." + string.unquote($state) + "-tooltip)" + ":not(." + string.unquote($state) + "-feedback)";
}
> :not(:first-child):not(.dropdown-menu)#{$validation-messages} {
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
//
// Labels
//
+@use "../config" as *;
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
+@use "../mixins/border-radius" as *;
+@use "../mixins/box-shadow" as *;
+
// Form validation
//
// Provide feedback to users when form field values are valid or invalid. Works
// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for
// server-side validation.
+// This mixin uses an `if()` technique to be compatible with Dart Sass
+// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details
+
+// scss-docs-start form-validation-mixins
+@mixin form-validation-state-selector($state) {
+ @if ($state == "valid" or $state == "invalid") {
+ .was-validated #{if(&, "&", "")}:#{$state},
+ #{if(&, "&", "")}.is-#{$state} {
+ @content;
+ }
+ } @else {
+ #{if(&, "&", "")}.is-#{$state} {
+ @content;
+ }
+ }
+}
+
+@mixin form-validation-state(
+ $state,
+ $color,
+ $icon,
+ $tooltip-color: color-contrast($color),
+ $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),
+ $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),
+ $border-color: $color
+) {
+ .#{$state}-feedback {
+ display: none;
+ width: 100%;
+ margin-top: $form-feedback-margin-top;
+ @include font-size($form-feedback-font-size);
+ font-style: $form-feedback-font-style;
+ color: $color;
+ }
+
+ .#{$state}-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%; // Contain to parent when possible
+ padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;
+ margin-top: .1rem;
+ @include font-size($form-feedback-tooltip-font-size);
+ line-height: $form-feedback-tooltip-line-height;
+ color: $tooltip-color;
+ background-color: $tooltip-bg-color;
+ @include border-radius($form-feedback-tooltip-border-radius);
+ }
+
+ @include form-validation-state-selector($state) {
+ ~ .#{$state}-feedback,
+ ~ .#{$state}-tooltip {
+ display: block;
+ }
+ }
+
+ .form-control {
+ @include form-validation-state-selector($state) {
+ border-color: $border-color;
+
+ @if $enable-validation-icons {
+ padding-right: $input-height-inner;
+ background-image: escape-svg($icon);
+ background-repeat: no-repeat;
+ background-position: right $input-height-inner-quarter center;
+ background-size: $input-height-inner-half $input-height-inner-half;
+ }
+
+ &:focus {
+ border-color: $border-color;
+ @if $enable-shadows {
+ @include box-shadow($input-box-shadow, $focus-box-shadow);
+ } @else {
+ // Avoid using mixin so we can pass custom focus shadow properly
+ box-shadow: $focus-box-shadow;
+ }
+ }
+ }
+ }
+
+ // stylelint-disable-next-line selector-no-qualifying-type
+ textarea.form-control {
+ @include form-validation-state-selector($state) {
+ @if $enable-validation-icons {
+ padding-right: $input-height-inner;
+ background-position: top $input-height-inner-quarter right $input-height-inner-quarter;
+ }
+ }
+ }
+
+ .form-select {
+ @include form-validation-state-selector($state) {
+ border-color: $border-color;
+
+ @if $enable-validation-icons {
+ &:not([multiple]):not([size]),
+ &:not([multiple])[size="1"] {
+ --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};
+ padding-right: $form-select-feedback-icon-padding-end;
+ background-position: $form-select-bg-position, $form-select-feedback-icon-position;
+ background-size: $form-select-bg-size, $form-select-feedback-icon-size;
+ }
+ }
+
+ &:focus {
+ border-color: $border-color;
+ @if $enable-shadows {
+ @include box-shadow($form-select-box-shadow, $focus-box-shadow);
+ } @else {
+ // Avoid using mixin so we can pass custom focus shadow properly
+ box-shadow: $focus-box-shadow;
+ }
+ }
+ }
+ }
+
+ .form-control-color {
+ @include form-validation-state-selector($state) {
+ @if $enable-validation-icons {
+ width: add($form-color-width, $input-height-inner);
+ }
+ }
+ }
+
+ .form-check-input {
+ @include form-validation-state-selector($state) {
+ border-color: $border-color;
+
+ &:checked {
+ background-color: $color;
+ }
+
+ &:focus {
+ box-shadow: $focus-box-shadow;
+ }
+
+ ~ .form-check-label {
+ color: $color;
+ }
+ }
+ }
+ .form-check-inline .form-check-input {
+ ~ .#{$state}-feedback {
+ margin-left: .5em;
+ }
+ }
+
+ .input-group {
+ > .form-control:not(:focus),
+ > .form-select:not(:focus),
+ > .form-floating:not(:focus-within) {
+ @include form-validation-state-selector($state) {
+ @if $state == "valid" {
+ z-index: 3;
+ } @else if $state == "invalid" {
+ z-index: 4;
+ }
+ }
+ }
+ }
+}
+// scss-docs-end form-validation-mixins
+
+
// scss-docs-start form-validation-states-loop
@each $state, $data in $form-validation-states {
@include form-validation-state($state, $data...);
--- /dev/null
+@forward "labels";
+@forward "form-text";
+@forward "form-control";
+@forward "form-select";
+@forward "form-check";
+@forward "form-range";
+@forward "floating-labels";
+@forward "input-group";
+@forward "validation";
+@use "../colors" as *;
+@use "../config" as *;
+@use "../variables" as *;
+
// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251
@each $color, $value in $theme-colors {
.text-bg-#{$color} {
+@use "../config" as *;
+@use "../colors" as *;
+@use "../variables" as *;
+
// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251
-@each $color, $value in $theme-colors {
- .link-#{$color} {
- color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null);
- text-decoration-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null);
+@layer helpers {
+ @each $color, $value in $theme-colors {
+ .link-#{$color} {
+ color: color-mix(in srgb, var(--#{$prefix}#{$color}), transparent var(--#{$prefix}link-opacity));
+ text-decoration-color: color-mix(in srgb, var(--#{$prefix}#{$color}), transparent var(--#{$prefix}link-underline-opacity));
- @if $link-shade-percentage != 0 {
- &:hover,
- &:focus {
- $hover-color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage));
- color: RGBA(#{to-rgb($hover-color)}, var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null);
- text-decoration-color: RGBA(to-rgb($hover-color), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null);
+ @if $link-shade-percentage != 0 {
+ &:hover,
+ &:focus {
+ $hover-color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage));
+ color: color-mix(in srgb, $hover-color, transparent var(--#{$prefix}link-opacity));
+ text-decoration-color: color-mix(in srgb, $hover-color, transparent var(--#{$prefix}link-underline-opacity));
+ }
}
}
}
-}
-// One-off special link helper as a bridge until v6
-.link-body-emphasis {
- color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null);
- text-decoration-color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null);
+ // One-off special link helper as a bridge until v6
+ .link-body-emphasis {
+ color: color-mix(in srgb, var(--#{$prefix}emphasis-color), transparent var(--#{$prefix}link-opacity));
+ text-decoration-color: color-mix(in srgb, var(--#{$prefix}emphasis-color), transparent var(--#{$prefix}link-underline-opacity));
- @if $link-shade-percentage != 0 {
- &:hover,
- &:focus {
- color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, .75)) if($enable-important-utilities, !important, null);
- text-decoration-color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-underline-opacity, .75)) if($enable-important-utilities, !important, null);
+ @if $link-shade-percentage != 0 {
+ &:hover,
+ &:focus {
+ color: color-mix(in srgb, var(--#{$prefix}emphasis-color), transparent var(--#{$prefix}link-opacity, .75));
+ text-decoration-color: color-mix(in srgb, var(--#{$prefix}emphasis-color), transparent var(--#{$prefix}link-underline-opacity, .75));
+ }
}
}
}
+@use "../config" as *;
+
.focus-ring:focus {
outline: 0;
// By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values
+@use "../config" as *;
+@use "../variables" as *;
+@use "../mixins/transition" as *;
+
.icon-link {
display: inline-flex;
gap: $icon-link-gap;
+@use "sass:map";
+@use "../config" as *;
+@use "../variables" as *;
+@use "../layout/breakpoints" as *;
+
// Shorthand
.fixed-top {
}
// Responsive sticky top and bottom
-@each $breakpoint in map-keys($grid-breakpoints) {
+@each $breakpoint in map.keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+@use "../variables" as *;
+
//
// Stretched link
//
-//
+@use "../mixins/text-truncate" as *;
// Text truncation
//
+@use "../mixins/visually-hidden" as *;
+
//
// Visually hidden
//
+@use "../variables" as *;
+
.vr {
display: inline-block;
align-self: stretch;
--- /dev/null
+@forward "color-bg";
+@forward "colored-links";
+@forward "focus-ring";
+@forward "icon-link";
+@forward "position";
+@forward "stacks";
+@forward "visually-hidden";
+@forward "stretched-link";
+@forward "text-truncation";
+@forward "vr";
+@use "sass:list";
+@use "sass:map";
+@use "../config" as *;
+
// Breakpoint viewport sizes and media queries.
//
// Breakpoints are defined as a map of (name: minimum width), order from small to large:
// md
// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))
// md
-@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
- $n: index($breakpoint-names, $name);
+@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map.keys($breakpoints)) {
+ $n: list.index($breakpoint-names, $name);
@if not $n {
@error "breakpoint `#{$name}` not found in `#{$breakpoints}`";
}
- @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
+ @return if($n < list.length($breakpoint-names), list.nth($breakpoint-names, $n + 1), null);
}
// Minimum breakpoint width. Null for the smallest (first) breakpoint.
// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))
// 576px
@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {
- $min: map-get($breakpoints, $name);
+ $min: map.get($breakpoints, $name);
@return if($min != 0, $min, null);
}
// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))
// 767.98px
@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {
- $max: map-get($breakpoints, $name);
+ $max: map.get($breakpoints, $name);
@return if($max and $max > 0, $max - .02, null);
}
+@use "../config" as *;
+@use "breakpoints" as *;
+
// Container widths
//
// Set the container width, and override it for fixed navbars in media queries.
+// Container mixins
+
+@mixin make-container($gutter: $container-padding-x) {
+ --#{$prefix}gutter-x: #{$gutter};
+ --#{$prefix}gutter-y: 0;
+ width: 100%;
+ padding-right: calc(var(--#{$prefix}gutter-x) * .5);
+ padding-left: calc(var(--#{$prefix}gutter-x) * .5);
+ margin-right: auto;
+ margin-left: auto;
+}
@if $enable-container-classes {
// Single container class with breakpoint max-widths
--- /dev/null
+@use "sass:map";
+@use "../config" as *;
+@use "breakpoints" as *;
+
+// mdo-do
+// - check gap utilities as replacement for gutter classes from v5
+
+// Row
+//
+// Rows contain your columns.
+
+:root {
+ @each $name, $value in $grid-breakpoints {
+ --#{$prefix}breakpoint-#{$name}: #{$value};
+ }
+}
+
+.grid {
+ --#{$prefix}columns: #{$grid-columns};
+ --#{$prefix}rows: 1;
+ --#{$prefix}gap: #{$grid-gutter-width};
+
+ display: grid;
+ grid-template-rows: repeat(var(--#{$prefix}rows), 1fr);
+ grid-template-columns: repeat(var(--#{$prefix}columns), 1fr);
+ gap: var(--#{$prefix}gap);
+}
+
+@each $breakpoint in map.keys($grid-breakpoints) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+
+ @include media-breakpoint-up($breakpoint, $grid-breakpoints) {
+ @if $grid-columns > 0 {
+ @for $i from 1 through $grid-columns {
+ .col#{$infix}-#{$i} {
+ grid-column: auto / span $i;
+ }
+
+ .end#{$infix}-#{$i} {
+ grid-column-end: $i;
+ }
+ }
+
+ // Start with `1` because `0` is an invalid value.
+ // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.
+ @for $i from 1 through ($grid-columns - 1) {
+ .col-start#{$infix}-#{$i} {
+ grid-column-start: $i;
+ }
+ }
+ }
+ }
+}
+
+// mdo-do: add to utilities?
+.grid-cols-subgrid {
+ grid-template-columns: subgrid;
+}
+
+.grid-fill {
+ --#{$prefix}gap: #{$grid-gutter-width};
+
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
+ grid-auto-flow: row;
+ gap: var(--#{$prefix}gap);
+}
+
+// mdo-do: add to utilities?
+.g-col-auto {
+ grid-column: auto/auto;
+}
+
+// mdo-do: add to utilities?
+.grid-cols-3 {
+ --#{$prefix}columns: 3;
+}
+.grid-cols-4 {
+ --#{$prefix}columns: 4;
+}
+.grid-cols-6 {
+ --#{$prefix}columns: 6;
+}
--- /dev/null
+@forward "breakpoints";
+@forward "containers";
+@forward "grid";
+++ /dev/null
-@include deprecate("`alert-variant()`", "v5.3.0", "v6.0.0");
-
-// scss-docs-start alert-variant-mixin
-@mixin alert-variant($background, $border, $color) {
- --#{$prefix}alert-color: #{$color};
- --#{$prefix}alert-bg: #{$background};
- --#{$prefix}alert-border-color: #{$border};
- --#{$prefix}alert-link-color: #{shade-color($color, 20%)};
-
- @if $enable-gradients {
- background-image: var(--#{$prefix}gradient);
- }
-
- .alert-link {
- color: var(--#{$prefix}alert-link-color);
- }
-}
-// scss-docs-end alert-variant-mixin
+@use "sass:list";
+@use "sass:math";
+@use "sass:meta";
+@use "../config" as *;
+@use "../variables" as *;
+
// stylelint-disable property-disallowed-list
// Single side border-radius
@function valid-radius($radius) {
$return: ();
@each $value in $radius {
- @if type-of($value) == number {
- $return: append($return, max($value, 0));
+ @if meta.type-of($value) == number {
+ $return: list.append($return, math.max($value, 0));
} @else {
- $return: append($return, $value);
+ $return: list.append($return, $value);
}
}
@return $return;
+@use "../config" as *;
+
@mixin box-shadow($shadow...) {
@if $enable-shadows {
$result: ();
+++ /dev/null
-// Button variants
-//
-// Easily pump out default styles, as well as :hover, :focus, :active,
-// and disabled options for all buttons
-
-// scss-docs-start btn-variant-mixin
-@mixin button-variant(
- $background,
- $border,
- $color: color-contrast($background),
- $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),
- $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),
- $hover-color: color-contrast($hover-background),
- $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),
- $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),
- $active-color: color-contrast($active-background),
- $disabled-background: $background,
- $disabled-border: $border,
- $disabled-color: color-contrast($disabled-background)
-) {
- --#{$prefix}btn-color: #{$color};
- --#{$prefix}btn-bg: #{$background};
- --#{$prefix}btn-border-color: #{$border};
- --#{$prefix}btn-hover-color: #{$hover-color};
- --#{$prefix}btn-hover-bg: #{$hover-background};
- --#{$prefix}btn-hover-border-color: #{$hover-border};
- --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};
- --#{$prefix}btn-active-color: #{$active-color};
- --#{$prefix}btn-active-bg: #{$active-background};
- --#{$prefix}btn-active-border-color: #{$active-border};
- --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};
- --#{$prefix}btn-disabled-color: #{$disabled-color};
- --#{$prefix}btn-disabled-bg: #{$disabled-background};
- --#{$prefix}btn-disabled-border-color: #{$disabled-border};
-}
-// scss-docs-end btn-variant-mixin
-
-// scss-docs-start btn-outline-variant-mixin
-@mixin button-outline-variant(
- $color,
- $color-hover: color-contrast($color),
- $active-background: $color,
- $active-border: $color,
- $active-color: color-contrast($active-background)
-) {
- --#{$prefix}btn-color: #{$color};
- --#{$prefix}btn-border-color: #{$color};
- --#{$prefix}btn-hover-color: #{$color-hover};
- --#{$prefix}btn-hover-bg: #{$active-background};
- --#{$prefix}btn-hover-border-color: #{$active-border};
- --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};
- --#{$prefix}btn-active-color: #{$active-color};
- --#{$prefix}btn-active-bg: #{$active-background};
- --#{$prefix}btn-active-border-color: #{$active-border};
- --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};
- --#{$prefix}btn-disabled-color: #{$color};
- --#{$prefix}btn-disabled-bg: transparent;
- --#{$prefix}btn-disabled-border-color: #{$color};
- --#{$prefix}gradient: none;
-}
-// scss-docs-end btn-outline-variant-mixin
-
-// scss-docs-start btn-size-mixin
-@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {
- --#{$prefix}btn-padding-y: #{$padding-y};
- --#{$prefix}btn-padding-x: #{$padding-x};
- @include rfs($font-size, --#{$prefix}btn-font-size);
- --#{$prefix}btn-border-radius: #{$border-radius};
-}
-// scss-docs-end btn-size-mixin
+@use "../config" as *;
+@use "../variables" as *;
+
// scss-docs-start caret-mixins
@mixin caret-down($width: $caret-width) {
border-top: $width solid;
+@use "../config" as *;
+
// scss-docs-start color-mode-mixin
@mixin color-mode($mode: light, $root: false) {
@if $color-mode-type == "media-query" {
+++ /dev/null
-// Container mixins
-
-@mixin make-container($gutter: $container-padding-x) {
- --#{$prefix}gutter-x: #{$gutter};
- --#{$prefix}gutter-y: 0;
- width: 100%;
- padding-right: calc(var(--#{$prefix}gutter-x) * .5);
- padding-left: calc(var(--#{$prefix}gutter-x) * .5);
- margin-right: auto;
- margin-left: auto;
-}
+@use "../config" as *;
+
// Deprecate mixin
//
// This mixin can be used to deprecate mixins or functions.
+@use "../colors" as *;
+@use "../config" as *;
+
// Gradients
// scss-docs-start gradient-bg-mixin
+++ /dev/null
-@include deprecate("`list-group-item-variant()`", "v5.3.0", "v6.0.0");
-
-// List Groups
-
-// scss-docs-start list-group-mixin
-@mixin list-group-item-variant($state, $background, $color) {
- .list-group-item-#{$state} {
- color: $color;
- background-color: $background;
-
- &.list-group-item-action {
- &:hover,
- &:focus {
- color: $color;
- background-color: shade-color($background, 10%);
- }
-
- &.active {
- color: $white;
- background-color: $color;
- border-color: $color;
- }
- }
- }
-}
-// scss-docs-end list-group-mixin
+++ /dev/null
-// Pagination
-
-// scss-docs-start pagination-mixin
-@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {
- --#{$prefix}pagination-padding-x: #{$padding-x};
- --#{$prefix}pagination-padding-y: #{$padding-y};
- @include rfs($font-size, --#{$prefix}pagination-font-size);
- --#{$prefix}pagination-border-radius: #{$border-radius};
-}
-// scss-docs-end pagination-mixin
+@use "../variables" as *;
+
@mixin reset-text {
font-family: $font-family-base;
// We deliberately do NOT reset font-size or overflow-wrap / word-wrap.
+++ /dev/null
-// scss-docs-start table-variant
-@mixin table-variant($state, $background) {
- .table-#{$state} {
- $color: color-contrast(opaque($body-bg, $background));
- $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));
- $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));
- $active-bg: mix($color, $background, percentage($table-active-bg-factor));
- $table-border-color: mix($color, $background, percentage($table-border-factor));
-
- --#{$prefix}table-color: #{$color};
- --#{$prefix}table-bg: #{$background};
- --#{$prefix}table-border-color: #{$table-border-color};
- --#{$prefix}table-striped-bg: #{$striped-bg};
- --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};
- --#{$prefix}table-active-bg: #{$active-bg};
- --#{$prefix}table-active-color: #{color-contrast($active-bg)};
- --#{$prefix}table-hover-bg: #{$hover-bg};
- --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};
-
- color: var(--#{$prefix}table-color);
- border-color: var(--#{$prefix}table-border-color);
- }
-}
-// scss-docs-end table-variant
+@use "sass:list";
+@use "../config" as *;
+
// stylelint-disable property-disallowed-list
@mixin transition($transition...) {
- @if length($transition) == 0 {
+ @if list.length($transition) == 0 {
$transition: $transition-base;
}
- @if length($transition) > 1 {
+ @if list.length($transition) > 1 {
@each $value in $transition {
@if $value == null or $value == none {
@warn "The keyword 'none' or 'null' must be used as a single argument.";
}
@if $enable-transitions {
- @if nth($transition, 1) != null {
+ @if list.nth($transition, 1) != null {
transition: $transition;
}
- @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {
+ @if $enable-reduced-motion and list.nth($transition, 1) != null and list.nth($transition, 1) != none {
@media (prefers-reduced-motion: reduce) {
transition: none;
}
+@use "sass:list";
+@use "sass:map";
+@use "sass:meta";
+@use "sass:string";
+@use "../config" as *;
+
// Utility generator
// Used to generate utilities & print utilities
@mixin generate-utility($utility, $infix: "", $is-rfs-media-query: false) {
- $values: map-get($utility, values);
+ $values: map.get($utility, values);
// If the values are a list or string, convert it into a map
- @if type-of($values) == "string" or type-of(nth($values, 1)) != "list" {
- $values: zip($values, $values);
+ @if meta.type-of($values) == "string" or meta.type-of(list.nth($values, 1)) != "list" {
+ // A single value is converted to a map with a null key.
+ @if list.length($values) == 1 {
+ $values: (null: list.nth($values, 1));
+ } @else {
+ $values: list.zip($values, $values);
+ }
}
@each $key, $value in $values {
- $properties: map-get($utility, property);
+ $properties: map.get($utility, property);
// Multiple properties are possible, for example with vertical or horizontal margins or paddings
- @if type-of($properties) == "string" {
- $properties: append((), $properties);
+ @if meta.type-of($properties) == "string" {
+ $properties: list.append((), $properties);
}
// Use custom class if present
- $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));
+ $property-class: if(map.has-key($utility, class), map.get($utility, class), list.nth($properties, 1));
$property-class: if($property-class == null, "", $property-class);
// Use custom CSS variable name if present, otherwise default to `class`
- $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));
+ $css-variable-name: if(map.has-key($utility, css-variable-name), map.get($utility, css-variable-name), map.get($utility, class));
// State params to generate pseudo-classes
- $state: if(map-has-key($utility, state), map-get($utility, state), ());
+ $state: if(map.has-key($utility, state), map.get($utility, state), ());
- $infix: if($property-class == "" and str-slice($infix, 1, 1) == "-", str-slice($infix, 2), $infix);
+ $infix: if($property-class == "" and string.slice($infix, 1, 1) == "-", string.slice($infix, 2), $infix);
// Don't prefix if value key is null (e.g. with shadow class)
$property-class-modifier: if($key, if($property-class == "" and $infix == "", "", "-") + $key, "");
- @if map-get($utility, rfs) {
+ @if map.get($utility, rfs) {
// Inside the media query
@if $is-rfs-media-query {
$val: rfs-value($value);
}
}
- $is-css-var: map-get($utility, css-var);
- $is-local-vars: map-get($utility, local-vars);
- $is-rtl: map-get($utility, rtl);
+ $is-css-var: map.get($utility, css-var);
+ $is-local-vars: map.get($utility, local-vars);
+ $is-rtl: map.get($utility, rtl);
@if $value != null {
@if $is-rtl == false {
--- /dev/null
+// Toggles
+//
+// Used in conjunction with global variables to enable certain theme features.
+
+// Vendor
+// @forward "vendor/rfs";
+
+// Deprecate
+@forward "deprecate";
+
+// Helpers
+@forward "color-mode";
+@forward "color-scheme";
+@forward "image";
+@forward "resize";
+@forward "visually-hidden";
+@forward "reset-text";
+@forward "text-truncate";
+
+// Utilities
+@forward "utilities";
+
+// Components
+@forward "backdrop";
+@forward "caret";
+
+// Skins
+@forward "border-radius";
+@forward "box-shadow";
+@forward "gradients";
+@forward "transition";
module.exports = {
spec_dir: 'scss',
// Make Jasmine look for `.test.scss` files
- spec_files: ['**/*.{test,spec}.scss'],
+ // spec_files: ['**/*.{test,spec}.scss'],
+ spec_files: ['**/_utilities.test.scss'],
// Compile them into JS scripts running `sass-true`
requires: [path.join(__dirname, 'sass-true/register')],
// Ensure we use `require` so that the require.extensions works
+++ /dev/null
-// TODO: this file can be removed safely in v6 when `@import "variables-dark"` will be removed at the end of _variables.scss
-
-@import "../../functions";
-@import "../../variables";
-// Voluntarily not importing _variables-dark.scss
-@import "../../maps";
-@import "../../mixins";
-@import "../../functions";
-@import "../../variables";
-@import "../../mixins";
+@use "../../functions" as *;
+@use "../../variables" as *;
+@use "../../mixins" as *;
+
+$true-terminal-output: false;
// Store original value
$original-enable-shadows: $enable-shadows;
// stylelint-disable selector-attribute-quotes
+@import "../../colors";
@import "../../functions";
@import "../../variables";
@import "../../variables-dark";
$color-mode-type: media-query;
+$true-terminal-output: false;
-@import "../../bootstrap";
+@use "../../bootstrap" as *;
@include describe("global $color-mode-type: media-query") {
@include it("compiles entirely Bootstrap CSS with media-query color mode") { // stylelint-disable-line block-no-empty
+@use "../../config" as *;
+@use "../../variables" as *;
+@use "../../functions" as *;
+@use "../../vendor/rfs" as *;
+@use "../../mixins/utilities" as *;
+
+$true-terminal-output: false;
$prefix: bs-;
$enable-important-utilities: false;
// Important: Do not import rfs to check that the mixin just calls the appropriate functions from it
-@import "../../mixins/utilities";
+// @import "../../mixins/utilities";
@mixin test-generate-utility($params...) {
@include assert() {
values: 1rem
)
) {
- .padding-1rem {
+ .padding {
padding: 1rem;
}
}
values: 1rem
)
) {
- .padding-x-1rem {
+ .padding-x {
padding-inline-start: 1rem;
padding-inline-end: 1rem;
}
values: 1rem
)
) {
- .padding-inline-start-1rem {
+ .padding-inline-start {
padding-inline-start: 1rem;
padding-inline-end: 1rem;
}
}
}
- @include describe("state") {
- @include it("Generates selectors for each states") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem,
- state: hover focus,
- )
- ) {
- .padding-1rem {
- padding: 1rem;
- }
-
- .padding-1rem-hover:hover {
- padding: 1rem;
- }
-
- .padding-1rem-focus:focus {
- padding: 1rem;
- }
- }
- }
- }
-
- @include describe("css-var"){
- @include it("sets a CSS variable instead of the property") {
- @include test-generate-utility(
- (
- property: padding,
- css-variable-name: padding,
- css-var: true,
- values: 1rem 2rem
- )
- ) {
- .padding-1rem {
- --bs-padding: 1rem;
- }
-
- .padding-2rem {
- --bs-padding: 2rem;
- }
- }
- }
-
- @include it("defaults to class") {
- @include test-generate-utility(
- (
- property: padding,
- class: padding,
- css-var: true,
- values: 1rem 2rem
- )
- ) {
- .padding-1rem {
- --bs-padding: 1rem;
- }
-
- .padding-2rem {
- --bs-padding: 2rem;
- }
- }
- }
- }
-
- @include describe("local-vars") {
- @include it("generates the listed variables") {
- @include test-generate-utility(
- (
- property: color,
- class: desaturated-color,
- local-vars: (
- color-opacity: 1,
- color-saturation: .25
- ),
- values: (
- blue: hsla(192deg, var(--bs-color-saturation), 0, var(--bs-color-opacity))
- )
- )
- ) {
- .desaturated-color-blue {
- --bs-color-opacity: 1;
- // Sass compilation will put a leading zero so we want to keep that one
- // stylelint-disable-next-line @stylistic/number-leading-zero
- --bs-color-saturation: 0.25;
- color: hsla(192deg, var(--bs-color-saturation), 0, var(--bs-color-opacity));
- }
- }
- }
- }
-
- @include describe("css-var & state") {
- @include it("Generates a rule with for each state with a CSS variable") {
- @include test-generate-utility(
- (
- property: padding,
- css-var: true,
- css-variable-name: padding,
- values: 1rem,
- state: hover focus,
- )
- ) {
- .padding-1rem {
- --bs-padding: 1rem;
- }
-
- .padding-1rem-hover:hover {
- --bs-padding: 1rem;
- }
-
- .padding-1rem-focus:focus {
- --bs-padding: 1rem;
- }
- }
- }
- }
-
- @include describe("rtl") {
- @include it("sets up RTLCSS for removal when false") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem,
- rtl: false
- )
- ) {
- /* rtl:begin:remove */
-
- .padding-1rem {
- padding: 1rem;
- }
-
- /* rtl:end:remove */
-
- }
- }
- }
-
- @include describe("rfs") {
- @include it("sets the fluid value when not inside media query") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem,
- rfs: true
- )
- ) {
- .padding-1rem {
- padding: rfs-fluid-value(1rem);
- }
- }
- }
-
- @include it("sets the value when inside the media query") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem,
- rfs: true
- ),
- $is-rfs-media-query: true
- ) {
- .padding-1rem {
- padding: rfs-value(1rem);
- }
- }
- }
- }
+ // @include describe("state") {
+ // @include it("Generates selectors for each states") {
+ // @include test-generate-utility(
+ // (
+ // property: padding,
+ // values: 1rem,
+ // state: hover focus,
+ // )
+ // ) {
+ // .padding-1rem {
+ // padding: 1rem;
+ // }
+
+ // .padding-1rem-hover:hover {
+ // padding: 1rem;
+ // }
+
+ // .padding-1rem-focus:focus {
+ // padding: 1rem;
+ // }
+ // }
+ // }
+ // }
+
+ // @include describe("css-var"){
+ // @include it("sets a CSS variable instead of the property") {
+ // @include test-generate-utility(
+ // (
+ // property: padding,
+ // css-variable-name: padding,
+ // css-var: true,
+ // values: 1rem 2rem
+ // )
+ // ) {
+ // .padding-1rem {
+ // --bs-padding: 1rem;
+ // }
+
+ // .padding-2rem {
+ // --bs-padding: 2rem;
+ // }
+ // }
+ // }
+
+ // @include it("defaults to class") {
+ // @include test-generate-utility(
+ // (
+ // property: padding,
+ // class: padding,
+ // css-var: true,
+ // values: 1rem 2rem
+ // )
+ // ) {
+ // .padding-1rem {
+ // --bs-padding: 1rem;
+ // }
+
+ // .padding-2rem {
+ // --bs-padding: 2rem;
+ // }
+ // }
+ // }
+ // }
+
+ // @include describe("local-vars") {
+ // @include it("generates the listed variables") {
+ // @include test-generate-utility(
+ // (
+ // property: color,
+ // class: desaturated-color,
+ // local-vars: (
+ // color-opacity: 1,
+ // color-saturation: .25
+ // ),
+ // values: (
+ // blue: hsla(192deg, var(--bs-color-saturation), 0, var(--bs-color-opacity))
+ // )
+ // )
+ // ) {
+ // .desaturated-color-blue {
+ // --bs-color-opacity: 1;
+ // // Sass compilation will put a leading zero so we want to keep that one
+ // // stylelint-disable-next-line @stylistic/number-leading-zero
+ // --bs-color-saturation: 0.25;
+ // color: hsla(192deg, var(--bs-color-saturation), 0, var(--bs-color-opacity));
+ // }
+ // }
+ // }
+ // }
+
+ // @include describe("css-var & state") {
+ // @include it("Generates a rule with for each state with a CSS variable") {
+ // @include test-generate-utility(
+ // (
+ // property: padding,
+ // css-var: true,
+ // css-variable-name: padding,
+ // values: 1rem,
+ // state: hover focus,
+ // )
+ // ) {
+ // .padding-1rem {
+ // --bs-padding: 1rem;
+ // }
+
+ // .padding-1rem-hover:hover {
+ // --bs-padding: 1rem;
+ // }
+
+ // .padding-1rem-focus:focus {
+ // --bs-padding: 1rem;
+ // }
+ // }
+ // }
+ // }
+
+ // @include describe("rtl") {
+ // @include it("sets up RTLCSS for removal when false") {
+ // @include test-generate-utility(
+ // (
+ // property: padding,
+ // values: 1rem,
+ // rtl: false
+ // )
+ // ) {
+ // /* rtl:begin:remove */
+
+ // .padding-1rem {
+ // padding: 1rem;
+ // }
+
+ // /* rtl:end:remove */
+
+ // }
+ // }
+ // }
+
+ // @include describe("rfs") {
+ // @include it("sets the fluid value when not inside media query") {
+ // @include test-generate-utility(
+ // (
+ // property: padding,
+ // values: 1rem,
+ // rfs: true
+ // )
+ // ) {
+ // .padding-1rem {
+ // padding: rfs-fluid-value(1rem);
+ // }
+ // }
+ // }
+
+ // @include it("sets the value when inside the media query") {
+ // @include test-generate-utility(
+ // (
+ // property: padding,
+ // values: 1rem,
+ // rfs: true
+ // ),
+ // $is-rfs-media-query: true
+ // ) {
+ // .padding-1rem {
+ // padding: rfs-value(1rem);
+ // }
+ // }
+ // }
+ // }
}
- @include describe("$infix") {
- @include it("inserts the given infix") {
- @include test-generate-utility(
- (
- property: "padding",
- values: (null: 1rem, small: .5rem, large: 2rem)
- ),
- $infix: -sm
- ) {
- .padding-sm {
- padding: 1rem;
- }
-
- .padding-sm-small {
- padding: .5rem;
- }
-
- .padding-sm-large {
- padding: 2rem;
- }
- }
- }
-
- @include it("strips leading - if class is null") {
- @include test-generate-utility(
- (
- property: visibility,
- class: null,
- values: (
- visible: visible,
- invisible: hidden,
- )
- ),
- -sm
- ) {
- .sm-visible {
- visibility: visible;
- }
-
- .sm-invisible {
- visibility: hidden;
- }
- }
- }
- }
+ // @include describe("$infix") {
+ // @include it("inserts the given infix") {
+ // @include test-generate-utility(
+ // (
+ // property: "padding",
+ // values: (null: 1rem, small: .5rem, large: 2rem)
+ // ),
+ // $infix: -sm
+ // ) {
+ // .padding-sm {
+ // padding: 1rem;
+ // }
+
+ // .padding-sm-small {
+ // padding: .5rem;
+ // }
+
+ // .padding-sm-large {
+ // padding: 2rem;
+ // }
+ // }
+ // }
+
+ // @include it("strips leading - if class is null") {
+ // @include test-generate-utility(
+ // (
+ // property: visibility,
+ // class: null,
+ // values: (
+ // visible: visible,
+ // invisible: hidden,
+ // )
+ // ),
+ // -sm
+ // ) {
+ // .sm-visible {
+ // visibility: visible;
+ // }
+
+ // .sm-invisible {
+ // visibility: hidden;
+ // }
+ // }
+ // }
+ // }
}
module.exports = (filename, { describe, it }) => {
const data = fs.readFileSync(filename, 'utf8')
- const TRUE_SETUP = '$true-terminal-output: false; @import "true";'
+ const TRUE_SETUP = '@use "true" as *;'
const sassString = TRUE_SETUP + data
runSass(
-// Loop over each breakpoint
-@each $breakpoint in map-keys($grid-breakpoints) {
+@use "sass:map";
+@use "sass:meta";
+@use "../config" as *;
+@use "../variables" as *;
+@use "../vendor/rfs" as *;
+@use "../layout/breakpoints" as *;
+@use "../mixins/utilities" as *;
+@use "../utilities" as *;
- // Generate media query if needed
- @include media-breakpoint-up($breakpoint) {
- $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+@layer utilities {
+ // Loop over each breakpoint
+ @each $breakpoint in map.keys($grid-breakpoints) {
- // Loop over each utility property
- @each $key, $utility in $utilities {
- // The utility can be disabled with `false`, thus check if the utility is a map first
- // Only proceed if responsive media queries are enabled or if it's the base media query
- @if type-of($utility) == "map" and (map-get($utility, responsive) or $infix == "") {
- @include generate-utility($utility, $infix);
- }
- }
- }
-}
-
-// RFS rescaling
-@media (min-width: $rfs-mq-value) {
- @each $breakpoint in map-keys($grid-breakpoints) {
- $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+ // Generate media query if needed
+ @include media-breakpoint-up($breakpoint) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
- @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {
// Loop over each utility property
@each $key, $utility in $utilities {
// The utility can be disabled with `false`, thus check if the utility is a map first
// Only proceed if responsive media queries are enabled or if it's the base media query
- @if type-of($utility) == "map" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == "") {
- @include generate-utility($utility, $infix, true);
+ @if meta.type-of($utility) == "map" and (map.get($utility, responsive) or $infix == "") {
+ @include generate-utility($utility, $infix);
}
}
}
}
-}
+ // RFS rescaling
+ @media (min-width: $rfs-mq-value) {
+ @each $breakpoint in map.keys($grid-breakpoints) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
-// Print utilities
-@media print {
- @each $key, $utility in $utilities {
- // The utility can be disabled with `false`, thus check if the utility is a map first
- // Then check if the utility needs print styles
- @if type-of($utility) == "map" and map-get($utility, print) == true {
- @include generate-utility($utility, "-print");
+ @if (map.get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {
+ // Loop over each utility property
+ @each $key, $utility in $utilities {
+ // The utility can be disabled with `false`, thus check if the utility is a map first
+ // Only proceed if responsive media queries are enabled or if it's the base media query
+ @if meta.type-of($utility) == "map" and map.get($utility, rfs) and (map.get($utility, responsive) or $infix == "") {
+ @include generate-utility($utility, $infix, true);
+ }
+ }
+ }
+ }
+ }
+
+
+ // Print utilities
+ @media print {
+ @each $key, $utility in $utilities {
+ // The utility can be disabled with `false`, thus check if the utility is a map first
+ // Then check if the utility needs print styles
+ @if meta.type-of($utility) == "map" and map.get($utility, print) == true {
+ @include generate-utility($utility, "-print");
+ }
}
}
}
+@use "sass:map";
+@use "sass:math";
+@use "sass:meta";
+@use "sass:string";
+
// stylelint-disable scss/dimension-no-non-numeric-values
// SCSS RFS mixin
// Factor of decrease
$rfs-factor: 10 !default;
-@if type-of($rfs-factor) != number or $rfs-factor <= 1 {
+@if meta.type-of($rfs-factor) != number or $rfs-factor <= 1 {
@error "`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.";
}
$enable-rfs: true !default;
// Cache $rfs-base-value unit
-$rfs-base-value-unit: unit($rfs-base-value);
-
-@function divide($dividend, $divisor, $precision: 10) {
- $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
- $dividend: abs($dividend);
- $divisor: abs($divisor);
- @if $dividend == 0 {
- @return 0;
- }
- @if $divisor == 0 {
- @error "Cannot divide by 0";
- }
- $remainder: $dividend;
- $result: 0;
- $factor: 10;
- @while ($remainder > 0 and $precision >= 0) {
- $quotient: 0;
- @while ($remainder >= $divisor) {
- $remainder: $remainder - $divisor;
- $quotient: $quotient + 1;
- }
- $result: $result * 10 + $quotient;
- $factor: $factor * .1;
- $remainder: $remainder * 10;
- $precision: $precision - 1;
- @if ($precision < 0 and $remainder >= $divisor * 5) {
- $result: $result + 1;
- }
- }
- $result: $result * $factor * $sign;
- $dividend-unit: unit($dividend);
- $divisor-unit: unit($divisor);
- $unit-map: (
- "px": 1px,
- "rem": 1rem,
- "em": 1em,
- "%": 1%
- );
- @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {
- $result: $result * map-get($unit-map, $dividend-unit);
- }
- @return $result;
-}
+$rfs-base-value-unit: math.unit($rfs-base-value);
// Remove px-unit from $rfs-base-value for calculations
@if $rfs-base-value-unit == px {
- $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);
+ $rfs-base-value: math.div($rfs-base-value, $rfs-base-value * 0 + 1);
}
@else if $rfs-base-value-unit == rem {
- $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));
+ $rfs-base-value: math.div($rfs-base-value, math.div($rfs-base-value * 0 + 1, $rfs-rem-value));
}
// Cache $rfs-breakpoint unit to prevent multiple calls
-$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);
+$rfs-breakpoint-unit-cache: math.unit($rfs-breakpoint);
// Remove unit from $rfs-breakpoint for calculations
@if $rfs-breakpoint-unit-cache == px {
- $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);
+ $rfs-breakpoint: math.div($rfs-breakpoint, $rfs-breakpoint * 0 + 1);
}
@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == "em" {
- $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));
+ $rfs-breakpoint: math.div($rfs-breakpoint, math.div($rfs-breakpoint * 0 + 1, $rfs-rem-value));
}
// Calculate the media query value
-$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});
+$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{math.div($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});
$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);
$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);
// Helper function to get the formatted non-responsive value
@function rfs-value($values) {
// Convert to list
- $values: if(type-of($values) != list, ($values,), $values);
+ $values: if(meta.type-of($values) != list, ($values,), $values);
$val: "";
}
@else {
// Cache $value unit
- $unit: if(type-of($value) == "number", unit($value), false);
+ $unit: if(meta.type-of($value) == "number", math.unit($value), false);
@if $unit == px {
// Convert to rem if needed
- $val: $val + " " + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);
+ $val: $val + " " + if($rfs-unit == rem, #{math.div($value, $value * 0 + $rfs-rem-value)}rem, $value);
}
@else if $unit == rem {
// Convert to px if needed
- $val: $val + " " + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);
+ $val: $val + " " + if($rfs-unit == px, #{math.div($value, $value * 0 + 1) * $rfs-rem-value}px, $value);
} @else {
// If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value
$val: $val + " " + $value;
}
// Remove first space
- @return unquote(str-slice($val, 2));
+ @return string.unquote(string.slice($val, 2));
}
// Helper function to get the responsive value calculated by RFS
@function rfs-fluid-value($values) {
// Convert to list
- $values: if(type-of($values) != list, ($values,), $values);
+ $values: if(meta.type-of($values) != list, ($values,), $values);
$val: "";
$val: $val + " 0";
} @else {
// Cache $value unit
- $unit: if(type-of($value) == "number", unit($value), false);
+ $unit: if(meta.type-of($value) == "number", math.unit($value), false);
// If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value
@if not $unit or $unit != px and $unit != rem {
$val: $val + " " + $value;
} @else {
// Remove unit from $value for calculations
- $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));
+ $value: math.div($value, $value * 0 + if($unit == px, 1, math.div(1, $rfs-rem-value)));
// Only add the media query if the value is greater than the minimum value
@if abs($value) <= $rfs-base-value or not $enable-rfs {
- $val: $val + " " + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);
+ $val: $val + " " + if($rfs-unit == rem, #{math.div($value, $rfs-rem-value)}rem, #{$value}px);
}
@else {
// Calculate the minimum value
- $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);
+ $value-min: $rfs-base-value + math.div(abs($value) - $rfs-base-value, $rfs-factor);
// Calculate difference between $value and the minimum value
$value-diff: abs($value) - $value-min;
// Base value formatting
- $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);
+ $min-width: if($rfs-unit == rem, #{math.div($value-min, $rfs-rem-value)}rem, #{$value-min}px);
// Use negative value if needed
$min-width: if($value < 0, -$min-width, $min-width);
$variable-unit: if($rfs-two-dimensional, vmin, vw);
// Calculate the variable width between 0 and $rfs-breakpoint
- $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};
+ $variable-width: #{math.div($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};
// Return the calculated value
$val: $val + " calc(" + $min-width + if($value < 0, " - ", " + ") + $variable-width + ")";
}
// Remove first space
- @return unquote(str-slice($val, 2));
+ @return string.unquote(string.slice($val, 2));
}
// RFS mixin
{group.icon && (
<svg
class="bi me-2"
- style={group.icon_color && `color: var(--bs-${group.icon_color});`}
+ style={group.icon_color && `color: light-dark(var(--bs-${group.icon_color}-500), var(--bs-${group.icon_color}-300));`}
aria-hidden="true"
>
<use xlink:href={`#${group.icon}`} />
---
<style is:global lang="scss">
- @import '../../../../scss/bootstrap.scss';
- @import '../../scss/docs';
- @import '../../scss/docs_search';
+ @use '../../../../scss/bootstrap' as *;
+ @use '../../scss/docs' as *;
+ @use '../../scss/docs_search' as *;
</style>
---
<style is:global lang="scss">
- @import '../../scss/docs';
- @import '../../scss/docs_search';
+ @use '../../scss/docs' as *;
+ @use '../../scss/docs_search' as *;
</style>
There are three mixins for buttons: button and button outline variant mixins (both based on `$theme-colors`), plus a button size mixin.
-<ScssDocs name="btn-variant-mixin" file="scss/mixins/_buttons.scss" />
+{/*<ScssDocs name="btn-variant-mixin" file="scss/mixins/_buttons.scss" />
<ScssDocs name="btn-outline-variant-mixin" file="scss/mixins/_buttons.scss" />
-<ScssDocs name="btn-size-mixin" file="scss/mixins/_buttons.scss" />
+<ScssDocs name="btn-size-mixin" file="scss/mixins/_buttons.scss" />*/}
### Sass loops
### Sass mixins
-<ScssDocs name="pagination-mixin" file="scss/mixins/_pagination.scss" />
+{/*<ScssDocs name="pagination-mixin" file="scss/mixins/_pagination.scss" />*/}
### Sass variables
-<ScssDocs name="spinner-variables" file="scss/_variables.scss" />
+<ScssDocs name="spinner-variables" file="scss/_spinners.scss" />
### Keyframes
In practice, those variables are then applied in Reboot like so:
-<ScssDocs name="reboot-body-rules" file="scss/_reboot.scss" />
+<ScssDocs name="reboot-body-rules" file="scss/content/_reboot.scss" />
Which allows you to make real-time customizations however you like:
Behind the scenes it looks like this:
-<ScssDocs name="table-variant" file="scss/mixins/_table-variants.scss" />
+{/*<ScssDocs name="table-variant" file="scss/mixins/_table-variants.scss" />*/}
## Table borders
## How nesting works
-To prevent _any_ styles from leaking to nested tables, we use the child combinator (`>`) selector in our CSS. Since we need to target all the `td`s and `th`s in the `thead`, `tbody`, and `tfoot`, our selector would look pretty long without it. As such, we use the rather odd looking `.table > :not(caption) > * > *` selector to target all `td`s and `th`s of the `.table`, but none of any potential nested tables.
+To prevent *any* styles from leaking to nested tables, we use the child combinator (`>`) selector in our CSS. Since we need to target all the `td`s and `th`s in the `thead`, `tbody`, and `tfoot`, our selector would look pretty long without it. As such, we use the rather odd looking `.table > :not(caption) > * > *` selector to target all `td`s and `th`s of the `.table`, but none of any potential nested tables.
Note that if you add `<tr>`s as direct children of a table, those `<tr>` will be wrapped in a `<tbody>` by default, thus making our selectors work as intended.
Within `scss/_variables.scss`, you’ll find Bootstrap’s color variables and Sass map. Here’s an example of the `$colors` Sass map:
-<ScssDocs name="colors-map" file="scss/_variables.scss" />
+{/*<ScssDocs name="colors-map" file="scss/_variables.scss" />*/}
-Add, remove, or modify values within the map to update how they’re used in many other components. Unfortunately at this time, not _every_ component utilizes this Sass map. Future updates will strive to improve upon this. Until then, plan on making use of the `${color}` variables and this Sass map.
+Add, remove, or modify values within the map to update how they’re used in many other components. Unfortunately at this time, not *every* component utilizes this Sass map. Future updates will strive to improve upon this. Until then, plan on making use of the `${color}` variables and this Sass map.
### Example
Use the ratio utility to manage the aspect ratios of content like `<iframe>`s, `<embed>`s, `<video>`s, and `<object>`s. These helpers also can be used on any standard HTML child element (e.g., a `<div>` or `<img>`). Customize the available aspect ratios with the Sass variable or the utility API.
<Callout>
-**Pro-Tip!** You don't need `frameborder="0"` on your `<iframe>`s as we override that for you in [Reboot]([[docsref:/content/reboot]]).
+**Pro-Tip!** You don’t need `frameborder="0"` on your `<iframe>`s as we override that for you in [Reboot]([[docsref:/content/reboot]]).
</Callout>
## Example
Most `background-color` utilities are generated by our theme colors, reassigned from our generic color palette variables.
-<ScssDocs name="color-variables" file="scss/_variables.scss" />
+{/*<ScssDocs name="color-variables" file="scss/_variables.scss" />*/}
<ScssDocs name="theme-color-variables" file="scss/_variables.scss" />
Grayscale colors are also available, but only a subset are used to generate any utilities.
-<ScssDocs name="gray-color-variables" file="scss/_variables.scss" />
+{/*<ScssDocs name="gray-color-variables" file="scss/_variables.scss" />*/}
Variables for setting `background-color` in `.bg-*-subtle` utilities in light and dark mode:
Grayscale colors are also available as a Sass map. **This map is not used to generate any utilities.**
-<ScssDocs name="gray-colors-map" file="scss/_variables.scss" />
+{/*<ScssDocs name="gray-colors-map" file="scss/_variables.scss" />*/}
RGB colors are generated from a separate Sass map:
Most `color` utilities are generated by our theme colors, reassigned from our generic color palette variables.
-<ScssDocs name="color-variables" file="scss/_variables.scss" />
+{/*<ScssDocs name="color-variables" file="scss/_variables.scss" />*/}
<ScssDocs name="theme-color-variables" file="scss/_variables.scss" />
Grayscale colors are also available, but only a subset are used to generate any utilities.
-<ScssDocs name="gray-color-variables" file="scss/_variables.scss" />
+{/*<ScssDocs name="gray-color-variables" file="scss/_variables.scss" />*/}
<ScssDocs name="theme-text-map" file="scss/_maps.scss" />
Grayscale colors are also available as a Sass map. **This map is not used to generate any utilities.**
-<ScssDocs name="gray-colors-map" file="scss/_variables.scss" />
+{/*<ScssDocs name="gray-colors-map" file="scss/_variables.scss" />*/}
RGB colors are generated from a separate Sass map:
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/vendor/rfs" as *;
+@use "../../../scss/mixins/border-radius" as *;
+
// stylelint-disable declaration-no-important, selector-max-id
//
@include font-size(.8125rem);
line-height: 1.4;
text-align: left;
- background-color: var(--bs-tertiary-bg);
+ background-color: var(--bs-bg-1);
a {
color: var(--bs-body-color);
+@use "../../../scss/variables" as *;
+@use "../../../scss/mixins/transition" as *;
+
.anchor-link {
padding: 0 .175rem;
font-weight: 400;
+@use "../../../scss/config" as *;
+@use "../../../scss/colors" as *;
+@use "../../../scss/layout/breakpoints" as *;
+@use "variables" as *;
+
//
// Brand guidelines
//
+@use "sass:color";
+@use "../../../scss/config" as *;
+@use "../../../scss/colors" as *;
+@use "variables" as *;
+
// Buttons
//
// Custom buttons for the docs.
}
.btn-bd-light {
- --btn-custom-color: #{mix($bd-violet, $white, 75%)};
+ --btn-custom-color: #{color.mix($bd-violet, $white, 75%)};
--bs-btn-color: var(--bs-gray-600);
--bs-btn-border-color: var(--bs-border-color);
+@use "../../../scss/config" as *;
+@use "../../../scss/colors" as *;
+@use "../../../scss/mixins/border-radius" as *;
+@use "variables" as *;
+
//
// Callouts
//
.bd-callout {
- --#{$prefix}link-color-rgb: var(--bd-callout-link);
+ --#{$prefix}link-color: var(--bd-callout-color);
+ --#{$prefix}link-hover-color: var(--bd-callout-color);
--#{$prefix}code-color: var(--bd-callout-code-color);
padding: 1.25rem;
margin-top: 1.25rem;
margin-bottom: 1.25rem;
- color: var(--bd-callout-color, inherit);
+ font-size: .875rem;
+ line-height: 1.5;
+ // color: var(--bd-callout-color, inherit);
background-color: var(--bd-callout-bg, var(--bs-gray-100));
+ border: 1px solid var(--bd-callout-border, var(--bs-border-color));
border-left: .25rem solid var(--bd-callout-border, var(--bs-gray-300));
+ @include border-radius(var(--bs-border-radius));
+ // box-shadow: inset .25rem 0 0 var(--bd-callout-border, var(--bs-gray-300));
h4 {
margin-bottom: .25rem;
}
+ a { font-weight: 500; }
+
> :last-child {
margin-bottom: 0;
}
// Variations
@each $variant in $bd-callout-variants {
.bd-callout-#{$variant} {
- --bd-callout-color: var(--bs-#{$variant}-text-emphasis);
- --bd-callout-bg: var(--bs-#{$variant}-bg-subtle);
- --bd-callout-border: var(--bs-#{$variant}-border-subtle);
+ // --bd-callout-color: var(--bs-#{$variant}-text);
+ --bd-callout-bg: color-mix(in srgb, var(--bs-#{$variant}-bg-subtle), transparent 50%);
+ --bd-callout-border: var(--bs-#{$variant}-border);
}
}
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/mixins/border-radius" as *;
+
// clipboard.js
//
// JS-based `Copy` buttons for code snippets.
+@use "sass:map";
+@use "sass:string";
+@use "../../../scss/config" as *;
+@use "../../../scss/colors" as *;
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/functions" as *;
+
//
// Docs color palette classes
//
-@each $color, $value in map-merge($colors, ("gray-500": $gray-500)) {
+@each $color, $value in map.merge($colors, ("gray-500": $gray-500)) {
.swatch-#{$color} {
color: color-contrast($value);
background-color: #{$value};
line-height: 1.35;
white-space: pre;
content:
- str-slice($contrast-ratio, 1, 4) "\A"
- str-slice($against-white, 1, 4) "\A"
- str-slice($against-black, 1, 4);
+ string.slice($contrast-ratio, 1, 4) "\A"
+ string.slice($against-white, 1, 4) "\A"
+ string.slice($against-black, 1, 4);
background-color: $value;
background-image:
linear-gradient(
+@use "../../../scss/config" as *;
+@use "../../../scss/variables" as *;
+@use "../../../scss/vendor/rfs" as *;
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/mixins/border-radius" as *;
+@use "variables" as *;
+
//
// Docs examples
//
.bd-example-cssgrid [class*="grid"] > * {
padding-top: .75rem;
padding-bottom: .75rem;
- background-color: rgba(var(--bd-violet-rgb), .15);
- border: 1px solid rgba(var(--bd-violet-rgb), .3);
+ background-color: color-mix(in srgb, var(--bd-violet) 15%, transparent);
+ border: 1px solid color-mix(in srgb, var(--bd-violet) 30%, transparent);
}
.bd-example-row .row + .row,
.bd-example-row-flex-cols .row {
min-height: 10rem;
- background-color: rgba(var(--bd-violet-rgb), .15);
+ background-color: color-mix(in srgb, var(--bd-violet) 15%, transparent);
}
.bd-example-flex div:not(.vr) {
- background-color: rgba(var(--bd-violet-rgb), .15);
- border: 1px solid rgba(var(--bd-violet-rgb), .3);
+ background-color: color-mix(in srgb, var(--bd-violet) 15%, transparent);
+ border: 1px solid color-mix(in srgb, var(--bd-violet) 30%, transparent);
}
-// Grid mixins
-.example-container {
- width: 800px;
- @include make-container();
-}
+// // Grid mixins
+// .example-container {
+// width: 800px;
+// @include make-container();
+// }
-.example-row {
- @include make-row();
-}
+// .example-row {
+// @include make-row();
+// }
-.example-content-main {
- @include make-col-ready();
+// .example-content-main {
+// @include make-col-ready();
- @include media-breakpoint-up(sm) {
- @include make-col(6);
- }
+// @include media-breakpoint-up(sm) {
+// @include make-col(6);
+// }
- @include media-breakpoint-up(lg) {
- @include make-col(8);
- }
-}
+// @include media-breakpoint-up(lg) {
+// @include make-col(8);
+// }
+// }
-.example-content-secondary {
- @include make-col-ready();
+// .example-content-secondary {
+// @include make-col-ready();
- @include media-breakpoint-up(sm) {
- @include make-col(6);
- }
+// @include media-breakpoint-up(sm) {
+// @include make-col(6);
+// }
- @include media-breakpoint-up(lg) {
- @include make-col(4);
- }
-}
+// @include media-breakpoint-up(lg) {
+// @include make-col(4);
+// }
+// }
// Ratio helpers
.bd-example-ratios {
.simple-list-example-scrollspy {
.active {
- background-color: rgba(var(--bd-violet-rgb), .15);
+ background-color: color-mix(in srgb, var(--bd-violet) 15%, transparent);
}
}
+@use "sass:color";
+@use "../../../scss/colors" as *;
+@use "../../../scss/variables" as *;
+@use "../../../scss/vendor/rfs" as *;
+@use "../../../scss/layout/breakpoints" as *;
+
//
// Bootstrap docs content theming
//
}
.bd-subtitle {
- @include font-size(1.5rem);
font-weight: 300;
+ @include font-size(1.5rem);
}
.bi {
--bs-tertiary-bg: #{$blue-600};
.dropdown-menu {
- --bs-dropdown-bg: #{mix($blue-500, $blue-600)};
+ --bs-dropdown-bg: #{color.mix($blue-500, $blue-600)};
--bs-dropdown-link-active-bg: #{$blue-700};
}
.btn-secondary {
- --bs-btn-bg: #{mix($gray-600, $blue-400, .5)};
+ --bs-btn-bg: #{color.mix($gray-600, $blue-400)};
--bs-btn-border-color: #{rgba($white, .25)};
- --bs-btn-hover-bg: #{darken(mix($gray-600, $blue-400, .5), 5%)};
+ --bs-btn-hover-bg: #{color.scale(color.mix($gray-600, $blue-400), $lightness: -5%)}; // stylelint-disable-line scss/at-function-named-arguments
--bs-btn-hover-border-color: #{rgba($white, .25)};
- --bs-btn-active-bg: #{darken(mix($gray-600, $blue-400, .5), 10%)};
+ --bs-btn-active-bg: #{color.scale(color.mix($gray-600, $blue-400), $lightness: -10%)}; // stylelint-disable-line scss/at-function-named-arguments
--bs-btn-active-border-color: #{rgba($white, .5)};
--bs-btn-focus-border-color: #{rgba($white, .5)};
--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(255, 255, 255, .2);
+@use "../../../scss/config" as *;
+@use "../../../scss/layout/breakpoints" as *;
+@use "variables" as *;
+
.bd-gutter {
--bs-gutter-x: #{$bd-gutter-x};
}
+@use "../../../scss/config" as *;
+@use "../../../scss/colors" as *;
+@use "../../../scss/variables" as *;
+@use "../../../scss/vendor/rfs" as *;
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/mixins/border-radius" as *;
+@use "../../../scss/mixins/transition" as *;
+@use "../../../scss/mixins/color-mode" as *;
+
.bd-masthead {
--bd-pink-rgb: #{to-rgb($pink)};
padding: 3rem 0;
// stylelint-disable
- background-image: linear-gradient(180deg, rgba(var(--bs-body-bg-rgb), .01), rgba(var(--bs-body-bg-rgb), 1) 85%),
- radial-gradient(ellipse at top left, rgba(var(--bs-primary-rgb), .5), transparent 50%),
- radial-gradient(ellipse at top right, rgba(var(--bd-accent-rgb), .5), transparent 50%),
- radial-gradient(ellipse at center right, rgba(var(--bd-violet-rgb), .5), transparent 50%),
- radial-gradient(ellipse at center left, rgba(var(--bd-pink-rgb), .5), transparent 50%);
+ background-image: linear-gradient(180deg, color-mix(in srgb, var(--bs-body-bg) 1%, transparent), var(--bs-body-bg) 85%),
+ radial-gradient(ellipse at top left, color-mix(in srgb, var(--bs-blue-500) 50%, transparent), transparent 50%),
+ radial-gradient(ellipse at top right, color-mix(in srgb, var(--bd-accent) 50%, transparent), transparent 50%),
+ radial-gradient(ellipse at center right, color-mix(in srgb, var(--bd-violet) 50%, transparent), transparent 50%),
+ radial-gradient(ellipse at center left, color-mix(in srgb, var(--bs-pink-500) 50%, transparent), transparent 50%);
// stylelint-enable
h1 {
}
}
-@if $enable-dark-mode {
- [data-bs-theme="dark"] {
- .masthead-followup-icon {
- mix-blend-mode: lighten;
- }
- }
-}
+// @if $enable-dark-mode {
+// [data-bs-theme="dark"] {
+// .masthead-followup-icon {
+// mix-blend-mode: lighten;
+// }
+// }
+// }
+@use "../../../scss/config" as *;
+@use "../../../scss/colors" as *;
+@use "../../../scss/functions" as *;
+@use "../../../scss/mixins" as *;
+@use "../../../scss/variables" as *;
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/vendor/rfs" as *;
+
.bd-navbar {
padding: .75rem 0;
background-color: transparent;
z-index: -1;
display: block;
content: "";
- background-image: linear-gradient(rgba(var(--bd-violet-rgb), 1), rgba(var(--bd-violet-rgb), .95));
+ background-image: linear-gradient(var(--bd-violet), color-mix(in srgb, var(--bd-violet), transparent 5%));
+ // background-image: linear-gradient(color-mix(in srgb, var(--bs-gray-900), $black 10%), color-mix(in srgb, var(--bs-gray-900), $black 15%));
}
.bd-navbar-toggle {
border-left: 0;
@include media-breakpoint-down(lg) {
- box-shadow: var(--bs-box-shadow-lg);
+ box-shadow: var(--#{$prefix}box-shadow-lg);
}
}
--bs-dropdown-min-width: 12rem;
--bs-dropdown-padding-x: .25rem;
--bs-dropdown-padding-y: .25rem;
- --bs-dropdown-link-hover-bg: rgba(var(--bd-violet-rgb), .1);
- --bs-dropdown-link-active-bg: rgba(var(--bd-violet-rgb), 1);
+ --bs-dropdown-link-hover-bg: color-mix(in srgb, var(--bd-violet), transparent 90%);
+ --bs-dropdown-link-active-bg: var(--bd-violet);
@include rfs(.875rem, --bs-dropdown-font-size);
@include font-size(.875rem);
@include border-radius(.5rem);
- box-shadow: $dropdown-box-shadow;
+ box-shadow: var(--#{$prefix}dropdown-box-shadow);
li + li {
margin-top: .125rem;
+@use "../../../scss/vendor/rfs" as *;
+
//
// Placeholder svg used in the docs.
//
+@use "variables" as *;
+@use "../../../scss/colors" as *;
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/mixins/color-mode" as *;
+@use "../../../scss/mixins/border-radius" as *;
+
// stylelint-disable selector-class-pattern
:root {
+@use "../../../scss/variables" as *;
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/mixins/border-radius" as *;
+
.bd-sidebar {
@include media-breakpoint-up(lg) {
position: sticky;
}
.bd-links-nav {
- @include media-breakpoint-down(lg) {
- font-size: .875rem;
- }
+ // @include media-breakpoint-down(lg) {
+ // font-size: .875rem;
+ // }
@include media-breakpoint-between(xs, lg) {
column-count: 2;
padding: .1875rem .5rem;
margin-top: .125rem;
margin-left: 1.125rem;
+ font-size: .875rem;
color: var(--bs-body-color);
text-decoration: if($link-decoration == none, null, none);
+@use "../../../scss/colors" as *;
+@use "variables" as *;
+
.skippy {
background-color: $bd-purple;
+@use "sass:color";
+@use "../../../scss/colors" as *;
+@use "../../../scss/variables" as *;
+@use "../../../scss/mixins/color-mode" as *;
+
:root,
[data-bs-theme="light"] {
// --base00: #fff;
--base05: #333;
--base06: #fff;
--base07: #{$teal-700}; // #9a6700
- --base08: #{mix($red-500, $red-600, 50%)}; // #bc4c00
+ --base08: #{color.mix($red-500, $red-600, 50%)}; // #bc4c00
--base09: #{$cyan-700}; // #087990
--base0A: #{$purple-500}; // #795da3
--base0B: #{$blue-700}; // #183691
+@use "../../../scss/layout/breakpoints" as *;
+@use "../../../scss/vendor/rfs" as *;
+@use "../../../scss/mixins/border-radius" as *;
+
// stylelint-disable selector-max-type, selector-no-qualifying-type
.bd-toc {
- font-size: .875rem;
container-type: inline-size;
@include media-breakpoint-up(lg) {
}
nav {
- @include font-size(.875rem);
+ font-size: .875rem;
+ // @include font-size(.875rem);
ul {
padding-left: 0;
-// stylelint-disable function-disallowed-list
+@use "sass:color";
+@use "../../../scss/config" as *;
+@use "../../../scss/colors" as *;
+@use "../../../scss/functions" as *;
+@use "../../../scss/mixins/color-mode" as *;
// Local docs variables
$bd-purple: #4c0bce;
-$bd-violet: lighten(saturate($bd-purple, 5%), 15%);
-$bd-purple-light: lighten(saturate($bd-purple, 5%), 45%);
+$bd-violet: color.adjust(color.adjust($bd-purple, $saturation: 5%), $lightness: 15%); // stylelint-disable-line scss/at-function-named-arguments
+$bd-purple-light: color.adjust(color.adjust($bd-purple, $saturation: 5%), $lightness: 45%); // stylelint-disable-line scss/at-function-named-arguments
$bd-accent: #ffe484;
$bd-gutter-x: 3rem;
$bd-callout-variants: info, warning, danger !default;
-:root,
-[data-bs-theme="light"] {
- --bd-purple: #{$bd-purple};
- --bd-violet: #{$bd-violet};
- --bd-accent: #{$bd-accent};
- --bd-violet-rgb: #{to-rgb($bd-violet)};
- --bd-accent-rgb: #{to-rgb($bd-accent)};
- --bd-pink-rgb: #{to-rgb($pink-500)};
- --bd-teal-rgb: #{to-rgb($teal-500)};
- --bd-violet-bg: var(--bd-violet);
- --bd-toc-color: var(--bd-violet);
- --bd-sidebar-link-bg: rgba(var(--bd-violet-rgb), .1);
- --bd-callout-link: #{to-rgb($blue-600)};
- --bd-callout-code-color: #{$pink-600};
- --bd-pre-bg: var(--bs-tertiary-bg);
-}
+@layer custom {
+ :root {
+ --bd-purple: #{$bd-purple};
+ --bd-violet: #{$bd-violet};
+ --bd-accent: #{$bd-accent};
+ // --bd-violet-rgb: #{to-rgb($bd-violet)};
+ // --bd-accent-rgb: #{to-rgb($bd-accent)};
+ // --bd-pink-rgb: #{to-rgb($pink-500)};
+ // --bd-teal-rgb: #{to-rgb($teal-500)};
+ --bd-violet-bg: var(--bd-violet);
+ --bd-toc-color: light-dark(var(--bd-violet), var(--bs-indigo-300));
+ --bd-sidebar-link-bg: color-mix(in srgb, var(--bd-violet), transparent 90%);
+ --bd-callout-link: #{$blue-600};
+ --bd-callout-code-color: light-dark(var(--bs-pink-600), var(--bs-pink-300));
+ --bd-pre-bg: light-dark(var(--bs-gray-100), color-mix(in srgb, var(--bs-gray-900), var(--bs-black) 25%));
+ --bd-swatch-shadow: inset 0 0 0 1px light-dark(rgb(0 0 0 / .1), rgb(255 255 255 / .1));
+ }
-@include color-mode(dark, true) {
- --bd-violet: #{mix($bd-violet, $white, 75%)};
- --bd-violet-bg: #{$bd-violet};
- --bd-toc-color: var(--#{$prefix}emphasis-color);
- --bd-sidebar-link-bg: rgba(#{to-rgb(mix($bd-violet, $black, 75%))}, .5);
- --bd-callout-link: #{to-rgb($blue-300)};
- --bd-callout-code-color: #{$pink-300};
- --bd-pre-bg: #{adjust-color($gray-900, $lightness: -2.5%)}; // stylelint-disable-line scss/at-function-named-arguments
+ // @include color-mode(dark, true) {
+ // --bd-violet: #{mix($bd-violet, $white, 75%)};
+ // --bd-violet-bg: #{$bd-violet};
+ // --bd-toc-color: var(--#{$prefix}emphasis-color);
+ // --bd-sidebar-link-bg: rgba(#{to-rgb(mix($bd-violet, $black, 75%))}, .5);
+ // --bd-callout-link: #{to-rgb($blue-300)};
+ // --bd-callout-code-color: #{$pink-300};
+ // --bd-pre-bg: #{color.adjust($gray-900, $lightness: -2.5%)}; // stylelint-disable-line scss/at-function-named-arguments
+ // }
}
-/*!
- * Bootstrap Docs (https://getbootstrap.com/)
+/* Bootstrap Docs (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors
* Licensed under the Creative Commons Attribution 3.0 Unported License.
* For details, see https://creativecommons.org/licenses/by/3.0/.
// Happy Bootstrapping!
// Load Bootstrap variables and mixins
-@import "../../../scss/functions";
-@import "../../../scss/variables";
-@import "../../../scss/mixins";
+// @use "../../../scss/config";
+// @use "../../../scss/colors";
+// @use "../../../scss/functions";
+// @use "../../../scss/mixins";
+// @use "../../../scss/variables";
+// @use "../../../scss/layout/breakpoints";
-// fusv-disable
-$enable-grid-classes: false;
-$enable-cssgrid: true;
-// fusv-enable
-@import "../../../scss/grid";
+// // fusv-disable
+// $enable-grid-classes: false;
+// $enable-cssgrid: true;
+// // fusv-enable
+// @use "../../../scss/layout/";
// Load docs components
-@import "variables";
-@import "navbar";
-@import "masthead";
-@import "ads";
-@import "content";
-@import "skippy";
-@import "sidebar";
-@import "layout";
-@import "toc";
-@import "footer";
-@import "component-examples";
-@import "buttons";
-@import "callouts";
-@import "brand";
-@import "colors";
-@import "clipboard-js";
-@import "placeholder-img";
-@import "scrolling";
+// @use "variables";
+@use "navbar";
+@use "masthead";
+@use "ads";
+@use "content";
+@use "skippy";
+@use "sidebar";
+@use "layout";
+@use "toc";
+@use "footer";
+@use "component-examples";
+@use "buttons";
+@use "callouts";
+@use "brand";
+@use "colors";
+@use "clipboard-js";
+@use "placeholder-img";
+@use "scrolling";
// Load docs dependencies
-@import "syntax";
-@import "anchor";
+@use "syntax";
+@use "anchor";
* For details, see https://creativecommons.org/licenses/by/3.0/.
*/
-@import "../../../scss/functions";
-@import "../../../scss/variables";
-@import "../../../scss/mixins";
-@import "variables";
-
-@import "@docsearch/css/dist/style";
-@import "search";
+@use "@docsearch/css/dist/style";
+@use "search";
* @see site/src/libs/astro.ts
*/
export declare global {
- export const AddedIn: typeof import('@shortcodes/AddedIn.astro').default
export const BsTable: typeof import('@shortcodes/BsTable.astro').default
export const CSSVariables: typeof import('@shortcodes/CSSVariables.astro').default
export const Callout: typeof import('@shortcodes/Callout.astro').default